diff --git a/v0.3/LICENSE b/v0.3/LICENSE new file mode 100644 index 0000000..b7b5f53 --- /dev/null +++ b/v0.3/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/MANIFEST.in b/v0.3/MANIFEST.in new file mode 100644 index 0000000..5eb8cfe --- /dev/null +++ b/v0.3/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/README b/v0.3/README new file mode 100644 index 0000000..d47f76f --- /dev/null +++ b/v0.3/README @@ -0,0 +1,177 @@ +******************************************** +* CryptoBox v0.2.99 * +******************************************** + +$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) Development + 6) Acknowledgements + 7) 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 files can be found in your local python installation directory. +The default location should be: + /usr/lib/python2.4/site-packages/cryptobox + +Adapt the directories given in /etc/cryptobox-server/cryptobox.conf to your +local installation. The paths below /usr/share should be below your python +directoy instead (see above) - sorry for this inconvenience! + +The CryptoBox webserver daemon that is given in /etc/init.d/cryptobox-server +may have to be changed to /usr/bin instead of /usr/sbin. + +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. + +The user manual (available via the 'help' plugin) should give you exhaustive +usage information. +The current version of the online manual is available at: + https://systemausfall.org/trac/cryptobox/wiki/CryptoBoxUser + + +5) Development +bug reports: please use our issue tracker + https://systemausfall.org/trac/cryptobox/newticket + +email: + cryptobox@systemausfall.org + +The CryptoBox project is mainly driven by sense.lab (http://senselab.org). + + +6) Acknowledgements +Besides the core development team, these people helped a lot: +Clavdia Horvat, Tadej Brce & Dušan Rebolj - slovenian translation +rike - french translation + +We also want to thank the numerous developers of the Free Software, the +CryptoBox depends on and that was used in development. + + +7) Licence +All scripts are GPL code (v2.0 or above). +The documentation is licenced under "Creative Commons 2.5 share-alike" (http://creativecommons.org/licenses/by-sa/2.5/). + diff --git a/v0.3/README.davfs b/v0.3/README.davfs new file mode 100644 index 0000000..6687d23 --- /dev/null +++ b/v0.3/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/README.proxy b/v0.3/README.proxy new file mode 100644 index 0000000..d71c420 --- /dev/null +++ b/v0.3/README.proxy @@ -0,0 +1,61 @@ +Running the CryptoBox behind a proxy + +This describes how to setup the CryptoBox webserver behind a apache or lighttpd +as proxy webservers. + + +-=-=-=- apache in front of the cryptobox-server (cherrypy) -=-=-=- + +The following section describes how to configure an apache2 webserver for +forwarding 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 + + + Now you should to a restart of apache2. + + +3) Testing + Now you should point your webserver to the proxy host and check if + the CryptoBox layout ist working 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/README.samba b/v0.3/README.samba new file mode 100644 index 0000000..5d87185 --- /dev/null +++ b/v0.3/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/README.ssl b/v0.3/README.ssl new file mode 100644 index 0000000..341560e --- /dev/null +++ b/v0.3/README.ssl @@ -0,0 +1,57 @@ +Encrypting the communication with 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. + +There are two ways for setting up a SSL connection: + - run the CryptoBox webserver behind an ssl-enabled webserver + - use stunnel to provide an SSL socket + + +1) 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. Thus you have to tell the + CryptoBox 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 + + +2) CryptoBox behind stunnel + You may want to tunnel the traffic between the cryptobox-server + and your browser. "stunnel" is an excellent candidate 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 (replace the ; a default CERT_CONF is shipped with the + cryptobox-server package): + + make-ssl-cert + + 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. + + +3) 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: + - set the request header value "X-SSL-Request" to "1" (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/bin-perl-old/Makefile b/v0.3/bin-perl-old/Makefile new file mode 100644 index 0000000..6023795 --- /dev/null +++ b/v0.3/bin-perl-old/Makefile @@ -0,0 +1,37 @@ +# Makefile to compile the binary suid-wrapper for cryptobox +# +# LIB_DIR should be defined in the higher level Makefile +# + +HEADER_FILE = cryptobox_wrapper.h +SRC_FILE = cryptobox_wrapper.c +CGI_SUID_FILE = cryptobox_cgi_wrapper +ROOT_SUID_FILE = cryptobox_root_wrapper + +CGI_FILENAME = cryptobox.pl +ROOT_SCRIPT_FILENAME = cbox-root-actions.sh +# fall back to default, if not overwritten +LIB_DIR = /usr/local/lib/cryptobox + + +# _always_ recompile (in case of a changed LIB_DIR) +.PHONY: build clean $(CGI_SUID_FILE) $(ROOT_SUID_FILE) + +build: $(CGI_SUID_FILE) $(ROOT_SUID_FILE) + + +$(CGI_SUID_FILE): $(SRC_FILE) + @echo '#define EXEC_PATH "$(LIB_DIR)/$(CGI_FILENAME)"' >$(HEADER_FILE) + $(CC) -o $(CGI_SUID_FILE) $(SRC_FILE) + -rm $(HEADER_FILE) + + +$(ROOT_SUID_FILE): $(SRC_FILE) + @echo '#define EXEC_PATH "$(LIB_DIR)/$(ROOT_SCRIPT_FILENAME)"' >$(HEADER_FILE) + $(CC) -o $(ROOT_SUID_FILE) $(SRC_FILE) + -rm $(HEADER_FILE) + + +clean: + -rm -f $(CGI_SUID_FILE) $(ROOT_SUID_FILE) $(HEADER_FILE) + diff --git a/v0.3/bin-perl-old/cbox-manage.sh b/v0.3/bin-perl-old/cbox-manage.sh new file mode 100755 index 0000000..30a82a6 --- /dev/null +++ b/v0.3/bin-perl-old/cbox-manage.sh @@ -0,0 +1,474 @@ +#!/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$ +# +# this script does EVERYTHING +# all other scripts are only frontends :) +# +# called by: +# - some rc-scripts +# - the web frontend cgi +# + +# TODO: check permissions and owners of config files, directories and scripts before +# running cbox-root-actions.sh + +set -eu + + +# default location of config file +CONF_FILE=/etc/cryptobox/cryptobox.conf + +LIB_DIR=$(dirname "$0") + +# to determine a nice default partition name +DEVICE_NAME_PREFIX="Disk #" + +# read the default setting file, if it exists +test -e /etc/default/cryptobox && . /etc/default/cryptobox + +test ! -e "$CONF_FILE" && echo "Could not find the configuration file: $CONF_FILE" >&2 && exit 1 + +# parse config file +. "$CONF_FILE" + +test ! -e "$CONF_FILE" && echo "Could not find the distribution specific configuration file: $CONF_FILE" >&2 && exit 1 + +# parse the distribution specific file +. "$DISTRIBUTION_CONF" + +# check for writable log file +test -w "$LOG_FILE" || LOG_FILE=/tmp/$(basename "$LOG_FILE") + +# retrieve configuration directory +CONFIG_DIR="$(getent passwd $CRYPTOBOX_USER | cut -d ':' -f 6)/config" +CONFIG_MARKER=cryptobox.marker + +## configuration +ROOT_PERM_SCRIPT="$LIB_DIR/cryptobox_root_wrapper" +# ROOT_PERM_SCRIPT needs the MNT_PARENT setting +export MNT_PARENT="$(cd ~; pwd)/mnt" + +######## stuff ########## + +# all partitions with a trailing number +ALL_PARTITIONS=$(cat /proc/partitions | sed '1,2d; s/ */ /g; s/^ *//' | cut -d " " -f 4 | grep '[0-9]$') + +######################### + +function log_msg() +{ + # the log file is (maybe) not writable during boot - try + # before writing ... + test -w "$LOG_FILE" || return 0 + echo >>"$LOG_FILE" + echo "##### `date` #####" >>"$LOG_FILE" + echo "$1" >>"$LOG_FILE" +} + + +function error_msg() +# parameters: ExitCode ErrorMessage +{ + local all=$@ + test $# -ne 2 && error_msg 1 "*** invalid call of error_msg *** $all" + echo "[`date`] - $2" | tee -a "$LOG_FILE" >&2 + # print the execution stack - not usable with busybox + # caller | sed 's/^/\t/' >&2 + exit "$1" +} + + +# Parameter: device +function is_device_allowed() { + # check for invalid characters and exit if one is found + local device=$(echo "$1" | sed 's#[^a-zA-Z0-9_\-\./]##g') + test "$1" = "$device" || return 1 + # remove leading "/dev/" + device=$(echo "$device" | sed 's#^/dev/##') + # return for empty name + test -z "$device" && return 1 + for a in $ALL_PARTITIONS + do echo "$device" | grep -q "^$a.*" && return 0 + done + # no matching device found - exit with error + return 1 +} + +function config_set_value() +# parameters: SettingName [SettingValue] +# read from stdin if SettingValue is not defined +{ + if test $# -gt 1 + then echo "$2" > "$CONFIG_DIR/$1" + else cat - >"$CONFIG_DIR/$1" + fi +} + + +function config_get_value() +# parameters: SettingName +{ + # use mounted config, if it exists - otherwise use defaults + local conf_dir + test -z "$1" && error_msg 1 "empty setting name" + # check for existence - maybe use default values (even for old + # releases that did not contain this setting) + if test -e "$CONFIG_DIR/$1" + then cat "$CONFIG_DIR/$1" + elif test -e "$CONFIG_DEFAULTS_DIR/$1" + then cat "$CONFIG_DEFAULTS_DIR/$1" + else case "$1" in + # you may place default values for older versions here + # for compatibility + * ) + error_msg 2 "unknown configuration value ($1)" + ;; + esac + fi + return 0 +} + + +function list_partitions_of_type() +# parameter: { config | crypto | plaindata | unused } +{ + local config= + local crypto= + local plaindata= + local unused= + for a in $ALL_PARTITIONS + do if "$ROOT_PERM_SCRIPT" is_crypto_partition "/dev/$a" + then crypto="$crypto /dev/$a" + elif "$ROOT_PERM_SCRIPT" is_config_partition "/dev/$a" + then config="$config /dev/$a" + elif "$ROOT_PERM_SCRIPT" is_plaindata_partition "/dev/$a" + then plaindata="$plaindata /dev/$a" + else unused="$unused /dev/$a" + fi + done + case "$1" in + config ) + echo "$config" + ;; + crypto ) + echo "$crypto" + ;; + plaindata ) + echo "$plaindata" + ;; + unused ) + echo "$unused" + ;; + * ) + error_msg 11 "wrong parameter ($1) for list_partition_types in $(basename $0)" + ;; + esac | tr " " "\n" | grep -v '^$' + return 0 +} + + +# Parameter: DEVICE +function get_device_mnt_name() { + "$ROOT_PERM_SCRIPT" get_device_mnt_name "$1" +} + + +# Parameter: DEVICE +function get_device_uuid() { + "$ROOT_PERM_SCRIPT" get_device_uuid "$1" +} + + +# Parameter: DEVICE +# return the readable name of the crypto container, if it is already defined +# if undefined - return the uuid +function get_device_name() { + local uuid=$(get_device_uuid "$1") + local dbname=$(config_get_value "names.db" | grep "^$uuid:" | cut -d ":" -f 2-) + # return dbname if it exists + test -n "$dbname" && echo "$dbname" && return 0 + # find a nice name for the new partition + local counter=1 + local test_name + local test_uuid + local test_result + # try to find a name with the defined "prefix" followed by a number ... + while true + do test_name="$DEVICE_NAME_PREFIX$counter" + if config_get_value "names.db" | grep -q ":$test_name$" + then counter=$((counter+1)) + else # save it for next time + set_device_name "$1" "$test_name" + echo "$test_name" + return 0 + fi + done +} + + +function set_device_name() +# TODO: the implementation is quite ugly, but it works (tm) +# Parameter: DEVICE NAME +{ + local uuid=$(get_device_uuid "$1") + # remove the old setting for this device and every possible entry with the same name + local new_config=$(config_get_value 'names.db' | sed "/^$uuid:/d; /^[^:]*:$2$/d"; echo "$uuid:$2") + echo "$new_config" | config_set_value "names.db" +} + + +function does_crypto_name_exist() +# Parameter: NAME +{ + config_get_value 'names.db' | grep -q "^[^:]*:$1$" +} + + +function create_crypto() +# Parameter: DEVICE NAME KEYFILE +# keyfile is necessary, to allow background execution via 'at' +{ + local device=$1 + local name=$2 + local keyfile=$3 + # otherwise the web interface will hang + # passphrase may be passed via command line + local key=$(<"$keyfile") + # remove the passphrase-file as soon as possible + dd if=/dev/zero of="$keyfile" bs=512 count=1 2>/dev/null + rm "$keyfile" + + log_msg "Creating crypto partition with the cipher $DEFAULT_CIPHER on $device" + echo "$key" | "$ROOT_PERM_SCRIPT" create_crypto "$device" + + set_crypto_name "$device" "$name" +} + + +function is_config_active() { + test -f "$CONFIG_DIR/$CONFIG_MARKER" +} + + +# Parameter: DEVICE +function is_mounted() { + local name=$(get_device_mnt_name "$1") + test -n "$name" && mountpoint -q "$MNT_PARENT/$name" +} + + +# Parameter: DEVICE +function is_plain() { + "$ROOT_PERM_SCRIPT" is_plain_partition "$1" +} + + +# Parameter: DEVICE +function is_encrypted() { + "$ROOT_PERM_SCRIPT" is_crypto_partition "$1" +} + + +# list which allowed disks are at the moment connected with the cbox +function get_available_disks() { + for scan in $SCAN_DEVICES + do for avail in $ALL_PARTITIONS + do echo "$avail" | grep -q "^$scan[^/]*" && echo "/dev/$avail" + done + done + return 0 +} + + +# Parameter: DEVICE +function mount_crypto() { + local device=$1 + test -z "$device" && error_msg 4 'No valid harddisk found!' + is_mounted "$device" && echo "The crypto filesystem is already active!" && return + # passphrase is read from stdin + log_msg "Mounting a crypto partition from $device" + "$ROOT_PERM_SCRIPT" mount "$device" >>"$LOG_FILE" 2>&1 +} + + +function umount_partition() { +# Parameter: device + local container=$(get_device_name "$1") + "$ROOT_PERM_SCRIPT" umount "$1" +} + + +function box_purge() +# removing just the first bytes from the harddisk should be enough +# every harddisk will be overriden! +# this feature is only useful for validation +{ + # TODO: not ALL harddisks, please! + get_available_disks | while read a + do log_msg "Purging $a ..." + "$ROOT_PERM_SCRIPT" trash_device "$a" + done +} + + +function turn_off_all_containers() { + # TODO - needs to be implemented + return 0 +} + + +### main ### + +# set PATH because thttpd removes /sbin and /usr/sbin for cgis +export PATH=/usr/sbin:/usr/bin:/sbin:/bin + + +ACTION=help +test $# -gt 0 && ACTION=$1 && shift + +case "$ACTION" in + crypto-up ) + test $# -ne 1 && error_msg 10 "invalid number of parameters for 'crypto-up'" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + mount_crypto "$1" + ;; + crypto-down ) + test $# -ne 1 && error_msg 10 "invalid number of parameters for 'crypto-down'" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + umount_partition "$1" + ;; + init ) + init_cryptobox >"$LOG_FILE" 2>&1 + ;; + list_container ) + test $# -ne 1 && error_msg 10 "invalid number of parameters for 'list_container'" + case "$1" in + config | unused | plaindata | crypto ) + list_partitions_of_type "$1" + ;; + * ) + return 1 + ;; + esac + return 0 + ;; + get_device_name ) + # Parameter: DEVICE + test $# -ne 1 && error_msg 10 "invalid number of parameters for 'get_device_name'" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + get_device_name "$1" + ;; + set_device_name ) + # Parameter: DEVICE NAME + test $# -ne 2 && error_msg 10 "invalid number of parameters for 'set_device_name'" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + set_device_name "$1" "$2" + ;; + device_init ) + # Parameter: DEVICE [KEYFILE] + test $# -lt 1 && error_msg 10 "invalid number of parameters for 'device_init' ($@)" + test $# -gt 2 && error_msg 10 "invalid number of parameters for 'device_init' ($@)" + if test $# -eq 2 + then test -z "$2" -o ! -e "$2" && error_msg 11 "invalid keyfile ($2) given for 'device_init'" + fi + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + if test $# -eq 2 + then "$ROOT_PERM_SCRIPT" create_crypto "$1" "$2" + else "$ROOT_PERM_SCRIPT" create_plain "$1" + fi + true + ;; + is_mounted ) + test $# -ne 1 && error_msg 10 "invalid number of parameters for 'is_mounted'" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + is_mounted "$1" + ;; + is_encrypted ) + test $# -ne 1 && error_msg 10 "invalid number of parameters for 'is_encrypted'" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + is_encrypted "$1" + ;; + is_plain ) + test $# -ne 1 && error_msg 10 "invalid number of parameters for 'is_plain'" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + is_plain "$1" + ;; + check_config) + is_config_active + ;; + get_available_disks ) + get_available_disks + ;; + set_config ) + test $# -ne 2 && error_msg 7 "'set_config' requires two parameters" + config_set_value "$1" "$2" + ;; + get_config ) + test $# -ne 1 && error_msg 6 "'get_config' requires exactly one parameter" + config_get_value "$1" + ;; + get_capacity_info ) + test $# -ne 1 && error_msg 6 "'get_capacity_info' requires exactly one parameter" + is_device_allowed "$1" || error_msg 12 "invalid device: $1" + is_mounted "$1" || error_msg 13 "the device is not mounted: $1" + name=$(get_device_mnt_name "$1") + df -h "$MNT_PARENT/$name" | tail -1 + ;; + diskinfo ) + get_available_disks | while read a + do "$ROOT_PERM_SCRIPT" diskinfo "$a" + done 2>/dev/null + ;; + box-purge ) + log_msg "Cleaning the CryptoBox ..." + turn_off_all_containers + "$0" config-down + box_purge >>"$LOG_FILE" 2>&1 + ;; + poweroff ) + log_msg "Shutting down the Cryptobox ..." + turn_off_all_containers + "$ROOT_PERM_SCRIPT" poweroff + ;; + reboot ) + log_msg "Rebooting the Cryptobox ..." + turn_off_all_containers + "$ROOT_PERM_SCRIPT" reboot + ;; + umount_all ) + log_msg "Unmounting all volumes ..." + turn_off_all_containers + ;; + * ) + echo "[$(basename $0)] - unknown action: $ACTION" >&2 + echo "Syntax: $(basename $0) ACTION [PARAMS]" + echo " crypto-up - mount crypto partition" + echo " crypto-down - unmount crypto partition" + echo " crypto-create - a wrapper for 'crypto-create-bg'" + echo " crypto-create-bg - create encrypted blockdevice and run mkfs" + echo " is_mounted - check, if crypto partition is mounted" + echo " check_config - check, if the configuration is usable" + echo " get_available_disks - shows all accessible disks" + echo " get_current_ip - get the current IP of the network interface" + echo " set_config NAME VALUE - change a configuration setting" + echo " get_config NAME - retrieve a configuration setting" + echo " get_device_name DEVICE - retrieve the human readable name of a partition" + echo " set_device_name DEVICE - set the human readable name of a partition" + echo " device_init DEVICE KEYFILE - initialize the filesystem of a partition (the keyfile just contains the passphrase)" + echo " get_capacity_info - print the output of 'df' for the (mounted) partition" + echo " diskinfo - show the partition table of the harddisk" + echo " box-purge - destroy the partition tables of all harddisks (delete everything)" + echo " poweroff - turn off the computer" + echo " reboot - reboot the computer" + echo + ;; + esac + +exit 0 + diff --git a/v0.3/bin-perl-old/cbox-root-actions.sh b/v0.3/bin-perl-old/cbox-root-actions.sh new file mode 100755 index 0000000..9e25d7d --- /dev/null +++ b/v0.3/bin-perl-old/cbox-root-actions.sh @@ -0,0 +1,341 @@ +#!/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$ +# +# this script is responsible for all dangerous actions, that require root privileges +# every action should be checked at least TWICE a day for open holes :) +# usually will get call via sudo +# +# called by: +# - cbox-manage.sh +# + +set -eu + +LIB_DIR=$(dirname "$0") +LIB_DIR=$(cd "$LIB_DIR"; pwd) + +test "$(id -u)" -ne 0 && echo "$(basename $0) - only root may call this script" >&2 && exit 100 + +# read the default setting file, if it exists +test -e /etc/default/cryptobox && . /etc/default/cryptobox + +# set CONF_FILE to default value, if not configured in /etc/default/cryptobox +CONF_FILE=${CONF_FILE:-/etc/cryptobox/cryptobox.conf} +# parse config file +. "$CONF_FILE" +# parse distribution specific file +. "$DISTRIBUTION_CONF" + +CB_SCRIPT="$LIB_DIR/cbox-manage.sh" +CONFIG_MARKER=cryptobox.marker + + +############ some useful functions ############### + +# check if the given device is part of the SCAN_DEVICE list +# every entry in SCAN_DEVICES is matched as "^/dev/${SCAN_DEVICE}[^/]*$" against +# the given device +# other devices may not be touched +function is_device_allowed() +# parameter: device +{ + for a in $SCAN_DEVICES + do echo "$1" | grep -q "^/dev/${a}[^/]*$" && return 0 + done + return 1 +} + + +# return the uuid of the partition (if possible) +# this works at least for luks, ext2/3 and vfat partitions +function get_device_uuid() { + local UUID + # check for luksUUID or ext2/3-uuid + if is_luks_device "$1" + then UUID=$("$CRYPTSETUP" luksUUID "$1") + else test -x "$BLKID" && UUID=$("$BLKID" -s UUID -o value -c /dev/null -w /dev/null "$1" 2>/dev/null) + fi + if test -z "$UUID" + then get_device_flat_name "$1" + else echo "$UUID" + fi + return 0 +} + + +# the device name is "flattened" +function get_device_flat_name() { + echo "$1" | sed 's#/#_#g' +} + + +# the basename of the mountpoint for this device - should be somehow human_readable +function get_device_mnt_name() { + "$CB_SCRIPT" get_device_name "$1" +} + + +# every devmapper name should look like a UUID +function is_uuid_valid() { + local hex=[0-9a-f] + echo "$1" | grep -q "^$hex\{8\}-$hex\{4\}-$hex\{4\}-$hex\{4\}-$hex\{12\}$" +} + + +# parameter ExitCode ErrorMessage +function error_msg() { + echo "CBOX-ERROR: [$(basename $0) - $ACTION] - $2" >&2 + exit $1 +} + + +# parameter: device sfdisk_layout_setup +# e.g.: /dev/hda "0,1,L \n,,L\n" +function partition_device() { + # TODO: allow different layouts + # TODO: skip config partition if a configuration is already active + # sfdisk -n doesn't actually write (for testing purpose) + if echo -e "$2" | "$SFDISK" -n "$1" + then echo -e "$2" | "$SFDISK" "$1" || return 1 + else return 2 + fi + true +} + + +function is_luks_device() +# parameter: device +{ + "$CRYPTSETUP" isLuks "$1" 2>/dev/null +} + + +################ main #################### + +ACTION=unknown +test $# -gt 0 && ACTION=$1 && shift + + +case "$ACTION" in + partition_disk ) + test $# -ne 2 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + partition_device "$1" "$2" || \ + error_msg 2 "failed to create new partition table on device $1" + ;; + mount ) + # parameters: device + # returns the relative name of the mointpoint for success + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + mnt_name=$(get_device_mnt_name "$1") + mountpoint -q "$MNT_PARENT/$mnt_name" && \ + error_msg 5 "a device with the same name ($mnt_name) is already mounted" + mkdir -p "$MNT_PARENT/$mnt_name" + if is_luks_device "$1" + then "$CRYPTSETUP" luksOpen "$1" "$mnt_name" || \ + error_msg 6 "could not open encrypted device $1" + if mount "$DEV_MAPPER_DIR/$mnt_name" "$MNT_PARENT/$mnt_name" + then true + else "$CRYPTSETUP" luksClose "$mnt_name" || true + error_msg 7 "wrong password for $1 supplied" + fi + else mount "$1" "$MNT_PARENT/$mnt_name" || \ + error_msg 8 "invalid filesystem on device $1" + fi + # just in case, that there is no ext2/3 filesystem: + # set uid option (will fail silently for ext2/3) + # TODO: there is no FILE_USER setting anymore - do we still need it? + #mount -o remount,uid="$FILE_USER" "$MNT_PARENT/$name" 2>/dev/null || true + # adapt top-level permission to current setup - again: may fail silently + #chown "$FILE_USER" "$MNT_PARENT/$name" 2>/dev/null || true + true + ;; + umount ) + #parameter: device + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + mnt_name=$(get_device_mnt_name "$1") + mountpoint -q "$MNT_PARENT/$mnt_name" || \ + error_msg 9 "the device ($1) is not mounted as '$mnt_name'" + # try to unmount - do it in lazy mode + umount -l "$MNT_PARENT/$mnt_name" + # TODO: check, what happens, if there are open files - does the device gets mapping removed? + # remove (if necessary) the device mapping + if test -e "$DEV_MAPPER_DIR/$mnt_name" + then "$CRYPTSETUP" luksClose "$mnt_name" || \ + error_msg 11 "could not remove the device mapper ($mnt_name) for device $1" + fi + # try to remove the mountpoint - a failure is not important + rmdir "$MNT_PARENT/$mnt_name" || true + # set exitcode + mountpoint -q "$MNT_PARENT/$mnt_name" && exit 1 + true + ;; + create_crypto ) + # parameter: device keyfile + test $# -ne 2 && error_msg 1 "wrong number of parameters" + keyfile=$2 + test -e "$keyfile" || error_msg 2 "keyfile ($keyfile) not found" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + # read the passphrase from stdin + # the iter-time is in milliseconds - keep it low for fast mounting + cat "$keyfile" | \ + "$CRYPTSETUP" --cipher "$DEFAULT_CIPHER" --iter-time 2000 --batch-mode luksFormat "$1" || \ + error_msg 11 "failed to create the encrypted partition" + name=$(get_device_mnt_name "$1") + cat "$keyfile" | "$CRYPTSETUP" --batch-mode luksOpen "$1" "$name" || \ + error_msg 12 "failed to open the encrypted partition" + # trash the passphrase in keyfile + echo "0123456789abcdefghijklmnopqrstuvwxyz" > "$keyfile" + # the disk cache surely prevents the previous line from being written, but we do it anyway ... + echo "zyxwvutsrqponmlkjihgfedcba9876543210" > "$keyfile" + rm "$keyfile" + # complete in background + ( + "$MKFS_DATA" "$DEV_MAPPER_DIR/$name" || \ + error_msg 13 "failed to create the encrypted filesystem" + "$CRYPTSETUP" --batch-mode luksClose "$name" || \ + error_msg 14 "failed to close the encrypted mapped device" + ) /dev/null 2>/dev/null & + true + ;; + create_plain ) + # parameter: device + test $# -ne 1 && error_msg 1 "wrong number of parameters for 'create_plain'" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + # complete in background + ( + "$MKFS_DATA" "$1" || \ + error_msg 15 "failed to create the plaintext filesystem" + ) /dev/null 2>/dev/null & + true + ;; + get_device_mnt_name ) + # parameter: device + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + get_device_mnt_name "$1" + ;; + get_device_uuid ) + # parameter: device + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + get_device_uuid "$1" + ;; + is_config_partition ) + # parameter: device + # returns exitcode 0 if the device contains a configuration + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + is_config=0 + tmp_dir=/tmp/$(basename $0)-$$-mnt + mkdir -p "$tmp_dir" + # error means "no config partition" + if mount "$1" "$CONFIG_DIR" + then test -e "$CONFIG_DIR/$CONFIG_MARKER" && is_config=1 + umount "$CONFIG_DIR" || \ + error_msg 14 "unable to unmount configation partition after probing" + fi + rmdir "$tmp_dir" || true + # return 0 if $device is a config partition + test "$is_config" -eq 1 && exit 0 + exit 1 + ;; + is_crypto_partition ) + # parameter: device + # returns exitcode 0 if the device contains a luks header + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + is_luks_device "$1" + ;; + is_plain_partition ) + # parameter: device + # returns exitcode 0 if the device contains a readable filesystem + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + status=0 + tmp_dir=/tmp/$(basename $0)-$$-mnt + mkdir -p "$tmp_dir" + if mount "$1" "$tmp_dir" >/dev/null 2>/dev/null + then test ! -e "$tmp_dir/$CONFIG_MARKER" && status=1 + umount "$tmp_dir" + fi + rmdir "$tmp_dir" || true + test "$status" -eq 1 && exit 0 + exit 1 + ;; + trash_device ) + # parameter: device + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + dd if=/dev/urandom of="$1" bs=512 count=1 2>/dev/null + ;; + diskinfo ) + # parameter: device + test $# -ne 1 && error_msg 1 "wrong number of parameters" + is_device_allowed "$1" || \ + error_msg 3 "this device ($1) is not listed in SCAN_DEVICES (see $CONF_FILE)" + "$SFDISK" -L -q -l "$1" + ;; + update_network ) + # parameter: none + ip= + # TODO: can we avoid to hard-code the filename ($CONFIG_DIR/ip) here? + test -e "$CONFIG_DIR/ip" && ip=$(<"$CONFIG_DIR/ip") + test -n "$z" && ifconfig "$NET_IFACE" "$ip" + ;; + poweroff ) + # TODO: check configuration setting before + "$POWEROFF" + ;; + reboot ) + # TODO: check configuration setting before + "$REBOOT" + ;; + * ) + echo "[$(basename $0)] - unknown action: $ACTION" >&2 + echo "Syntax: $(basename $0) ACTION PARAMETERS" + echo ' partition_disk $device $disk_layout' + echo ' get_device_name $device' + echo ' get_device_uuid $device' + echo ' create_crypto $device' + echo ' mount $device' + echo ' umount $name' + echo ' create_config $device' + echo ' mount_config $device' + echo ' remount_config { ro | rw }' + echo ' umount_config' + echo ' is_config_partition $device' + echo ' is_plain_partition $device' + echo ' is_crypto_partition $device' + echo ' trash_device $device' + echo ' diskinfo $device' + echo ' update_network' + echo ' poweroff' + echo ' reboot' + echo ' help' + echo + test "$ACTION" = "help" && exit 0 + # return error for any unknown/unspecified action + exit 1 + ;; + esac + diff --git a/v0.3/bin-perl-old/cryptobox.pl b/v0.3/bin-perl-old/cryptobox.pl new file mode 100755 index 0000000..7f36806 --- /dev/null +++ b/v0.3/bin-perl-old/cryptobox.pl @@ -0,0 +1,946 @@ +#!/usr/bin/perl +# +# 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$ +# +# the web interface of the CryptoBox +# + + +############################################### + +use strict; +use CGI; +use ClearSilver; +use ConfigFile; +use English; +use CGI::Carp; +use IO::File; +use POSIX; + +use constant CRYPTOBOX_VERSION => 0.3; + +# debug levels +use constant DEBUG_NONE => 0; +use constant DEBUG_ERROR => 1; +use constant DEBUG_WARN => 2; +use constant DEBUG_INFO => 3; + +# drop privileges +$UID = $EUID; +$GID = $EGID; + +# necessary for suid perl scripts (see 'man perlsec' for details) +$ENV{'PATH'} = '/bin:/usr/bin'; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer + +my $CONFIG_FILE = '/etc/cryptobox/cryptobox.conf'; + +my $pagedata; + +my ($LANGUAGE_DIR, $DEFAULT_LANGUAGE, $HTML_TEMPLATE_DIR, $DOC_DIR); +my ($CB_SCRIPT, $LOG_FILE, $IS_DEVEL, $STYLESHEET_URL, $DEBUG_LEVEL); + +# get the directory of the cryptobox scripts/binaries and untaint it +$CB_SCRIPT = $0; +$CB_SCRIPT =~ m/^(.*)\/[^\/]*$/; +$CB_SCRIPT = ($1)? "$1/cbox-manage.sh" : './cbox-manage.sh'; + +&fatal_error ("could not find configuration file ($CONFIG_FILE)") unless (-e $CONFIG_FILE); +my $config = ConfigFile::read_config_file($CONFIG_FILE); + +$LOG_FILE = $config->{LOG_FILE}; +$LANGUAGE_DIR = $config->{LANGUAGE_DIR}; +$DEFAULT_LANGUAGE = $config->{LANGUAGE}; +$HTML_TEMPLATE_DIR = $config->{HTML_TEMPLATE_DIR}; +$DOC_DIR = $config->{DOC_DIR}; +$IS_DEVEL = ( -e $config->{DEV_FEATURES_SCRIPT}); +$STYLESHEET_URL = $config->{STYLESHEET_URL}; +if (defined($config->{DEBUG_LEVEL})) { + $DEBUG_LEVEL = $config->{DEBUG_LEVEL}; +} else { + $DEBUG_LEVEL = DEBUG_ERROR; # default debug level +} + +my $query = new CGI; + +#################### subs ###################### + +# for fatal errors without the chance of clearsilver-rendering +sub fatal_error() { + my $message = shift; + + print "Content-Type: text/html\n\n"; + print "CryptoBox\n"; + print "\n"; + print '

' . $message . "

\n"; + print "\n"; + die "[CryptoBox]: $message"; +} + + +sub debug_msg() { + my ($level, $message) = @_; + return 0 unless ($level >= $DEBUG_LEVEL); + warn "[cryptobox]: $message"; +} + + +sub load_hdf { + my $hdf = ClearSilver::HDF->new(); + + my $fname = "$HTML_TEMPLATE_DIR/main.cs"; + &fatal_error ("Template directory is invalid ($fname not found)!") unless (-e "$fname"); + $hdf->setValue("Settings.TemplateDir","$HTML_TEMPLATE_DIR"); + + &fatal_error ("Documentation directory ($DOC_DIR) not found!") unless (-d "$DOC_DIR"); + $hdf->setValue("Settings.DocDir","$DOC_DIR"); + + # if it was requested as directory index (link from index.html), we should + # set a real script name - otherwise links with a query string will break + # ignore POST part of the SCRIPT_NAME (after "&") + (my $script_url = $ENV{'SCRIPT_NAME'}) =~ m/^[^&]*/; + $hdf->setValue("ScriptName", ($ENV{'SCRIPT_NAME'} eq '/')? '/cryptobox' : $script_url ); + + # set stylesheet url + $hdf->setValue("Settings.Stylesheet",$STYLESHEET_URL); + + &load_selected_language($hdf); + + &get_available_languages($hdf); + + return $hdf; +} + + +sub load_selected_language { + my $data = shift; + my $config_language; + + # load $DEFAULT_LANGUAGE - this is necessary, if a translation is incomplete + $data->readFile("$LANGUAGE_DIR/$DEFAULT_LANGUAGE" . ".hdf"); + + # load configured language, if it is valid + $config_language = &get_cbox_config("language"); + $config_language = $DEFAULT_LANGUAGE unless (&validate_language("$config_language")); + + # check for preferred browser language, if the box was not initialized yet + if ( ! &check_config()) + { + my $prefLang = &get_browser_language(); + # take it, if a supported browser language was found + $config_language = $prefLang unless ($prefLang eq ''); + } + + ######### temporary language setting? ############ + # the default language can be overriden by the language links in the + # upper right of the page + if ($query->param('weblang')) { + my $weblang = $query->param('weblang'); + if (&validate_language($weblang)) { + # load the data + $config_language = "$weblang"; + # add the setting to every link + # how it should be done now ... + $data->setValue('Settings.LinkAttrs.weblang', "$weblang"); + # old way of doing this ... (TODO: to be removed) + $data->setValue('Data.PostData.weblang', "$weblang"); + } else { + # no valid language was selected - so you may ignore it + $data->setValue('Data.Warning', 'InvalidLanguage'); + } + } + # import the configured resp. the temporarily selected language + $data->readFile("$LANGUAGE_DIR/$config_language" . ".hdf"); + + ########## select documentation language ########## + if (&validate_doc_language($config_language)) { + # selected web interface language + $data->setValue('Settings.DocLang', "$config_language"); + } elsif (&validate_doc_language($DEFAULT_LANGUAGE)) { + # configured CryptoBox language + $data->setValue('Settings.DocLang', "$DEFAULT_LANGUAGE"); + } else { + # default hardcoded language (english) + $data->setValue('Settings.DocLang', "en"); + } +} + + +# import the names of all available languages +sub get_available_languages { + my $data = shift; + my ($file, @files, $hdf, $lang_name); + + opendir(DIR, $LANGUAGE_DIR) or &fatal_error ("Language directory ($LANGUAGE_DIR) not accessible!"); + @files = sort grep { /.*\.hdf$/ } readdir(DIR); + close(DIR); + + foreach $file (@files) { + $hdf = ClearSilver::HDF->new(); + $hdf->readFile("$LANGUAGE_DIR/$file"); + substr($file, -4) = ""; + $lang_name = $hdf->getValue("Lang.Name", "$file"); + $data->setValue("Data.Languages." . "$file", "$lang_name"); + } +} + + +# look for preferred browser language setting +# this code was adapted from Per Cederberg - http://www.percederberg.net/home/perl/select.perl +# it returns an empty string, if no supported language was found +sub get_browser_language { + my ($str, @langs, @res); + + # Use language preference settings + if ($ENV{'HTTP_ACCEPT_LANGUAGE'} ne '') + { + @langs = split(/,/, $ENV{'HTTP_ACCEPT_LANGUAGE'}); + foreach (@langs) + { + # get the first part of the language setting + ($str) = ($_ =~ m/([a-z]+)/); + # check, if it supported by the cryptobox + $res[$#res+1] = $str if validate_language($str); + } + } + + # if everything fails - return empty string + $res[0] = "" if ($#res lt 0); + return $res[0]; +} + + +sub log_msg { + my $text = shift; + open(LOGFILE,">> $LOG_FILE"); + print LOGFILE "$text"; + close(LOGFILE); +} + + +sub check_ssl { + # check, if we are behind a proxy with ssl (e.g. pound) + return (0==0) if ($ENV{'HTTP_FRONT_END_HTTPS'} =~ m/^on$/i); + # environment variable set (e.g. via apache directive "SetEnv HTTPS On") + return (0==0) if ($ENV{'HTTPS'} =~ m/^on$/i); + # port 80 -> not encrypted + return (0==1) if ($ENV{'SERVER_PORT'} == 80); + # other ports -> maybe ok - we accept it + return (0==0); +} + + +# check, if the given device is mounted/used somehow +# Paramter: device +sub check_mounted { + my ($dev) = @_; + return (system($CB_SCRIPT,"is_mounted",$dev) == 0); +} + + +sub check_config { + return (system($CB_SCRIPT,"check_config") == 0); +} + + +sub exec_cb_script { + my (@params) = @_; + my ($pid, @result); + &fatal_error("unable to fork process") unless defined($pid = open(PROG_OUT, "-|")); + if (!$pid) { + # child + exec($CB_SCRIPT, @params) or &fatal_error("failed to execute $CB_SCRIPT!"); + exit 0; + } else { + # parent + # only read lines containing at least one non-whitespace character + @result = grep /\S/, ; + foreach (@result) { chomp; } + unless (close PROG_OUT) { + &debug_msg(DEBUG_WARN, "error while running $CB_SCRIPT (params:" . join(" ",@params) . "): $?"); + return undef; + } + } + if (wantarray) { + return @result; + } elsif (@result > 0) { + return join('',@result); + } else { + return ""; + } +} + + +sub check_init_running { + # TODO: improve this + return (0==1); +} + + +# Parameter: device +sub check_device_plaintext { + return (system("$CB_SCRIPT","is_plain",$1) == 0); +} + + +# Parameter: device +sub check_device_encryption { + return (system("$CB_SCRIPT","is_encrypted",$1) == 0); +} + + +sub is_harddisk_available { + my @all_disks = &exec_cb_script("get_available_disks"); + return @all_disks > 0; +} + + +sub get_available_disks { + my @all_disks = &exec_cb_script("get_available_disks"); + my ($disk, @return_disks); + foreach $disk (@all_disks) { + $disk =~ m#^([/\._\-\w]*)$#; + push @return_disks, $1 if ($1); + } + return @return_disks; +} + + +sub get_disk_name { + my ($dev) = @_; + my $disk_name = &exec_cb_script("get_device_name", $dev); + return $disk_name; +} + + +# return the value of a configuration setting (timeout, language, ip, ...) +# Parameter: setting_name +sub get_cbox_config { + my ($setting) = @_; + # tell the exec function, that we want a scalar instead of an array + my $scalar = &exec_cb_script("get_config",$setting); + return $scalar; +} + + +sub render { + my $pagefile = "$HTML_TEMPLATE_DIR/main.cs"; + print "Content-Type: text/html\n\n"; + + my $cs = ClearSilver::CS->new($pagedata); + $cs->parseFile($pagefile); + + print $cs->render(); +} + + +# mount an encrypted volume +# Parameter: device password +sub mount_vol { + my ($device, $pw) = @_; + + if (&check_mounted($device)) { + $pagedata->setValue('Data.Warning', 'IsMounted'); + } else { + if ($pw eq '') { + &exec_cb_script("crypto-up", $device); + } else { + open(PW_INPUT, "| $CB_SCRIPT crypto-up $device"); + print PW_INPUT $pw; + close(PW_INPUT); + } + } +} + + +# unmount a volume +# Parameter: device +sub umount_vol { + my ($device) = @_; + if (&check_mounted($device)) { + system($CB_SCRIPT, "crypto-down",$device); + } else { + $pagedata->setValue('Data.Warning', 'NotMounted'); + } +} + + +# Parameter: device passphrase +# ignore passphrase (or leave it empty) to create a plaintext volume +sub volume_init { + my ($device, $crypto_pw) = @_; + my $result; + + # only for encrypted volumes: + # write passphrase to a file - necessary as perl in secured mode does not allow + # the 'open(FH, "|/bin/prog ....")' call because of possible shell expansion - stupid 'open' :( + if ($crypto_pw) { + my ($fh, $temp_file); + # generate a temporary filename (as suggested by the Perl Cookbook) + do { $temp_file = POSIX::tmpnam() } + # TODO: reduce the file mask to the minimum - maybe 0600 would be a good choice + until $fh = IO::File->new($temp_file, O_RDWR|O_CREAT|O_EXCL); + close $fh; + unless (open(TMP, ">$temp_file")) { + &debug_msg(DEBUG_ERROR, "could not open a temporary file"); + return (1==0); + } + print TMP $crypto_pw; + close TMP; + $result = &exec_cb_script("device_init", $device, $temp_file); + unlink ($temp_file) if (-e $temp_file); + } else { + $result = &exec_cb_script("device_init", $device); + } + # just to be sure, that the file does not get left behind + # usually the script should overwrite and remove it + return defined($result); +} + + +sub box_purge { + &exec_cb_script("box-purge"); +} + + +sub system_poweroff { + &exec_cb_script("poweroff"); +} + + +sub system_reboot { + &exec_cb_script("reboot"); +} + + +sub validate_ip { + my $ip = shift; + my @octets = split /\./, $ip; + return 0 if ($#octets == 4); + # check for values and non-digits + return 0 if (($octets[0] <= 0) || ($octets[0] >= 255) || ($octets[0] =~ /\D/)); + return 0 if (($octets[1] < 0) || ($octets[1] >= 255) || ($octets[1] =~ /\D/)); + return 0 if (($octets[2] < 0) || ($octets[2] >= 255) || ($octets[2] =~ /\D/)); + return 0 if (($octets[3] <= 0) || ($octets[3] >= 255) || ($octets[3] =~ /\D/)); + return 1; +} + + +sub validate_timeout { + my $timeout = shift; + return 0 if ($timeout =~ /\D/); + return 1; +} + + +# check for a valid interface language +sub validate_language { + my $language = shift; + # check for non-alphanumeric character + return 0 if ($language =~ /\W/); + return 0 if ($language eq ""); + return 0 if ( ! -e "$LANGUAGE_DIR/$language" . '.hdf'); + return 1; +} + + +# check for a valid documentation language +sub validate_doc_language { + my $language = shift; + # check for non-alphanumeric character + return 0 if ($language =~ /\W/); + return 0 if ($language eq ""); + return 0 if ( ! -e "$DOC_DIR/$language"); + return 1; +} + + +################### main ######################### + + +$pagedata = load_hdf(); +my $current_admin_pw; + +my $action = $query->param('action'); +$action =~ m#^([\w\._\-]*)$#; +$action = ($1)? $1 : ''; + +my $device = $query->param('device'); +$device =~ m#^([/_\-\w\.]*)$#; +$device = ($1)? $1 : ''; + +# BEWARE: there are two kinds of actions: +# * some require a harddisk +# * some do not require a harddisk +# take care, that you put a new action into the appropriate block below + +# first: check for ssl! +if ( ! &check_ssl()) { + $pagedata->setValue('Data.Error', 'NoSSL'); + # remove port number from HTTP_HOST + my $hostname = $ENV{'HTTP_HOST'}; + $hostname =~ s/:[0-9]*//; + $pagedata->setValue('Data.Redirect.URL', "https://" . $hostname . $ENV{'SCRIPT_NAME'}); + $pagedata->setValue('Data.Redirect.Delay', "3"); +} elsif ($query->param('action')) { + #--------------------------------------------------------------# + # here you may define all cases that do not require a harddisk # + # put all other cases below the harddisk check # + #--------------------------------------------------------------# + #################### show_log ####################### + if ($action eq 'show_log') { + $pagedata->setValue('Data.Action', 'show_log'); + ##################### doc ############################ + } elsif ($action eq 'doc') { + if ($query->param('page')) { + $pagedata->setValue('Data.Doc.Page', $query->param('page')); + $pagedata->setValue('Data.Action', 'show_doc'); + } else { + $pagedata->setValue('Data.Doc.Page', 'CryptoBoxUser'); + $pagedata->setValue('Data.Action', 'show_doc'); + } + ##################### poweroff ###################### + } elsif ($action eq 'system_ask') { + $pagedata->setValue('Data.Action', 'form_system'); + ##################### reboot ######################## + } elsif ($action eq 'shutdown_do') { + if ($query->param('type') eq 'reboot') { + &system_reboot(); + $pagedata->setValue('Data.Success', 'ReBoot'); + $pagedata->setValue('Data.Redirect.Action', 'show_status'); + $pagedata->setValue('Data.Redirect.Delay', "180"); + } else { + &system_poweroff(); + $pagedata->setValue('Data.Success', 'PowerOff'); + } + $pagedata->setValue('Data.Action', 'empty'); + ##################### check for a harddisk ########################## + # catch this error, to prevent all following actions from execution # + ##################################################################### + } elsif ( ! &is_harddisk_available()) { + $pagedata->setValue('Data.Error', 'NoHardDisk'); + #-------------------------------------------------------# + # here you may define all cases that require a harddisk # + #-------------------------------------------------------# + ################ umount_do ####################### + } elsif ($action eq 'umount_do') { + if ($device eq '') { + &debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device')); + $pagedata->setValue('Data.Warning', 'InvalidDevice'); + $pagedata->setValue('Data.Action', 'emptu'); + } elsif ( ! &check_config()) { + $pagedata->setValue('Data.Warning', 'NotInitialized'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif (&check_init_running()) { + $pagedata->setValue('Data.Warning', 'InitNotFinished'); + $pagedata->setValue('Data.Action', 'empty'); + $pagedata->setValue('Data.Redirect.Action', 'form_config'); + $pagedata->setValue('Data.Redirect.Delay', "30"); + } elsif ( ! &check_mounted($device)) { + $pagedata->setValue('Data.Warning', 'NotMounted'); + $pagedata->setValue('Data.Action', 'show_volume'); + } else { + # unmounten + &umount_vol($device); + if (&check_mounted($device)) { + $pagedata->setValue('Data.Warning', 'UmountFailed'); + $pagedata->setValue('Data.Action', 'show_volume'); + } else { + #$pagedata->setValue('Data.Success', 'UmountDone'); + $pagedata->setValue('Data.Action', 'show_volume'); + } + } + ################ mount_do ######################## + } elsif ($action eq 'mount_do') { + my $is_encrypted = &check_device_encryption($device) if ($device ne ''); + if ($device eq '') { + &debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device')); + $pagedata->setValue('Data.Warning', 'InvalidDevice'); + $pagedata->setValue('Data.Action', 'empty'); + } elsif ( ! &check_config()) { + $pagedata->setValue('Data.Warning', 'NotInitialized'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif (&check_init_running()) { + $pagedata->setValue('Data.Warning', 'InitNotFinished'); + $pagedata->setValue('Data.Action', 'empty'); + $pagedata->setValue('Data.Redirect.Action', 'form_config'); + $pagedata->setValue('Data.Redirect.Delay', "30"); + } elsif (&check_mounted($device)) { + $pagedata->setValue('Data.Warning', 'IsMounted'); + $pagedata->setValue('Data.Action', 'show_volume'); + } elsif ($is_encrypted && ($query->param('crypto_password') eq '')) { + # leeres Passwort + $pagedata->setValue('Data.Warning', 'EmptyCryptoPassword'); + $pagedata->setValue('Data.Action', 'show_volume'); + } else { + # mounten + if ($is_encrypted) { + &mount_vol($device, $query->param('crypto_password')); + } else { + &mount_vol($device); + } + if (!&check_mounted($device)) { + $pagedata->setValue('Data.Warning', 'MountFailed'); + $pagedata->setValue('Data.Action', 'show_volume'); + } else { + #$pagedata->setValue('Data.Success', 'MountDone'); + $pagedata->setValue('Data.Action', 'show_volume'); + } + } + ################## mount_ask ####################### + } elsif ($action eq 'mount_ask') { + if ( ! &check_config()) { + $pagedata->setValue('Data.Warning', 'NotInitialized'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif (&check_init_running()) { + $pagedata->setValue('Data.Warning', 'InitNotFinished'); + $pagedata->setValue('Data.Action', 'empty'); + $pagedata->setValue('Data.Redirect.Action', 'form_config'); + $pagedata->setValue('Data.Redirect.Delay', "30"); + } else { + $pagedata->setValue('Data.Action', 'form_mount'); + } + ################# umount_ask ######################## + } elsif ($action eq 'umount_ask') { + if ( ! &check_config()) { + $pagedata->setValue('Data.Warning', 'NotInitialized'); + $pagedata->setValue('Data.Action', 'form_init'); + } else { + $pagedata->setValue('Data.Action', 'form_umount'); + } + ################## init_ask ######################### + } elsif ($action eq 'init_ask') { + if (&check_init_running()) { + $pagedata->setValue('Data.Warning', 'InitNotFinished'); + $pagedata->setValue('Data.Action', 'form_config'); + } elsif (&check_config()) { + $pagedata->setValue('Data.Warning', 'AlreadyConfigured'); + $pagedata->setValue('Data.Action', 'form_init'); + } else { + $pagedata->setValue('Data.Action', 'form_init'); + } + #################### init_do ######################## + } elsif ($action eq 'init_do') { + $current_admin_pw = &get_cbox_config("admin_pw"); + if ($current_admin_pw ne '' && $current_admin_pw ne $query->param('current_admin_password')) { + $pagedata->setValue('Data.Warning', 'WrongAdminPassword'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif ($query->param('admin_password') ne $query->param('admin_password2')) { + # different admin-passwords + $pagedata->setValue('Data.Warning', 'DifferentAdminPasswords'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif ($query->param('crypto_password') ne $query->param('crypto_password2')) { + # different crypto-passwords + $pagedata->setValue('Data.Warning', 'DifferentCryptoPasswords'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif ($query->param('crypto_password') eq '') { + # empty password + $pagedata->setValue('Data.Warning', 'EmptyCryptoPassword'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif ($query->param('confirm') ne $pagedata->getValue('Lang.Text.ConfirmInit','')) { + # wrong confirm string + $pagedata->setValue('Data.Warning', 'InitNotConfirmed'); + $pagedata->setValue('Data.Action', 'form_init'); + } else { + if (&volume_init($query->param('crypto_password'),$query->param('admin_password'))) { + #$pagedata->setValue('Data.Success', 'InitRunning'); + $pagedata->setValue('Data.Action', 'form_config'); + } else { + $pagedata->setValue('Data.Error', 'InitFailed'); + } + } + #################### config_ask ###################### + } elsif ($action eq 'config_ask') { + if ( ! &check_config()) { + $pagedata->setValue('Data.Warning', 'NotInitialized'); + $pagedata->setValue('Data.Action', 'form_init'); + } else { + $pagedata->setValue('Data.Action', 'form_config'); + } + #################### config_do ####################### + } elsif ($action eq 'config_do') { + my $query_language = $query->param('language'); + $query_language =~ m/^(\w+)$/; $query_language = $1; + my $query_timeout = $query->param('timeout'); + $query_timeout =~ m/^(\d+)$/; $query_timeout = $1; + if ( ! &check_config()) { + $pagedata->setValue('Data.Warning', 'NotInitialized'); + $pagedata->setValue('Data.Action', 'form_init'); + } else { + $current_admin_pw = &get_cbox_config("admin_pw"); + if ($current_admin_pw ne '' && $current_admin_pw ne $query->param('current_admin_password')) { + $pagedata->setValue('Data.Warning', 'WrongAdminPassword'); + $pagedata->setValue('Data.Action', 'form_config'); + } elsif ( ! &validate_language($query_language)) { + $pagedata->setValue('Data.Warning', 'InvalidLanguage'); + $pagedata->setValue('Data.Action', 'form_config'); + } elsif ( ! &validate_timeout($query_timeout)) { + $pagedata->setValue('Data.Warning', 'InvalidTimeOut'); + $pagedata->setValue('Data.Action', 'form_config'); + } else { + system($CB_SCRIPT, "set_config", "language", $query_language); + &load_selected_language($pagedata); + system($CB_SCRIPT, "set_config", "timeout", $query_timeout); + # check, if the ip was reconfigured + # TODO: IP stuff should be moved to the live-cd stuff + if (defined($query->param('ip')) && ($query->param('ip') ne &get_cbox_config("ip"))) { + # set the new value + system($CB_SCRIPT, "set_config", "ip", $query->param('ip')); + # redirect to the new address + $pagedata->setValue('Data.Redirect.URL', "https://" . $query->param('ip') . $ENV{'SCRIPT_NAME'}); + $pagedata->setValue('Data.Redirect.Delay', "5"); + # display a warning for the redirection + $pagedata->setValue('Data.Warning', 'IPAddressChanged'); + } + # check for success + if (defined($query->param('timeout')) + && (&get_cbox_config("timeout") ne $query->param('timeout'))) { + $pagedata->setValue('Data.Warning', 'ConfigTimeOutFailed'); + } elsif (defined($query->param('ip')) && + (&get_cbox_config("ip") ne $query->param('ip'))) { + $pagedata->setValue('Data.Warning', 'ConfigIPFailed'); + } elsif (defined($query->param('language')) + && (&get_cbox_config("language") ne $query->param('language'))) { + $pagedata->setValue('Data.Warning', 'ConfigLanguageFailed'); + } else { + #$pagedata->setValue('Data.Success', 'ConfigSaved'); + } + $pagedata->setValue('Data.Action', 'show_status'); + $pagedata->setValue('Data.Redirect.Action', 'show_status'); + $pagedata->setValue('Data.Redirect.Delay', "30"); + } + } + ############## change volume name ################### + } elsif ($action eq 'volume_name_set') { + my $volume_name = $query->param('volume_name'); + # remove all special characters which are not white-listed + $volume_name =~ s#[^\w \-_\#/\(\)\[\]]##g; + # untaint variable + $volume_name =~ m#^(.*)$#; $volume_name = $1; + if ($device eq '') { + &debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device')); + $pagedata->setValue('Data.Warning', 'InvalidDevice'); + $pagedata->setValue('Data.Action', 'show_status'); + } elsif (&check_mounted($device)) { + $pagedata->setValue('Data.Warning','VolumeMayNotBeMounted'); + $pagedata->setValue('Data.Action', 'show_volume'); + } elsif ($volume_name eq '') { + $pagedata->setValue('Data.Warning','InvalidVolumeName'); + $pagedata->setValue('Data.Action', 'show_volume'); + } else { + &exec_cb_script('set_device_name',$device,$volume_name); + my $new_volume_name = &exec_cb_script('get_device_name',$device); + $pagedata->setValue('Data.Warning','SetVolumeNameFailed') unless ($new_volume_name eq $volume_name); + $pagedata->setValue('Data.Action', 'show_volume'); + } + ############ initialize volume (form) ############### + } elsif ($action eq 'volume_init_ask') { + if ($device eq '') { + &debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device')); + $pagedata->setValue('Data.Warning', 'InvalidDevice'); + $pagedata->setValue('Data.Action', 'show_status'); + } elsif (&check_mounted($device)) { + $pagedata->setValue('Data.Warning','VolumeMayNotBeMounted'); + $pagedata->setValue('Data.Action', 'show_volume'); + } else { + $pagedata->setValue('Data.CurrentDisk.InitParams.encrypted',defined($query->param('encryption'))? 1 : 0); + $pagedata->setValue('Data.Action', 'form_init_partition'); + } + ############### initialize volume ################### + } elsif ($action eq 'volume_init_do') { + $current_admin_pw = &get_cbox_config("admin_pw"); + # remember the current "encryption" setting - just in case, we want to emit a warning and + # return to the same screen + $pagedata->setValue('Data.CurrentDisk.InitParams.encrypted',defined($query->param('encryption'))? 1 : 0); + if ($device eq '') { + &debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device')); + $pagedata->setValue('Data.Warning', 'InvalidDevice'); + $pagedata->setValue('Data.Action', 'show_status'); + } elsif (&check_mounted($device)) { + $pagedata->setValue('Data.Warning','VolumeMayNotBeMounted'); + $pagedata->setValue('Data.Action', 'show_volume'); + } elsif ($current_admin_pw ne '' + && $current_admin_pw ne $query->param('current_admin_password')) { + $pagedata->setValue('Data.Warning', 'WrongAdminPassword'); + $pagedata->setValue('Data.Action', 'form_init_partition'); + } elsif (defined($query->param('encryption')) && ($query->param('crypto_password') ne $query->param('crypto_password2'))) { + # different crypto-passwords + $pagedata->setValue('Data.Warning', 'DifferentCryptoPasswords'); + $pagedata->setValue('Data.Action', 'form_init_partition'); + } elsif (defined($query->param('encryption')) && ($query->param('crypto_password') eq '')) { + # empty password + $pagedata->setValue('Data.Warning', 'EmptyCryptoPassword'); + $pagedata->setValue('Data.Action', 'form_init_partition'); + } elsif ($query->param('confirm') ne $pagedata->getValue('Lang.Text.ConfirmInit','')) { + # wrong confirm string + $pagedata->setValue('Data.Warning', 'InitNotConfirmed'); + $pagedata->setValue('Data.Action', 'form_init_partition'); + } else { + my $init_result; + if (defined($query->param('encryption'))) { + $init_result = &volume_init($device,$query->param('crypto_password')); + } else { + $init_result = &volume_init($device); + } + if ($init_result) { + #$pagedata->setValue('Data.Success', 'InitRunning'); + $pagedata->setValue('Data.Action', 'show_volume'); + } else { + $pagedata->setValue('Data.Error', 'InitFailed'); + $pagedata->setValue('Data.Action', 'show_volume'); + } + } + ################## volume info ###################### + } elsif ($action eq 'show_volume') { + if ($device eq '') { + &debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device')); + $pagedata->setValue('Data.Warning', 'InvalidDevice'); + $pagedata->setValue('Data.Action', 'show_status'); + } else { + $pagedata->setValue('Data.Action', 'show_volume'); + } + #################### status ######################### + } elsif ($action eq 'show_status') { + if ( ! &check_config()) { + $pagedata->setValue('Data.Warning', 'NotInitialized'); + $pagedata->setValue('Data.Action', 'form_init'); + } elsif (&check_init_running()) { + $pagedata->setValue('Data.Warning', 'InitNotFinished'); + $pagedata->setValue('Data.Action', 'empty'); + $pagedata->setValue('Data.Redirect.Action', 'form_config'); + $pagedata->setValue('Data.Redirect.Delay', "30"); + } else { + $pagedata->setValue('Data.Action', 'show_status'); + $pagedata->setValue('Data.Redirect.Action', 'show_status'); + $pagedata->setValue('Data.Redirect.Delay', "60"); + } + ################### box_purge ####################### + # if we find an existing config partition, then check the adminpw + } elsif ($action eq 'do_purge') { + if ( &check_config()) { + $current_admin_pw = &get_cbox_config("admin_pw"); + if ($current_admin_pw ne '' && $current_admin_pw ne $query->param('current_admin_password')) { + $pagedata->setValue('Data.Warning', 'WrongAdminPassword'); + $pagedata->setValue('Data.Action', 'form_config'); + } else { + &box_purge; + $pagedata->setValue('Data.Action', 'form_init'); + } + } + ################### unknown ######################### + } else { + $pagedata->setValue('Data.Error', 'UnknownAction'); + } +#################### default action ########################## +# check for a harddisk again, as this check was skipped +# because there was no action defined +} elsif ( ! &is_harddisk_available()) { + $pagedata->setValue('Data.Error', 'NoHardDisk'); +} else { + if (&check_init_running()) { + $pagedata->setValue('Data.Warning', 'InitNotFinished'); + $pagedata->setValue('Data.Action', 'empty'); + $pagedata->setValue('Data.Redirect.Action', 'form_config'); + $pagedata->setValue('Data.Redirect.Delay', "60"); + } elsif (&check_config()) { + $pagedata->setValue('Data.Action', 'show_status'); + $pagedata->setValue('Data.Redirect.Action', 'show_status'); + $pagedata->setValue('Data.Redirect.Delay', "60"); + } else { + $pagedata->setValue('Data.Action', 'form_init'); + } +} + +# check state of the cryptobox +$pagedata->setValue('Data.Status.Config', &check_config() ? 1 : 0); +$pagedata->setValue('Data.Status.InitRunning', &check_init_running() ? 1 : 0); + +my $output = &get_cbox_config("admin_pw"); +$pagedata->setValue('Data.Config.AdminPasswordIsSet', 1) if ($output ne ''); + +$output = join ("
", &exec_cb_script("diskinfo")); +$pagedata->setValue('Data.PartitionInfo',"$output"); + +# preset config settings for clearsilver +$pagedata->setValue('Data.Config.IP', &get_cbox_config("ip")); +$pagedata->setValue('Data.Config.TimeOut', &get_cbox_config("timeout")); +$pagedata->setValue('Data.Config.Language', &get_cbox_config("language")); + +# read log and add html linebreaks +$output = ''; +if (-e "$LOG_FILE") { + open(LOGFILE, "< $LOG_FILE"); + while () { $output .= "$_
" } + close(LOGFILE); +} +$pagedata->setValue('Data.Log',"$output"); + +$pagedata->setValue('Data.Status.DevelopmentMode', 1) if ($IS_DEVEL); + +# save QUERY_STRING (e.g. for weblang-links) +my $querystring = $ENV{'QUERY_STRING'}; +# remove weblang setting +$querystring =~ s/weblang=\w\w&?//; +$pagedata->setValue('Data.QueryString', "$querystring") if ($querystring ne ''); + +$pagedata->setValue('Data.Version', CRYPTOBOX_VERSION); + +my ($one_disk, $one_name, $isActive, $isEncrypted, $isPlaintext); +my $avail_counter = 0; my $active_counter = 0; my $passive_counter = 0; +for $one_disk (&get_available_disks()) { + $one_name = &get_disk_name($one_disk); + $isEncrypted = &check_device_encryption($one_disk); + $isPlaintext = &check_device_plaintext($one_disk); + $pagedata->setValue("Data.Disks.available.${avail_counter}.device",$one_disk); + $pagedata->setValue("Data.Disks.available.${avail_counter}.name",$one_name); + $pagedata->setValue("Data.Disks.available.${avail_counter}.encryption", $isEncrypted? 1 : 0); + $pagedata->setValue("Data.Disks.available.${avail_counter}.plaintext", $isPlaintext? 1 : 0); + $isActive = &check_mounted($one_disk); + if ($isActive) { + $pagedata->setValue("Data.Disks.available.${avail_counter}.isActive",1); + $pagedata->setValue("Data.Disks.active.${active_counter}.device",$one_disk); + $pagedata->setValue("Data.Disks.active.${active_counter}.name",$one_name); + $pagedata->setValue("Data.Disks.active.${active_counter}.encryption", $isEncrypted? 1 : 0); + $pagedata->setValue("Data.Disks.active.${active_counter}.plaintext", $isPlaintext? 1 : 0); + $active_counter++; + } else { + $pagedata->setValue("Data.Disks.available.${avail_counter}.isActive",0); + $pagedata->setValue("Data.Disks.passive.${passive_counter}.device",$one_disk); + $pagedata->setValue("Data.Disks.passive.${passive_counter}.name",$one_name); + $pagedata->setValue("Data.Disks.passive.${passive_counter}.encryption", $isEncrypted? 1 : 0); + $pagedata->setValue("Data.Disks.passive.${passive_counter}.plaintext", $isPlaintext? 1 : 0); + $passive_counter++; + } + if ($device eq $one_disk) { + $pagedata->setValue('Data.CurrentDisk.device', $one_disk); + $pagedata->setValue('Data.CurrentDisk.name', $one_name); + $pagedata->setValue('Data.CurrentDisk.active', $isActive? 1 : 0); + $pagedata->setValue("Data.CurrentDisk.encryption", $isEncrypted? 1 : 0); + $pagedata->setValue("Data.CurrentDisk.plaintext", $isPlaintext? 1 : 0); + # retrieve capacity information if the device is mounted + if (&check_mounted($device)) { + my $cap_info = &exec_cb_script("get_capacity_info",$device); + # filter the relevant values (a simple split is not working, as the device name may + # contain spaces + $cap_info =~ m#^.*\s+([0-9\.,]+\w)\s+([0-9\.,]+\w)\s+([0-9\.,]+\w)\s+([0-9\.,]+\%)\s+#; + my ($cap_size, $cap_used, $cap_free, $cap_percent) = ($1, $2, $3, $4); + $pagedata->setValue('Data.CurrentDisk.capacity.used', $cap_used); + $pagedata->setValue('Data.CurrentDisk.capacity.free', $cap_free); + $pagedata->setValue('Data.CurrentDisk.capacity.size', $cap_size); + $pagedata->setValue('Data.CurrentDisk.capacity.percent', $cap_percent); + } + } + $avail_counter++; +} + +&render(); + +close STDOUT; + +exit 0; + diff --git a/v0.3/bin-perl-old/cryptobox_wrapper.c b/v0.3/bin-perl-old/cryptobox_wrapper.c new file mode 100644 index 0000000..b2f6e5b --- /dev/null +++ b/v0.3/bin-perl-old/cryptobox_wrapper.c @@ -0,0 +1,21 @@ +/* $Id$ */ + +// define the location of your cryptobox.pl file in this header file +#include "cryptobox_wrapper.h" + +#include +#include + +/* C wrapper to allow cryptobox to run under a different uid */ +/* Copyright (C) 02006, senselab, All Rights Reserved */ +/* See the LICENSE file in this distribution for copyright information */ + +int main(int argc, char *argv[]) { + + // necessary for mount action of the root-script + setreuid(geteuid(), -1); + + argv[0] = EXEC_PATH; + execv(EXEC_PATH, argv); + +} diff --git a/v0.3/bin-perl-old/ro-system.sh b/v0.3/bin-perl-old/ro-system.sh new file mode 100644 index 0000000..2d6e9d7 --- /dev/null +++ b/v0.3/bin-perl-old/ro-system.sh @@ -0,0 +1,191 @@ +function create_config() +# Parameter: device +{ + local device=$1 + unload_config + # create the new configuration filesystem if it is not static + if [ "$USE_SEPERATE_CONFIG_PARTITION" != "1" ] + then log_msg "Using static configuration ..." + else log_msg "Creating config filesystem ..." + "$ROOT_PERM_SCRIPT" create_config "$device" + log_msg "Mounting config partition ..." + "$ROOT_PERM_SCRIPT" mount_config "$device" + "$ROOT_PERM_SCRIPT" remount_config rw + fi + log_msg "Copying configuration defaults ..." + cp -a "$CONFIG_DEFAULTS_DIR/." "$CONFIG_DIR" + + log_msg "Copying temporary certificate file to config filesystem ..." + log_msg "Setting inital values ..." + # beware: config_set_value remounts the config partition read-only + config_set_value "ip" "$(get_current_ip)" + # create database of readable names + config_set_value "names.db" "" + # create a marker to recognize a cryptobox partition + # this should be the last step, to prevent a half-initialized state + config_set_value "$CONFIG_MARKER" "$(date -I)" +} + + +function find_harddisk() +# look for the harddisk to be partitioned +{ + local device=$(get_available_disks | head -1) + if [ -z "$device" ] ; then + log_msg "no valid harddisk for initialisation found!" + cat /proc/partitions >>"$LOG_FILE" + # do not return with an error, to avoid a failing of the script ('break on error') + # the caller of this function should handle an empty return string + fi + echo -n "$device" +} + + +function load_config() +{ + unload_config + local status=0 + # look for a configuration partition + [ "$USE_SEPERATE_CONFIG_PARTITION" = "1" ] && \ + list_partitions_of_type config | while read part && [ "$status" = 0 ] + do log_msg "configuraton found on $part" + # error check? + "$ROOT_PERM_SCRIPT" mount_config "/dev/$part" + status=1 + done + if is_config_active + then return 0 + else log_msg "failed to locate config partition" + return 1 + fi +} + + +function unload_config() +{ + is_config_active || return + # only try to unmount, if it is not static (the config of a live-cd is always dynamic) + if [ "$USE_SEPERATE_CONFIG_PARTITION" = "1" ] + then "$ROOT_PERM_SCRIPT" umount_config + else return 0 + fi +} + + +# rename to "prepare_cryptobox" +function init_cryptobox() +# this is only the first part of initialisation that takes no time - good for a smooth web interface +{ + local device=$(find_harddisk) + [ -z "$device" ] && log_msg 'No valid harddisk found!' && return 1 + turn_off_all_crypto + unload_config || true + log_msg "Partitioning the device ($device) ..." + "$ROOT_PERM_SCRIPT" partition_disk "$device" "0,1,L \n,,L\n" + log_msg "Initializing config partition on ${device}1 ..." + # TODO: this should not be hard-coded + create_config "${device}1" +} + + +case "$ACTION" of + network-up ) + if [ "$SKIP_NETWORK_CONFIG" != 1 ] + then conf_ip=$(config_get_value "ip") + log_msg "Configuring $NET_IFACE for $conf_ip ..." + echo "Configuring network interface for $NET_IFACE: $conf_ip" + "$IFCONFIG" "$NET_IFACE" "$conf_ip" + fi + if [ "$EXEC_FIREWALL_RULES" = 1 ] + then log_msg "Starting the firewall ..." + "$FIREWALL_SCRIPT" start + fi + if [ "$USE_STUNNEL" = 1 ] + then # start stunnel + if [ -f "$CERT_FILE" ] + then USE_CERT=$CERT_FILE + else USE_CERT=$CERT_TEMP + $MAKE_CERT_SCRIPT "$CERT_TEMP" >>"$LOG_FILE" 2>&1 + # TODO: this could be dangerous - right? + # this is necessary, to allow www-data to copy the certificate + chown "$WEB_USER" "$CERT_TEMP" + fi + log_msg "Starting stunnel ..." + stunnel -p "$USE_CERT" -r localhost:80 -d 443 \ + || echo "$USE_CERT not found - not starting stunnel" + fi + ;; + network-down ) + if [ "$EXEC_FIREWALL_RULES" = 1 ] + then log_msg "Stopping the firewall ..." + "$FIREWALL_SCRIPT" stop + fi + if [ "$USE_STUNNEL" = 1 ] + then log_msg "Stopping stunnel ..." + # TODO: what about a pid? + killall stunnel 2>/dev/null || true + fi + if [ "$SKIP_NETWORK_CONFIG" != 1 ] + then log_msg "Shutting the network interface down ..." + "$IFCONFIG" "$NET_IFACE" down + fi + ;; + services-up ) + # the mount point has to be writeable + # this action is called as root - so we are allowed to umount + # TODO: do this only for ro-filesystem + # TODO: this way of mounting is evil + if mountpoint -q "$MNT_PARENT" + then true + else mount -t tmpfs tmpfs "$MNT_PARENT" + fi + true + ;; + services-down ) + # this action is called as root - so we are allowed to umount + mountpoint -q "$MNT_PARENT" && umount "$MNT_PARENT" + # TODO: we should not depend on samba and thttpd + # /etc/init.d/samba stop || true + # /etc/init.d/thttpd stop || true + true + ;; + is_harddisk_available ) + [ -z "$(find_harddisk)" ] && exit 1 + exit 0 + ;; + update_ip_address ) + # reconfigure the network interface to a new IP address + # wait for 5 seconds to finish present http requests + if [ "$SKIP_NETWORK_CONFIG" != 1 ] + then echo -n "sleep 5; \"$ROOT_PERM_SCRIPT\" update_network" | at now + fi + ;; + poweroff ) + log_msg "Turning off the CryptoBox ..." + turn_off_all_crypto + echo "poweroff" | at now + ;; + reboot ) + log_msg "Rebooting the CryptoBox ..." + turn_off_all_crypto + echo "reboot" | at now + ;; + * ) + echo "Syntax: $(basename $0) ACTION" + echo " config-up - scan for configuration partition and mount it" + echo " config-down - unmount configuration partition" + echo " network-up - enable network interface" + echo " network-down - disable network interface" + echo " services-up - run some cryptobox specific daemons" + echo " services-down - stop some cryptobox specific daemons" + echo " update_ip_address - update the network interface after reconfiguration" + echo " is_config_mounted - check, if configuration partition is mounted" + echo " box-init - initialize cryptobox (ALL data is LOST)" + echo " box-init-fg - the first part of initialization" + echo " box-init-bg - the last part of initialization (background)" + echo " is_harddisk_available - check, if there is a usable harddisk" + echo " poweroff - shutdown the cryptobox" + echo " reboot - reboot the cryptobox" + echo + ;; + esac diff --git a/v0.3/bin/CryptoBoxRootActions b/v0.3/bin/CryptoBoxRootActions new file mode 100755 index 0000000..22664d3 --- /dev/null +++ b/v0.3/bin/CryptoBoxRootActions @@ -0,0 +1,448 @@ +#!/usr/bin/env python2.4 +# +# 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: + - program + - device + - [action] + - [action args] + +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", + } + + +DEV_TYPES = { "pipe":1, "char":2, "dir":4, "block":6, "file":8, "link":10, "socket":12} +EVENT_MARKER = '_event_scripts_' + + +def checkIfFileIsSafe(fname): + """check if the file and its parents are only writeable for root""" + 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 + if not checkIfFileIsSafe(plugin): + raise Exception, "the plugin (%s) is not safe - check its (and its parents') permissions" % plugin + ## 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 a directory with the marker file (%s) - this is not allowed due to abuse prevention" % (event, EVENT_MARKER) + ## 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 (and its parents') permissions" % event + args.insert(0, event) + proc = subprocess.Popen( + shell = False, + args = args) + proc.wait() + return proc.returncode == 0 + + +def isWriteable(device, force_dev_type=None): + """check if the calling user (not root!) has write access to the device/file + + the real (not the effictive) user id is used for the check + additionally the permissions of the default groups of the real uid are checked + 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(device): + return False + # check the type of the device - if necessary + if not force_dev_type is None: + dev_type = os.stat(device).st_mode % 65536 / 4096 + if dev_type != force_dev_type: return False + # retrieve the information for the real user id + (trustUserName, trustUID, groupsOfTrustUser) = getUserInfo(os.getuid()) + # set the default groups of the caller for the check (restore them later) + savedGroups = os.getgroups() + os.setgroups(groupsOfTrustUser) + # check permissions + result = os.access(device, os.W_OK) and os.access(device, 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 + if (proc.returncode == 0) and (action == "luksOpen"): + os.chown(os.path.join(os.path.sep, "dev", "mapper", destination), os.getuid(), os.getgid()) + return proc.returncode == 0 + + +def run_sfdisk(args): + """execute sfdisk for partitioning + + not implemented yet""" + 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] + # check permissions for the device + if 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] + 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] + 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) to the specified user (%d/%d): %s\n" % (destination, trustUID, groupsOfTrustUser[0], 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 getUserInfo(user): + """return information about the specified user + + @user: (uid or name) + @return: tuple of (name, uid, (groups)) + """ + if user is None: raise "KeyError", "no user supplied" + # first check, if 'user' contains an id - then check for a name + try: + userinfo = pwd.getpwuid(user) + except TypeError: + # if a KeyError is raised again, then the supplied user was invalid + 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: u_groups.append(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/bin/CryptoBoxWebserver b/v0.3/bin/CryptoBoxWebserver new file mode 100755 index 0000000..b2f9d46 --- /dev/null +++ b/v0.3/bin/CryptoBoxWebserver @@ -0,0 +1,266 @@ +#!/usr/bin/env python2.4 +# +# 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" + +import os, sys +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) + + +# TODO: change this for the release version [development|production] +SERVER_ENVIRONMENT = "production" + +class CryptoBoxWebserver: + '''this class starts the cherryp webserver and serves the single sites''' + + def __init__(self, opts): + 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) + ## initialize site class + try: + cherrypy.root = cryptobox.web.sites.WebInterfaceSites(self.conffile) + except (CBConfigError,CBEnvironmentError), errMsg: + sys.stderr.write("Error: the CryptoBox is misconfigured - please fix it!\n") + sys.stderr.write("%s\n" % str(errMsg)) + sys.exit(1) + #expose static content: + #I currently have no idea how to cleanly extract the stylesheet path from + #the config object without an extra cryptobox.core.main.CryptoBoxProps instance. + #perhaps put config handling into a separate class in CryptoBox.py? + # + # the following manual mapping is necessary, as we may not use relative + # paths in the config file + 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.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'))} + + }) + self.define_exit_handlers(cherrypy.root) + + + def define_exit_handlers(self, cbw): + import atexit + import signal + ## define exit handler for normal termination (via sys.exit) + def exit_handler(): + cbw.cleanup() + try: + os.remove(self.opts.pidfile) + except OSError: + pass + atexit.register(exit_handler) + ## catch kill signal + def kill_signal_handler(signum, frame): + cbw.cbox.log.info("Kill signal handler called: %d" % signum) + sys.exit(1) + signal.signal(signal.SIGTERM, kill_signal_handler) + + + def start(self): + cherrypy.server.start() + + + + +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, errMsg: + sys.stderr.write("Error: failed to fork cryptobox daemon process!\n") + sys.stderr.write("%s\n" % errMsg) + sys.exit(1) + if pid == 0: # the first child + os.setsid() + try: + pid = os.fork() + except OSError, errMsg: + sys.stderr.write("Error: failed to fork second cryptobox daemon process!\n") + sys.stderr.write("%s\n" % errMsg) + 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: + 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) + os.dup2(0, 2) # standard error (2) + + +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), errMsg: + sys.stderr.write( + "Warning: failed to write pid file (%s): %s\n" % (pid_file, errMsg)) + ## it is just a warning - no need to break + + +def parseOptions(): + import cryptobox + 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) + 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") + (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)) + return options + + +if __name__ == "__main__": + ## process arguments + options = parseOptions() + ## set umask to 022 (aka 755) - octal value + os.umask(022) + ## run the webserver as a daemon process + if options.background: fork_to_background() + ## write pid file + write_pid_file(options.pidfile) + ## initialize the webserver class (before forking to get some error messages) + cbw = CryptoBoxWebserver(options) + ## close open files to allow background execution + if options.background: close_open_files() + ## start the webserver + try: + cbw.start() + except CBError, errMsg: + sys.stderr.write("Failed to start the CryptoBox webserver!\n") + sys.stderr.write("%s\n" % str(errMsg)) + sys.stderr.write("Check the log file for details.\n") + sys.exit(1) + sys.exit(0) + diff --git a/v0.3/bin/coding_guidelines.txt b/v0.3/bin/coding_guidelines.txt new file mode 100644 index 0000000..a6fb47c --- /dev/null +++ b/v0.3/bin/coding_guidelines.txt @@ -0,0 +1,18 @@ +Maybe we can add some notes here to get a consistent coding experience :) + +------------------------------------------------------------------------------- + +comments: + - should be usable for pydoc + - ''' or """ at the beginning of every class/method + - ## for longterm comments, that are useful for understanding + - #blabla for codelines, that are out for experimenting and might be used later again + +error handling: + - unspecific error handling is evil (try: "grep -r except: .") + +unit testing: + - first write a unittest and then write the relating code until the unittest stops failing :) + - 'unittests.ClassName.py' should contain all tests for 'ClassName.py' + - commits with broken unit tests are evil (fix or disable the code (not the test ;) )) + diff --git a/v0.3/bin/cryptobox-unittests.conf b/v0.3/bin/cryptobox-unittests.conf new file mode 100644 index 0000000..3cf6f8a --- /dev/null +++ b/v0.3/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 = CryptoBoxRootActions + diff --git a/v0.3/bin/cryptobox.conf b/v0.3/bin/cryptobox.conf new file mode 100644 index 0000000..ea99730 --- /dev/null +++ b/v0.3/bin/cryptobox.conf @@ -0,0 +1,89 @@ +[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 + +# 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 +CryptoBoxRootActions = CryptoBoxRootActions + diff --git a/v0.3/bin/do_pylint.sh b/v0.3/bin/do_pylint.sh new file mode 100755 index 0000000..a290158 --- /dev/null +++ b/v0.3/bin/do_pylint.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# +# set some environmental variables for pylint +# + +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 "please run \"apt-get install pylint\" first" && exit 1 +pylint $ARGS + diff --git a/v0.3/bin/do_unittests.sh b/v0.3/bin/do_unittests.sh new file mode 100755 index 0000000..00e3608 --- /dev/null +++ b/v0.3/bin/do_unittests.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# +# run this script _before_ you do a commit and fix errors before uploading +# + +BASE_DIR=$(cd "$(dirname $0)/.."; pwd) + +export PYTHONPATH=$BASE_DIR/src + +# 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" + +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 + diff --git a/v0.3/bin/run_webserver.sh b/v0.3/bin/run_webserver.sh new file mode 100755 index 0000000..6e7cd83 --- /dev/null +++ b/v0.3/bin/run_webserver.sh @@ -0,0 +1,21 @@ +#!/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 +# + +BIN_DIR=$(cd "$(dirname $0)"; pwd) + +## add the local python directory to the search path +export PYTHONPATH="$BIN_DIR/../src" + +## create necessary directories +mkdir -p "$BIN_DIR/../ttt/mnt" +mkdir -p "$BIN_DIR/../ttt/settings" + +cd "$BIN_DIR" + +## run the webserver +"$BIN_DIR/CryptoBoxWebserver" --config="$BIN_DIR/cryptobox.conf" --pidfile=/tmp/cryptoboxwebserver.pid --logfile=/tmp/cryptoboxwebser.log --port=8080 --datadir="$BIN_DIR/../www-data" "$@" + diff --git a/v0.3/bin/uml-setup.sh b/v0.3/bin/uml-setup.sh new file mode 100755 index 0000000..c011d72 --- /dev/null +++ b/v0.3/bin/uml-setup.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +PROJ_DIR=$($(dirname $0)/..; 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 + +# "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/changelog b/v0.3/changelog new file mode 100644 index 0000000..f57e3f5 --- /dev/null +++ b/v0.3/changelog @@ -0,0 +1,33 @@ +Version 0.3 - 02/15/02007 + * 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/conf-examples/apache2_dav.conf b/v0.3/conf-examples/apache2_dav.conf new file mode 100644 index 0000000..e1572ef --- /dev/null +++ b/v0.3/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/conf-examples/apache_proxypass.conf b/v0.3/conf-examples/apache_proxypass.conf new file mode 100644 index 0000000..dff6d0d --- /dev/null +++ b/v0.3/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/conf-examples/cryptobox.conf b/v0.3/conf-examples/cryptobox.conf new file mode 100644 index 0000000..778773b --- /dev/null +++ b/v0.3/conf-examples/cryptobox.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 +# 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 = network, shutdown, partition + + +[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 = debug + +# 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 +# please check the current state of the translation before activating a language +# see /usr/share/locale for a list of possible language codes +# if a translated string is not available, then the english original is displayed +# available languages: cs, da, de, en, es, fi, fr, hu, it, ja, nl, pl, pt, ru, sl, sv +Languages = de, en, fr, es, sl + + +[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 + diff --git a/v0.3/conf-examples/openssl.cnf b/v0.3/conf-examples/openssl.cnf new file mode 100644 index 0000000..73905e0 --- /dev/null +++ b/v0.3/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/conf-examples/start_stunnel.sh b/v0.3/conf-examples/start_stunnel.sh new file mode 100755 index 0000000..a5cf0a5 --- /dev/null +++ b/v0.3/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/conf-examples/super.tab-example b/v0.3/conf-examples/super.tab-example new file mode 100644 index 0000000..43eae00 --- /dev/null +++ b/v0.3/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/copyright b/v0.3/copyright new file mode 100644 index 0000000..5441f59 --- /dev/null +++ b/v0.3/copyright @@ -0,0 +1,18 @@ +Copyright (c) 02005 sense.lab + +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/debian/README.Debian b/v0.3/debian/README.Debian new file mode 100644 index 0000000..93cec3d --- /dev/null +++ b/v0.3/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/debian/changelog b/v0.3/debian/changelog new file mode 100644 index 0000000..f80b8e6 --- /dev/null +++ b/v0.3/debian/changelog @@ -0,0 +1,79 @@ +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/debian/compat b/v0.3/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/v0.3/debian/compat @@ -0,0 +1 @@ +5 diff --git a/v0.3/debian/control b/v0.3/debian/control new file mode 100644 index 0000000..697a7b3 --- /dev/null +++ b/v0.3/debian/control @@ -0,0 +1,21 @@ +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 +Depends: ${python:Depends}, cryptsetup (>=20050111), e2fsprogs (>= 1.27), adduser, python (>=2.4), python-clearsilver, super, dosfstools, python-cherrypy, python-configobj +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/debian/copyright b/v0.3/debian/copyright new file mode 100644 index 0000000..0219b29 --- /dev/null +++ b/v0.3/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/debian/cryptobox-server.default b/v0.3/debian/cryptobox-server.default new file mode 100644 index 0000000..c683485 --- /dev/null +++ b/v0.3/debian/cryptobox-server.default @@ -0,0 +1,21 @@ +# 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 +# for now please use a port above 1024 +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/debian/cryptobox-server.dirs b/v0.3/debian/cryptobox-server.dirs new file mode 100644 index 0000000..b12a5dc --- /dev/null +++ b/v0.3/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/debian/cryptobox-server.docs b/v0.3/debian/cryptobox-server.docs new file mode 100644 index 0000000..3285b8a --- /dev/null +++ b/v0.3/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/debian/cryptobox-server.examples b/v0.3/debian/cryptobox-server.examples new file mode 100644 index 0000000..c50cf7e --- /dev/null +++ b/v0.3/debian/cryptobox-server.examples @@ -0,0 +1 @@ +conf-examples diff --git a/v0.3/debian/cryptobox-server.init b/v0.3/debian/cryptobox-server.init new file mode 100644 index 0000000..ddd10bf --- /dev/null +++ b/v0.3/debian/cryptobox-server.init @@ -0,0 +1,107 @@ +#!/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 + +# read the default setting file, if it exists +[ -r /etc/default/cryptobox-server ] && source /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 + +# quit if NO_START is 1 (see /etc/default/cryptobox-server) +[ "$NO_START" = "1" ] && exit 0 + +DAEMON=/usr/sbin/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 $SERVER_OPTS" + +# check if the package is installed +test -e "$DAEMON" || exit 0 + +# include some useful functions to unify our output format +. /lib/lsb/init-functions + +case "$1" in + start ) + # create the directory of the pid file if necessary + PIDDIR=$(dirname "$PIDFILE") + if [ -d "$PIDDIR" ] + then mkdir -p "$PIDDIR" + chown $RUNAS:root "$PIDDIR" + chmod 755 "$PIDDIR" + fi + log_daemon_msg "Starting $DESC" + if start-stop-daemon \ + --chuid $RUNAS: --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 cryptobox webserver" "$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 1 + "$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/debian/cryptobox-server.lintian b/v0.3/debian/cryptobox-server.lintian new file mode 100644 index 0000000..2b4a0e9 --- /dev/null +++ b/v0.3/debian/cryptobox-server.lintian @@ -0,0 +1 @@ +cryptobox-server: package-has-a-duplicate-relation diff --git a/v0.3/debian/cryptobox-server.logrotate b/v0.3/debian/cryptobox-server.logrotate new file mode 100644 index 0000000..35ae3e7 --- /dev/null +++ b/v0.3/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/debian/cryptobox-server.manpages b/v0.3/debian/cryptobox-server.manpages new file mode 100644 index 0000000..70d5772 --- /dev/null +++ b/v0.3/debian/cryptobox-server.manpages @@ -0,0 +1,2 @@ +man/CryptoBoxWebserver.8 +man/CryptoBoxRootActions.8 diff --git a/v0.3/debian/cryptobox-server.postinst b/v0.3/debian/cryptobox-server.postinst new file mode 100644 index 0000000..145f0fa --- /dev/null +++ b/v0.3/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/debian/cryptobox-server.postrm b/v0.3/debian/cryptobox-server.postrm new file mode 100644 index 0000000..b52cf3a --- /dev/null +++ b/v0.3/debian/cryptobox-server.postrm @@ -0,0 +1,64 @@ +#!/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() +{ + 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/debian/cryptobox-server.preinst b/v0.3/debian/cryptobox-server.preinst new file mode 100644 index 0000000..dadbb97 --- /dev/null +++ b/v0.3/debian/cryptobox-server.preinst @@ -0,0 +1,4 @@ +#!/bin/sh + +#DEBHELPER# + diff --git a/v0.3/debian/cryptobox-server.prerm b/v0.3/debian/cryptobox-server.prerm new file mode 100644 index 0000000..dadbb97 --- /dev/null +++ b/v0.3/debian/cryptobox-server.prerm @@ -0,0 +1,4 @@ +#!/bin/sh + +#DEBHELPER# + diff --git a/v0.3/debian/patches/00list b/v0.3/debian/patches/00list new file mode 100644 index 0000000..e69de29 diff --git a/v0.3/debian/pycompat b/v0.3/debian/pycompat new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/v0.3/debian/pycompat @@ -0,0 +1 @@ +2 diff --git a/v0.3/debian/rules b/v0.3/debian/rules new file mode 100755 index 0000000..64c1282 --- /dev/null +++ b/v0.3/debian/rules @@ -0,0 +1,99 @@ +#!/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 duplicate documentation files + rm -r $(CB_PYDIR)/doc + # move shared files + mv $(CB_PYDIR)/share/* $(DEB_BUILD_DIR)/usr/share/cryptobox-server/ + rmdir $(CB_PYDIR)/share + # 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/design/background_frame_corner.svg b/v0.3/design/background_frame_corner.svg new file mode 100644 index 0000000..5b44c25 --- /dev/null +++ b/v0.3/design/background_frame_corner.svg @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + icon_background_active60x7980x106100x132256x338 + icon_background_passive60x7980x106100x132256x338 + register_active2160x80 + register_passive2160x80 + footer_line494x3 + + volume_property_frame1800x1600 + backpane_left250x3 + + backpane_right250x3 + + + backpane_left_top90dpi + backpane_right_top90dpi + + backpane_top8x3 + + + + diff --git a/v0.3/design/icon_background_active.svg b/v0.3/design/icon_background_active.svg new file mode 100644 index 0000000..c6ee31a --- /dev/null +++ b/v0.3/design/icon_background_active.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/v0.3/design/icons/applications-system_tango.svg b/v0.3/design/icons/applications-system_tango.svg new file mode 100644 index 0000000..35e2ffa --- /dev/null +++ b/v0.3/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/design/icons/computer_tango.svg b/v0.3/design/icons/computer_tango.svg new file mode 100644 index 0000000..d6e0f6b --- /dev/null +++ b/v0.3/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/design/icons/dialog-error_tango.svg b/v0.3/design/icons/dialog-error_tango.svg new file mode 100644 index 0000000..602fa79 --- /dev/null +++ b/v0.3/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/design/icons/dialog-information_tango.svg b/v0.3/design/icons/dialog-information_tango.svg new file mode 100644 index 0000000..1e957cc --- /dev/null +++ b/v0.3/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/design/icons/dialog-warning_tango.svg b/v0.3/design/icons/dialog-warning_tango.svg new file mode 100644 index 0000000..3870db2 --- /dev/null +++ b/v0.3/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/design/icons/drive-cdrom_tango.svg b/v0.3/design/icons/drive-cdrom_tango.svg new file mode 100644 index 0000000..6588a65 --- /dev/null +++ b/v0.3/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/design/icons/drive-harddisk_tango.svg b/v0.3/design/icons/drive-harddisk_tango.svg new file mode 100644 index 0000000..406c4ac --- /dev/null +++ b/v0.3/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/design/icons/drive-removable-media_tango.svg b/v0.3/design/icons/drive-removable-media_tango.svg new file mode 100644 index 0000000..e448605 --- /dev/null +++ b/v0.3/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/design/icons/globe-lips.svg b/v0.3/design/icons/globe-lips.svg new file mode 100644 index 0000000..8b700f9 --- /dev/null +++ b/v0.3/design/icons/globe-lips.svg @@ -0,0 +1,512 @@ + + + + + + + mouth - body part + + + + bodypart + mouth + + + + + Open Clip Art Library + + + + + Nicu Buculei + + + + + Nicu Buculei + + + + image/svg+xml + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/gnome-dev-removable-usb_nuvola.svg b/v0.3/design/icons/gnome-dev-removable-usb_nuvola.svg new file mode 100644 index 0000000..a2c624a --- /dev/null +++ b/v0.3/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/design/icons/gnome-globe_nuvola.svg b/v0.3/design/icons/gnome-globe_nuvola.svg new file mode 100644 index 0000000..3a5a620 --- /dev/null +++ b/v0.3/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/design/icons/go-down_tango.svg b/v0.3/design/icons/go-down_tango.svg new file mode 100644 index 0000000..18dadc4 --- /dev/null +++ b/v0.3/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/design/icons/go-up_tango.svg b/v0.3/design/icons/go-up_tango.svg new file mode 100644 index 0000000..0e3d01d --- /dev/null +++ b/v0.3/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/design/icons/gtk-ok_nuvola.svg b/v0.3/design/icons/gtk-ok_nuvola.svg new file mode 100644 index 0000000..b0b07ea --- /dev/null +++ b/v0.3/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/design/icons/gtk-stop_nuvola.svg b/v0.3/design/icons/gtk-stop_nuvola.svg new file mode 100644 index 0000000..e7d9883 --- /dev/null +++ b/v0.3/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/design/icons/gtk-zoom-in_nuvola.svg b/v0.3/design/icons/gtk-zoom-in_nuvola.svg new file mode 100644 index 0000000..1737355 --- /dev/null +++ b/v0.3/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/design/icons/help_contents.svg b/v0.3/design/icons/help_contents.svg new file mode 100644 index 0000000..c3beee8 --- /dev/null +++ b/v0.3/design/icons/help_contents.svg @@ -0,0 +1,701 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Help Contents + + + help + index + contents + + + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/inaccessible_tango_emblem-unreadable.svg b/v0.3/design/icons/inaccessible_tango_emblem-unreadable.svg new file mode 100644 index 0000000..82a4a4f --- /dev/null +++ b/v0.3/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/design/icons/language.png b/v0.3/design/icons/language.png new file mode 100644 index 0000000..3334b5d Binary files /dev/null and b/v0.3/design/icons/language.png differ diff --git a/v0.3/design/icons/locked_tango-emblem-readonly.svg b/v0.3/design/icons/locked_tango-emblem-readonly.svg new file mode 100644 index 0000000..10cdd97 --- /dev/null +++ b/v0.3/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/design/icons/multimedia-dell-dj-pocket_tango.svg b/v0.3/design/icons/multimedia-dell-dj-pocket_tango.svg new file mode 100644 index 0000000..0e25751 --- /dev/null +++ b/v0.3/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/design/icons/multimedia-player-ipod-mini-blue_tango.svg b/v0.3/design/icons/multimedia-player-ipod-mini-blue_tango.svg new file mode 100644 index 0000000..0c35cf8 --- /dev/null +++ b/v0.3/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/design/icons/multimedia-player-motorola-rokr_tango.svg b/v0.3/design/icons/multimedia-player-motorola-rokr_tango.svg new file mode 100644 index 0000000..207e27f --- /dev/null +++ b/v0.3/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/design/icons/network-transmit-receive_design.svg b/v0.3/design/icons/network-transmit-receive_design.svg new file mode 100644 index 0000000..dd48cc4 --- /dev/null +++ b/v0.3/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/design/icons/pile_of_devices.png b/v0.3/design/icons/pile_of_devices.png new file mode 100644 index 0000000..3591de9 Binary files /dev/null and b/v0.3/design/icons/pile_of_devices.png differ diff --git a/v0.3/design/icons/pile_of_devices.svg b/v0.3/design/icons/pile_of_devices.svg new file mode 100644 index 0000000..e00ddcc --- /dev/null +++ b/v0.3/design/icons/pile_of_devices.svg @@ -0,0 +1,22002 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MENU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/preferences-desktop-locale_tango.svg b/v0.3/design/icons/preferences-desktop-locale_tango.svg new file mode 100644 index 0000000..e5e87cd --- /dev/null +++ b/v0.3/design/icons/preferences-desktop-locale_tango.svg @@ -0,0 +1,828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Locale Preferences + + + locale preferences + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/preferences-system_tango.svg b/v0.3/design/icons/preferences-system_tango.svg new file mode 100644 index 0000000..a6183e8 --- /dev/null +++ b/v0.3/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/design/icons/redhat-config-users_wasp.svg b/v0.3/design/icons/redhat-config-users_wasp.svg new file mode 100644 index 0000000..4668db8 --- /dev/null +++ b/v0.3/design/icons/redhat-config-users_wasp.svg @@ -0,0 +1,1904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/seahorse-preferences_gnome.svg b/v0.3/design/icons/seahorse-preferences_gnome.svg new file mode 100644 index 0000000..583aa18 --- /dev/null +++ b/v0.3/design/icons/seahorse-preferences_gnome.svg @@ -0,0 +1,1250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/spherecrystal_help.svg b/v0.3/design/icons/spherecrystal_help.svg new file mode 100644 index 0000000..dfa203c --- /dev/null +++ b/v0.3/design/icons/spherecrystal_help.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/system-log-out_tango.svg b/v0.3/design/icons/system-log-out_tango.svg new file mode 100644 index 0000000..c04625a --- /dev/null +++ b/v0.3/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/design/icons/unlocked_clavdia.svg b/v0.3/design/icons/unlocked_clavdia.svg new file mode 100644 index 0000000..ce5175e --- /dev/null +++ b/v0.3/design/icons/unlocked_clavdia.svg @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Read Only Emblem + + + emblem + read-only + nowrite + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/icons/unlocked_lars.svg b/v0.3/design/icons/unlocked_lars.svg new file mode 100644 index 0000000..963467d --- /dev/null +++ b/v0.3/design/icons/unlocked_lars.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/design/logo/ameisenkopp.svg b/v0.3/design/logo/ameisenkopp.svg new file mode 100644 index 0000000..d018f39 --- /dev/null +++ b/v0.3/design/logo/ameisenkopp.svg @@ -0,0 +1,3242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/logo/antlogo100px.png b/v0.3/design/logo/antlogo100px.png new file mode 100644 index 0000000..454709d Binary files /dev/null and b/v0.3/design/logo/antlogo100px.png differ diff --git a/v0.3/design/logo/antlogo100px_green.png b/v0.3/design/logo/antlogo100px_green.png new file mode 100644 index 0000000..fd1d2d9 Binary files /dev/null and b/v0.3/design/logo/antlogo100px_green.png differ diff --git a/v0.3/design/logo/antlogo100px_red.png b/v0.3/design/logo/antlogo100px_red.png new file mode 100644 index 0000000..18e33d4 Binary files /dev/null and b/v0.3/design/logo/antlogo100px_red.png differ diff --git a/v0.3/design/logo/antlogo100px_transp_red.png b/v0.3/design/logo/antlogo100px_transp_red.png new file mode 100644 index 0000000..77a52b0 Binary files /dev/null and b/v0.3/design/logo/antlogo100px_transp_red.png differ diff --git a/v0.3/design/logo/boesetest.svg b/v0.3/design/logo/boesetest.svg new file mode 100644 index 0000000..f987d53 --- /dev/null +++ b/v0.3/design/logo/boesetest.svg @@ -0,0 +1,392 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/logo/bubblebutton.svg b/v0.3/design/logo/bubblebutton.svg new file mode 100644 index 0000000..92cfc73 --- /dev/null +++ b/v0.3/design/logo/bubblebutton.svg @@ -0,0 +1,774 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3/design/logo/cbx-text-logo1.png b/v0.3/design/logo/cbx-text-logo1.png new file mode 100644 index 0000000..84214ec Binary files /dev/null and b/v0.3/design/logo/cbx-text-logo1.png differ diff --git a/v0.3/design/logo/cbx-text-logo2.png b/v0.3/design/logo/cbx-text-logo2.png new file mode 100644 index 0000000..1d1b9dc Binary files /dev/null and b/v0.3/design/logo/cbx-text-logo2.png differ diff --git a/v0.3/design/logo/cryptoboxlogogebastel.svg b/v0.3/design/logo/cryptoboxlogogebastel.svg new file mode 100644 index 0000000..43acad5 --- /dev/null +++ b/v0.3/design/logo/cryptoboxlogogebastel.svg @@ -0,0 +1,113 @@ + + + + + + + + + image/svg+xml + + + + + + Crypto + Box + + Crypto + Box + + + + diff --git a/v0.3/design/logo/cryptoboxlogogebastelhintergrundbild.svg b/v0.3/design/logo/cryptoboxlogogebastelhintergrundbild.svg new file mode 100644 index 0000000..d058e56 --- /dev/null +++ b/v0.3/design/logo/cryptoboxlogogebastelhintergrundbild.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + Crypto + Box + + Privacy for the rest of us. + Privacy for the rest of us. + + diff --git a/v0.3/design/logo/entwurf.svg b/v0.3/design/logo/entwurf.svg new file mode 100644 index 0000000..456a84a --- /dev/null +++ b/v0.3/design/logo/entwurf.svg @@ -0,0 +1,945 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + 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/design/logo/evil_stick.png b/v0.3/design/logo/evil_stick.png new file mode 100644 index 0000000..0f711c6 Binary files /dev/null and b/v0.3/design/logo/evil_stick.png differ diff --git a/v0.3/design/logo/evil_stick.svg b/v0.3/design/logo/evil_stick.svg new file mode 100644 index 0000000..adb361e --- /dev/null +++ b/v0.3/design/logo/evil_stick.svg @@ -0,0 +1,811 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + 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/design/logo/evil_stick2.png b/v0.3/design/logo/evil_stick2.png new file mode 100644 index 0000000..a7a48a9 Binary files /dev/null and b/v0.3/design/logo/evil_stick2.png differ diff --git a/v0.3/design/logo/evil_stick2.svg b/v0.3/design/logo/evil_stick2.svg new file mode 100644 index 0000000..4153b9b --- /dev/null +++ b/v0.3/design/logo/evil_stick2.svg @@ -0,0 +1,820 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 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/design/logo/evil_stick3.png b/v0.3/design/logo/evil_stick3.png new file mode 100644 index 0000000..efc372c Binary files /dev/null and b/v0.3/design/logo/evil_stick3.png differ diff --git a/v0.3/design/logo/evil_stick3.svg b/v0.3/design/logo/evil_stick3.svg new file mode 100644 index 0000000..1d59177 --- /dev/null +++ b/v0.3/design/logo/evil_stick3.svg @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 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/design/logo/vault_pingu_gross.png b/v0.3/design/logo/vault_pingu_gross.png new file mode 100644 index 0000000..51c320a Binary files /dev/null and b/v0.3/design/logo/vault_pingu_gross.png differ diff --git a/v0.3/design/logo/vault_pingu_uncut.png b/v0.3/design/logo/vault_pingu_uncut.png new file mode 100644 index 0000000..c367dd4 Binary files /dev/null and b/v0.3/design/logo/vault_pingu_uncut.png differ diff --git a/v0.3/doc/html/de/CryptoBox.html b/v0.3/doc/html/de/CryptoBox.html new file mode 100644 index 0000000..fe28780 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDev.html b/v0.3/doc/html/de/CryptoBoxDev.html new file mode 100644 index 0000000..98072d8 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDevBackground.html b/v0.3/doc/html/de/CryptoBoxDevBackground.html new file mode 100644 index 0000000..2c1ae1b --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDevCustomBuild.html b/v0.3/doc/html/de/CryptoBoxDevCustomBuild.html new file mode 100644 index 0000000..1abfd92 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDevCustomConfigure.html b/v0.3/doc/html/de/CryptoBoxDevCustomConfigure.html new file mode 100644 index 0000000..67d3fb1 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDevKnownProblems.html b/v0.3/doc/html/de/CryptoBoxDevKnownProblems.html new file mode 100644 index 0000000..861b783 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDevPreparation.html b/v0.3/doc/html/de/CryptoBoxDevPreparation.html new file mode 100644 index 0000000..849b714 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDevValidation.html b/v0.3/doc/html/de/CryptoBoxDevValidation.html new file mode 100644 index 0000000..df9c2e2 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxDevWorkFlow.html b/v0.3/doc/html/de/CryptoBoxDevWorkFlow.html new file mode 100644 index 0000000..015bf8c --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxUser.html b/v0.3/doc/html/de/CryptoBoxUser.html new file mode 100644 index 0000000..4687081 --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxUserConfiguration.html b/v0.3/doc/html/de/CryptoBoxUserConfiguration.html new file mode 100644 index 0000000..5ee43de --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxUserDailyUse.html b/v0.3/doc/html/de/CryptoBoxUserDailyUse.html new file mode 100644 index 0000000..8f214ac --- /dev/null +++ b/v0.3/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/doc/html/de/CryptoBoxUserGettingStarted.html b/v0.3/doc/html/de/CryptoBoxUserGettingStarted.html new file mode 100644 index 0000000..04ffe7a --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBox.html b/v0.3/doc/html/en/CryptoBox.html new file mode 100644 index 0000000..9c514e5 --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDev.html b/v0.3/doc/html/en/CryptoBoxDev.html new file mode 100644 index 0000000..4690ee3 --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDevBackground.html b/v0.3/doc/html/en/CryptoBoxDevBackground.html new file mode 100644 index 0000000..9caa67c --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDevCustomBuild.html b/v0.3/doc/html/en/CryptoBoxDevCustomBuild.html new file mode 100644 index 0000000..f364dbe --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDevCustomConfigure.html b/v0.3/doc/html/en/CryptoBoxDevCustomConfigure.html new file mode 100644 index 0000000..536ae8a --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDevKnownProblems.html b/v0.3/doc/html/en/CryptoBoxDevKnownProblems.html new file mode 100644 index 0000000..3dcc08e --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDevPreparation.html b/v0.3/doc/html/en/CryptoBoxDevPreparation.html new file mode 100644 index 0000000..a5e9ba8 --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDevValidation.html b/v0.3/doc/html/en/CryptoBoxDevValidation.html new file mode 100644 index 0000000..2f62d45 --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxDevWorkFlow.html b/v0.3/doc/html/en/CryptoBoxDevWorkFlow.html new file mode 100644 index 0000000..f70a97e --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxUser.html b/v0.3/doc/html/en/CryptoBoxUser.html new file mode 100644 index 0000000..4f8ccbc --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxUserConfiguration.html b/v0.3/doc/html/en/CryptoBoxUserConfiguration.html new file mode 100644 index 0000000..7664310 --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxUserDailyUse.html b/v0.3/doc/html/en/CryptoBoxUserDailyUse.html new file mode 100644 index 0000000..8d0a00d --- /dev/null +++ b/v0.3/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/doc/html/en/CryptoBoxUserGettingStarted.html b/v0.3/doc/html/en/CryptoBoxUserGettingStarted.html new file mode 100644 index 0000000..3a37b84 --- /dev/null +++ b/v0.3/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/event-scripts/README b/v0.3/event-scripts/README new file mode 100644 index 0000000..c6f82ba --- /dev/null +++ b/v0.3/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/event-scripts/_event_scripts_ b/v0.3/event-scripts/_event_scripts_ new file mode 100644 index 0000000..28ad2c4 --- /dev/null +++ b/v0.3/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/event-scripts/apache2_dav b/v0.3/event-scripts/apache2_dav new file mode 100755 index 0000000..2e8dd19 --- /dev/null +++ b/v0.3/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/event-scripts/samba b/v0.3/event-scripts/samba new file mode 100755 index 0000000..a096625 --- /dev/null +++ b/v0.3/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/intl/cryptobox-server.pot b/v0.3/intl/cryptobox-server.pot new file mode 100644 index 0000000..bf92c49 --- /dev/null +++ b/v0.3/intl/cryptobox-server.pot @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/cs/cryptobox-server.po b/v0.3/intl/cs/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/cs/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/da/cryptobox-server.po b/v0.3/intl/da/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/da/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/de/cryptobox-server.po b/v0.3/intl/de/cryptobox-server.po new file mode 100644 index 0000000..9207ccb --- /dev/null +++ b/v0.3/intl/de/cryptobox-server.po @@ -0,0 +1,223 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: 2006-11-29 19:31+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: Translate Toolkit 0.10.1\n" + +#: Name +msgid "English" +msgstr "Deutsch" + +#: 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 "Container's name" +msgstr "Name des Datenträgers" + +#: Button.HelpForForm +msgid "Get help" +msgstr "Hilfe" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "Ungültige Zugangsdaten" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +msgstr "Sorry - du darfst dies nicht tun!" + +#: 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 container is mounted" +msgstr "Der Datenträger ist geöffnet." + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off 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 "Deactivate volume" +msgstr "Schließe den 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!" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "Es ist derzeit nicht möglich, die Konfiguration zu speichern. Vielleicht solltest du eine Konfigurations-Partition anlegen." + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "Jetzt partitionieren" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "Unverschlüsselte Netzwerk-Verbindung - Passworte können derzeit leicht ausgespäht werden." + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "Verschlüsselte Verbindung" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +#, fuzzy +msgid "The CryptoBox is a project by" +msgstr "Die CryptoBox ist ein Projekt von" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +#, fuzzy +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 "" + +#~ msgid "volume_mount" +#~ msgstr "volume_mount" + +#~ msgid "logs" +#~ msgstr "logs" + +#~ msgid "partition" +#~ msgstr "partition" + +#~ msgid "https" +#~ msgstr "https" diff --git a/v0.3/intl/en/cryptobox-server.po b/v0.3/intl/en/cryptobox-server.po new file mode 100644 index 0000000..fd005ba --- /dev/null +++ b/v0.3/intl/en/cryptobox-server.po @@ -0,0 +1,262 @@ +msgid "" +msgstr "" + +#: Name +msgid "English" +msgstr "English" + +#: 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 "Container's name" +msgstr "Container's name" + +#: Button.HelpForForm +msgid "Get help" +msgstr "Get help" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "Invalid access credentials" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +msgstr "Sorry - you are not allowed to do this!" + +#: 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 container is mounted" +msgstr "The container is mounted" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "" +"This action is not available while the container is active. Please turn it " +"off first." +msgstr "" +"This action is not available while the container is active. Please turn it " +"off first." + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate volume" +msgstr "Deactivate 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!" + +#: 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.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" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "Disk is busy" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "This disk is currently busy. Please wait for a moment." + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "Show all disks" + +#: WarningMessage.AccessDenied.Text +msgid "" +"Sorry - you did not enter the right credentials! (Try user 'admin' and " +"password 'admin' and change this setting soon.)" +msgstr "" +"Sorry - you did not enter the right credentials! (Try user 'admin' and " +"password 'admin' and change this setting soon.)" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "Change password now" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "Volume's name" + +#: WarningMessage.AccessDenied.Text +msgid "" +"Sorry - you did not enter the right credentials! (Maybe try the default " +"setting: username=>'admin' / password=>'admin'.)" +msgstr "" +"Sorry - you did not enter the right credentials! (Maybe try the default " +"setting: username=>'admin' / password=>'admin'.)" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "The CryptoBox is a project by" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "Enable help" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "Disable help" + +#: 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.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" + +#~ msgid "" +#~ "This request is not defined. If you think, this is a bug, get in contact " +#~ "with us. Please read the FAQ before.Thanks for your contribution!" +#~ msgstr "" +#~ "This request is not defined. If you think, this is a bug, get in contact " +#~ "with us. Please read the FAQ before.Thanks for your contribution!" + +#~ msgid "" +#~ "This situation was unexpected. We (the developers of the CryptoBox) will " +#~ "try to fix this problem. Get in contact with us. Please read the FAQ " +#~ "before.Thanks for your contribution!" +#~ msgstr "" +#~ "This situation was unexpected. We (the developers of the CryptoBox) will " +#~ "try to fix this problem. Get in contact with us. Please read the FAQ " +#~ "before.Thanks for your contribution!" + +#~ msgid "volume_mount" +#~ msgstr "volume_mount" + +#~ msgid "logs" +#~ msgstr "logs" + +#~ msgid "partition" +#~ msgstr "partition" + +#~ msgid "https" +#~ msgstr "https" diff --git a/v0.3/intl/es/cryptobox-server.po b/v0.3/intl/es/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/es/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/fi/cryptobox-server.po b/v0.3/intl/fi/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/fi/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/fr/cryptobox-server.po b/v0.3/intl/fr/cryptobox-server.po new file mode 100644 index 0000000..5fd1e7a --- /dev/null +++ b/v0.3/intl/fr/cryptobox-server.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: 2006-11-30 08:49+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 "English" +msgstr "" + +#: Title.Top +msgid "The CryptoBox" +msgstr "La CryptoBox" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/hu/cryptobox-server.po b/v0.3/intl/hu/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/hu/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/it/cryptobox-server.po b/v0.3/intl/it/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/it/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/ja/cryptobox-server.po b/v0.3/intl/ja/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/ja/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/nl/cryptobox-server.po b/v0.3/intl/nl/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/nl/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/pl/cryptobox-server.po b/v0.3/intl/pl/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/pl/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/pt/cryptobox-server.po b/v0.3/intl/pt/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/pt/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/ru/cryptobox-server.po b/v0.3/intl/ru/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/ru/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/sl/cryptobox-server.po b/v0.3/intl/sl/cryptobox-server.po new file mode 100644 index 0000000..a1b5fec --- /dev/null +++ b/v0.3/intl/sl/cryptobox-server.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: 2006-12-11 01:40+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 "English" +msgstr "" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "Privatnost v vsako vas" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/intl/sv/cryptobox-server.po b/v0.3/intl/sv/cryptobox-server.po new file mode 100644 index 0000000..3d2dcf7 --- /dev/null +++ b/v0.3/intl/sv/cryptobox-server.po @@ -0,0 +1,210 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "English" +msgstr "" + +#: 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 "Container's name" +msgstr "" + +#: Button.HelpForForm +msgid "Get help" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you are not allowed to do this!" +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 container is mounted" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the container is active. Please turn it off first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Deactivate 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 "" + +#: 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.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Disk is busy" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This disk is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Try user 'admin' and password 'admin' and change this setting soon.)" +msgstr "" + +#: WarningMessage.AccessDenied.Link.Text +msgid "Change password now" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! (Maybe try the default setting: username=>'admin' / password=>'admin'.)" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project by" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +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.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 "" diff --git a/v0.3/lang/README b/v0.3/lang/README new file mode 100644 index 0000000..2e7c6a8 --- /dev/null +++ b/v0.3/lang/README @@ -0,0 +1,7 @@ +$Id$ + +You may want to translate the CryptoBox into another language? +Most welcome! + +Take a look at our pootle translation center. You can reach it from +http://cryptobox.org diff --git a/v0.3/lang/de.hdf b/v0.3/lang/de.hdf new file mode 100644 index 0000000..c49965f --- /dev/null +++ b/v0.3/lang/de.hdf @@ -0,0 +1,35 @@ +Name = Deutsch + +Status = $Id$ + +Title { + Top = Die CryptoBox + Slogan = ... und 1984 war gestern! + Volume = Eigenschaften von +} + + +Text { + RedirectNote = Klicke hier, falls dein Browser die automatische Weiterleitung nicht unterstützt. + ProjectHomePage = Projekt-Seite + ProjectNote = Die CryptoBox ist ein Projekt von + ContainerName = Der Name des Daten-Containers +} + + +Button { +} + + +WarningMessage { + InvalidDevice { + Title = Ungültiger Container + Text = Der angegebene Daten-Container ist nicht zulässig. + } + + VolumeMayNotBeMounted { + Title = Der Container ist derzeit aktiv + Text = Die gewünschte Aktion kann nicht durchgeführt werden, solange der Container aktiv ist. + } +} + diff --git a/v0.3/lang/en.hdf b/v0.3/lang/en.hdf new file mode 100644 index 0000000..ac36aab --- /dev/null +++ b/v0.3/lang/en.hdf @@ -0,0 +1,94 @@ +Name = English + +Status = $Id$ + +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 = Container's name +} + + +Button { + HelpForForm = Get help +} + + +WarningMessage { + + AccessDenied { + Title = Invalid access credentials + Text = Sorry - you are not allowed to do this! + } + + 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 container is mounted + Text = This action is not available while the container is active. Please turn it off first. + Link.Text = Deactivate volume + Link.Rel = volume_mount + } + + 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 + } + + 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 + } +} + + +EnvironmentWarning { + + ReadOnlyConfig { + Text = Read-only setup detected - probably you should create a configuration partition. + Link.Text = Initialize partition + Link.Rel = partition + } + + NoSSL { + Text = The connection is not encrypted - passwords can be easily intercepted. + Link.Text = Use encrypted connection + Link.Prot = https + } + } +} + diff --git a/v0.3/lang/fr.hdf b/v0.3/lang/fr.hdf new file mode 100644 index 0000000..cf531bb --- /dev/null +++ b/v0.3/lang/fr.hdf @@ -0,0 +1,35 @@ +Name = Francais + +Status = $Id$ + +Title { + Top = La CryptoBox + Slogan = La vie privée pour nous autres. + Volume = Propriétés de +} + + +Text { + RedirectNote = Cliquez ici si votre navigateur ne supporte pas la redirection automatique. + ProjectHomePage = Site web du projet + ProjectNote = La CryptoBox est un projet de + ContainerName = Nom du conteneur : +} + + +Button { +} + + +WarningMessage { + InvalidDevice { + Title = Device invalide + Text = Le device que vous avez choisi est invalide ! + } + + VolumeMayNotBeMounted { + Title = Le conteneur est monté + Text = Cette action n'est pas disponible pendant que le conteneur est actif. Désactivez-le d'abord. + } +} + diff --git a/v0.3/lang/language_specification.txt b/v0.3/lang/language_specification.txt new file mode 100644 index 0000000..0c73efd --- /dev/null +++ b/v0.3/lang/language_specification.txt @@ -0,0 +1,32 @@ +Some important notes regarding the language files: + +1) language file informations + +The toplevel attribute "Name" is mandatory and should represent the localized name of +the language (e.g.: English, Deutsch, Francais, ...). + + +2) 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) + + Note for translators: you may just ignore all "Link" attributes except "Link.Text". + All other attributes are taken from the original (english) language file. + diff --git a/v0.3/lang/si.hdf b/v0.3/lang/si.hdf new file mode 100644 index 0000000..9f43f56 --- /dev/null +++ b/v0.3/lang/si.hdf @@ -0,0 +1,28 @@ +Name = Slovenščina + +Status = $Id$ + +Title { + Top = The CryptoBox + Slogan = Privatnost v vsako vas! +} + + +Text { + RedirectNote = Kliknite če vaš iskalnik ne podpira avtomatične preusmeritve. + ProjectHomePage = Spletna stran projekta + ProjectNote = CryptoBox je projekt +} + + +Button { +} + + +WarningMessage { +} + + +SuccessMessage { +} + diff --git a/v0.3/man/CryptoBoxRootActions.8 b/v0.3/man/CryptoBoxRootActions.8 new file mode 100644 index 0000000..856db91 --- /dev/null +++ b/v0.3/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/man/CryptoBoxWebserver.8 b/v0.3/man/CryptoBoxWebserver.8 new file mode 100644 index 0000000..494ca3c --- /dev/null +++ b/v0.3/man/CryptoBoxWebserver.8 @@ -0,0 +1,55 @@ +.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 +Uses the named configuration file. +.TP +\fB\-p\fR, \fB\-\-port\fR=\fBPORT\fR +Specifiy a port to listen to. +.TP +\fB\-\-host\fR=\fBHOST\fR +Specifiy 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. Otherwise the terminal will stay attached to the +process. +.TP +\fB\-q\fR +Quiet output - only errors will get reported. +.TP +\fB\-\-pidfile\fR=\fFILE\fR +Specify a pid file for the webserver. +.TP +\fB\-\-datadir\fR=\fDIRECTORY\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/package.exclude b/v0.3/package.exclude new file mode 100644 index 0000000..d7942cc --- /dev/null +++ b/v0.3/package.exclude @@ -0,0 +1,5 @@ +debian +design +stuff +bin-perl-old +package.exclude diff --git a/v0.3/plugins/date/date.py b/v0.3/plugins/date/date.py new file mode 100644 index 0000000..58eee83 --- /dev/null +++ b/v0.3/plugins/date/date.py @@ -0,0 +1,104 @@ +# +# 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. +""" + +__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: + date = "%02d%02d%02d%02d%d" % (month, day, hour, minute, year) + if self.__set_date(date): + self.cbox.log.info("changed date to: %s" % 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" % 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 __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, 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"), + date]) + proc.wait() + return proc.returncode == 0 + diff --git a/v0.3/plugins/date/form_date.cs b/v0.3/plugins/date/form_date.cs new file mode 100644 index 0000000..383a6a5 --- /dev/null +++ b/v0.3/plugins/date/form_date.cs @@ -0,0 +1,46 @@ + + +

+ + + + + + + +


+ + +

+ +


+  :  +

+ +

+ +

+ + + diff --git a/v0.3/plugins/date/intl/cryptobox-server-feature-date.pot b/v0.3/plugins/date/intl/cryptobox-server-feature-date.pot new file mode 100644 index 0000000..eab13c1 --- /dev/null +++ b/v0.3/plugins/date/intl/cryptobox-server-feature-date.pot @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/cs/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/cs/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/cs/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/da/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/da/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/da/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/de/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/de/cryptobox-server-feature-date.po new file mode 100644 index 0000000..e549da0 --- /dev/null +++ b/v0.3/plugins/date/intl/de/cryptobox-server-feature-date.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: 2006-12-14 03:43+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 "Change date and time" +msgstr "Datum und Uhrzeit ändern" + +#: Link +msgid "Set date/time" +msgstr "Datum / Uhrzeit" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "Datum und Uhrzeit einstellen" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Uhrzeit und Datum ändern" + +#: Text.Date +msgid "Date" +msgstr "Datum" + +#: 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" + +#: 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." + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "Einstellen der Uhrzeit und des Datums des CryptoBox-Servers." diff --git a/v0.3/plugins/date/intl/en/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/en/cryptobox-server-feature-date.po new file mode 100644 index 0000000..a1c8892 --- /dev/null +++ b/v0.3/plugins/date/intl/en/cryptobox-server-feature-date.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" + +#: Name +msgid "Change date and time" +msgstr "Change date and time" + +#: Link +msgid "Set date/time" +msgstr "Set date/time" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "Date and time setting" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Set date and time" + +#: Text.Date +msgid "Date" +msgstr "Date" + +#: 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" + +#: 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." + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "Change the time and date for the CryptoBox server." diff --git a/v0.3/plugins/date/intl/es/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/es/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/es/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/fi/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/fi/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/fi/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/fr/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/fr/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/fr/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/hu/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/hu/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/hu/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/it/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/it/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/it/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/ja/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/ja/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/ja/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/nl/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/nl/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/nl/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/pl/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/pl/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/pl/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/pt/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/pt/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/pt/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/ru/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/ru/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/ru/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/sl/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/sl/cryptobox-server-feature-date.po new file mode 100644 index 0000000..24e918f --- /dev/null +++ b/v0.3/plugins/date/intl/sl/cryptobox-server-feature-date.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: 2006-12-09 17: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=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 "Change date and time" +msgstr "Spremeni datum in čas" + +#: Link +msgid "Set date/time" +msgstr "Nastavi datum in čas" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "Nastavitve datum/čas" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Nastavi datum/čas" + +#: Text.Date +msgid "Date" +msgstr "Datum" + +#: 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" + +#: 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." + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/intl/sv/cryptobox-server-feature-date.po b/v0.3/plugins/date/intl/sv/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f46fdb6 --- /dev/null +++ b/v0.3/plugins/date/intl/sv/cryptobox-server-feature-date.po @@ -0,0 +1,106 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Set date/time" +msgstr "" + +#: Title.ConfigDate +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Date +msgid "Date" +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 "" + +#: 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 "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" diff --git a/v0.3/plugins/date/language.hdf b/v0.3/plugins/date/language.hdf new file mode 100644 index 0000000..37830d2 --- /dev/null +++ b/v0.3/plugins/date/language.hdf @@ -0,0 +1,39 @@ +Name = Change date and time +Link = Set date/time + +Title.ConfigDate = 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. + } +} diff --git a/v0.3/plugins/date/plugin_icon.gif b/v0.3/plugins/date/plugin_icon.gif new file mode 100644 index 0000000..7b660d0 Binary files /dev/null and b/v0.3/plugins/date/plugin_icon.gif differ diff --git a/v0.3/plugins/date/plugin_icon.png b/v0.3/plugins/date/plugin_icon.png new file mode 100644 index 0000000..f263906 Binary files /dev/null and b/v0.3/plugins/date/plugin_icon.png differ diff --git a/v0.3/plugins/date/root_action.py b/v0.3/plugins/date/root_action.py new file mode 100755 index 0000000..94592f9 --- /dev/null +++ b/v0.3/plugins/date/root_action.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python2.4 +# +# 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" + +DATE_BIN = "/bin/date" + +import subprocess +import re +import sys +import os + +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 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/plugins/date/unittests.py b/v0.3/plugins/date/unittests.py new file mode 100644 index 0000000..a09fa1a --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.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/plugins/disks/disks.cs b/v0.3/plugins/disks/disks.cs new file mode 100644 index 0000000..d345ac0 --- /dev/null +++ b/v0.3/plugins/disks/disks.cs @@ -0,0 +1,15 @@ + + +

+ + + + + + + + + + + + diff --git a/v0.3/plugins/disks/disks.py b/v0.3/plugins/disks/disks.py new file mode 100644 index 0000000..f7e4b06 --- /dev/null +++ b/v0.3/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/plugins/disks/intl/cryptobox-server-feature-disks.pot b/v0.3/plugins/disks/intl/cryptobox-server-feature-disks.pot new file mode 100644 index 0000000..29314ca --- /dev/null +++ b/v0.3/plugins/disks/intl/cryptobox-server-feature-disks.pot @@ -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: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/cs/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/cs/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/da/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/da/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/de/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/de/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..040cf1e --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +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/plugins/disks/intl/en/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/en/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..cdf113e --- /dev/null +++ b/v0.3/plugins/disks/intl/en/cryptobox-server-feature-disks.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" + +#: Name +msgid "Disk overview" +msgstr "Disk overview" + +#: Link +msgid "Disks" +msgstr "Disks" + +#: Title.Disks +msgid "Available disks" +msgstr "Available disks" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "No available disks were found!" + +#~ msgid "Volumes" +#~ msgstr "Volumes" + +#~ msgid "Available volumes" +#~ msgstr "Available volumes" + +#~ msgid "There is no volume available!" +#~ msgstr "There is no volume available!" diff --git a/v0.3/plugins/disks/intl/es/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/es/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/fi/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/fi/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/fr/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/fr/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/hu/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/hu/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/it/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/it/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/plugins/disks/intl/it/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/ja/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/ja/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/plugins/disks/intl/ja/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/nl/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/nl/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/pl/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/pl/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/plugins/disks/intl/pl/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/pt/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/pt/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/ru/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/ru/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/sl/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/sl/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/plugins/disks/intl/sl/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/intl/sv/cryptobox-server-feature-disks.po b/v0.3/plugins/disks/intl/sv/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..f3f5e67 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Disks +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3/plugins/disks/language.hdf b/v0.3/plugins/disks/language.hdf new file mode 100644 index 0000000..1705bce --- /dev/null +++ b/v0.3/plugins/disks/language.hdf @@ -0,0 +1,10 @@ +Name = Disk overview +Link = Disks + +Title.Disks = Available disks + +AdviceMessage { + NoDisksAvailable { + Text = No available disks were found! + } +} diff --git a/v0.3/plugins/disks/plugin_icon.gif b/v0.3/plugins/disks/plugin_icon.gif new file mode 100644 index 0000000..88fd171 Binary files /dev/null and b/v0.3/plugins/disks/plugin_icon.gif differ diff --git a/v0.3/plugins/disks/plugin_icon.png b/v0.3/plugins/disks/plugin_icon.png new file mode 100644 index 0000000..ae6bd74 Binary files /dev/null and b/v0.3/plugins/disks/plugin_icon.png differ diff --git a/v0.3/plugins/disks/unittests.py b/v0.3/plugins/disks/unittests.py new file mode 100644 index 0000000..15149aa --- /dev/null +++ b/v0.3/plugins/disks/unittests.py @@ -0,0 +1,43 @@ +# +# 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.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_read_form(self): + '''display all devices''' + self.register_auth(self.url) + self.cmd.go(self.url + "disks?weblang=en") + self.cmd.find("Available disks") + + + def test_is_device_in_list(self): + """check if the device-under-test is in the device list""" + self.register_auth(self.url) + self.cmd.go(self.url + "disks?weblang=en") + self.cmd.find("Available disks") + self.cmd.find(r'Data.Status.Plugins.disks=(.*)$', "m") + devices = self.locals["__match__"].split(":") + self.assertTrue(len(devices)>0) + self.assertTrue("/dev/%s" % self.device in devices) + diff --git a/v0.3/plugins/help/doc.cs b/v0.3/plugins/help/doc.cs new file mode 100644 index 0000000..2d539e2 --- /dev/null +++ b/v0.3/plugins/help/doc.cs @@ -0,0 +1,9 @@ + + + + +
+ + + +
diff --git a/v0.3/plugins/help/help.py b/v0.3/plugins/help/help.py new file mode 100644 index 0000000..dd6800e --- /dev/null +++ b/v0.3/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/plugins/help/intl/cryptobox-server-feature-help.pot b/v0.3/plugins/help/intl/cryptobox-server-feature-help.pot new file mode 100644 index 0000000..4414223 --- /dev/null +++ b/v0.3/plugins/help/intl/cryptobox-server-feature-help.pot @@ -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-11-28 05:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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/plugins/help/intl/cs/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/cs/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/da/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/da/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/de/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/de/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ba944d4 --- /dev/null +++ b/v0.3/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-11-28 05:03+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/plugins/help/intl/en/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/en/cryptobox-server-feature-help.po new file mode 100644 index 0000000..e7e7e8e --- /dev/null +++ b/v0.3/plugins/help/intl/en/cryptobox-server-feature-help.po @@ -0,0 +1,10 @@ +msgid "" +msgstr "" + +#: Name +msgid "User manual" +msgstr "User manual" + +#: Link +msgid "Help" +msgstr "Help" diff --git a/v0.3/plugins/help/intl/es/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/es/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/fi/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/fi/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/fr/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/fr/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/hu/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/hu/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/it/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/it/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/plugins/help/intl/it/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/ja/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/ja/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/plugins/help/intl/ja/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/nl/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/nl/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/pl/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/pl/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/plugins/help/intl/pl/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/pt/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/pt/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/ru/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/ru/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/intl/sl/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/sl/cryptobox-server-feature-help.po new file mode 100644 index 0000000..80f6b31 --- /dev/null +++ b/v0.3/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-11-28 05:03+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/plugins/help/intl/sv/cryptobox-server-feature-help.po b/v0.3/plugins/help/intl/sv/cryptobox-server-feature-help.po new file mode 100644 index 0000000..591e6ea --- /dev/null +++ b/v0.3/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-11-28 05: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 "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3/plugins/help/language.hdf b/v0.3/plugins/help/language.hdf new file mode 100644 index 0000000..f2eb3fc --- /dev/null +++ b/v0.3/plugins/help/language.hdf @@ -0,0 +1,5 @@ +Name = User manual +Link = Help + +Title.Help = User manual + diff --git a/v0.3/plugins/help/plugin_icon.gif b/v0.3/plugins/help/plugin_icon.gif new file mode 100644 index 0000000..32595ee Binary files /dev/null and b/v0.3/plugins/help/plugin_icon.gif differ diff --git a/v0.3/plugins/help/plugin_icon.png b/v0.3/plugins/help/plugin_icon.png new file mode 100644 index 0000000..c379200 Binary files /dev/null and b/v0.3/plugins/help/plugin_icon.png differ diff --git a/v0.3/plugins/help/unittests.py b/v0.3/plugins/help/unittests.py new file mode 100644 index 0000000..b876deb --- /dev/null +++ b/v0.3/plugins/help/unittests.py @@ -0,0 +1,94 @@ +# +# 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.web.testclass +from twill.errors import * + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_help_language_texts(self): + '''help pages should be available in different languages''' + + ## check english help pages + self.cmd.go(self.url + "help?weblang=en") + self.cmd.find("Table of Contents") + self.cmd.find("Getting started") + (lang,page) = self._getHelpStatus() + self.assertTrue(lang == "en") + self.assertTrue(page == "CryptoBoxUser") + + ## check german help pages + self.cmd.go(self.url + "help?weblang=de") + self.cmd.find("Table of Contents") + self.cmd.find("Wie geht es los") + (lang,page) = self._getHelpStatus() + self.assertTrue(lang == "de") + self.assertTrue(page == "CryptoBoxUser") + + ## check slovene help pages + self.cmd.go(self.url + "help?weblang=sl") + self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents") + ## add a slovene text here, as soon as the help is translated + (lang,page) = self._getHelpStatus() + ## change this to "sl" as soon as the help is translated + self.assertTrue(lang == "en") + self.assertTrue(page == "CryptoBoxUser") + + ## check french help pages + self.cmd.go(self.url + "help?weblang=fr") + self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents") + ## add a french text here, as soon as the help is translated + (lang,page) = self._getHelpStatus() + ## change this to "fr" as soon as the help is translated + self.assertTrue(lang == "en") + self.assertTrue(page == "CryptoBoxUser") + + ## test a random language - it should fall back to english + self.cmd.go(self.url + "help?weblang=foobar") + self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents") + (lang,page) = self._getHelpStatus() + self.assertTrue(lang == "en") + self.assertTrue(page == "CryptoBoxUser") + + + def test_help_pages(self): + """check invalid page requests""" + self.cmd.go(self.url + "help?page=foobar") + (lang,page) = self._getHelpStatus() + self.assertTrue(page == "CryptoBoxUser") + + self.cmd.go(self.url + "help?page=CryptoBoxUser") + (lang,page) = self._getHelpStatus() + self.assertTrue(page == "CryptoBoxUser") + + + def test_help_default_languages(self): + """check invalid page requests""" + self.cmd.go(self.url + "help?weblang=foobar") + (lang,page) = self._getHelpStatus() + self.assertTrue(lang == "en") + + + def _getHelpStatus(self): + self.cmd.find(r'Data.Status.Plugins.help=(.*)$', "m") + return tuple(self.locals["__match__"].split(":")) + diff --git a/v0.3/plugins/language_selection/intl/cryptobox-server-feature-language_selection.pot b/v0.3/plugins/language_selection/intl/cryptobox-server-feature-language_selection.pot new file mode 100644 index 0000000..a510c28 --- /dev/null +++ b/v0.3/plugins/language_selection/intl/cryptobox-server-feature-language_selection.pot @@ -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: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/cs/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/cs/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/plugins/language_selection/intl/cs/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/da/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/da/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/plugins/language_selection/intl/da/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/de/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/de/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..044e5ec --- /dev/null +++ b/v0.3/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: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: 2006-12-14 03:53+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 "Choose interface language" +msgstr "Wähle eine Nutzersprache" + +#: Link +msgid "Languages" +msgstr "Sprachen" + +#: Title.Language +msgid "Choose an interface language" +msgstr "Wähle eine Nutzersprache" + +#: 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/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..e168a55 --- /dev/null +++ b/v0.3/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" + +#: Name +msgid "Choose interface language" +msgstr "Choose interface language" + +#: Link +msgid "Languages" +msgstr "Languages" + +#: Title.Language +msgid "Choose an interface language" +msgstr "Choose an interface language" + +#: 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." + +#~ msgid "Choose your interface language" +#~ msgstr "Choose youur interface language" diff --git a/v0.3/plugins/language_selection/intl/es/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/es/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/fi/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/fi/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/fr/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/fr/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/hu/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/hu/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/it/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/it/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/plugins/language_selection/intl/it/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/ja/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/ja/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/plugins/language_selection/intl/ja/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/nl/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/nl/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/pl/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/pl/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/plugins/language_selection/intl/pl/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/pt/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/pt/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/ru/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/ru/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/sl/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/sl/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..c2adc62 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: 2006-12-09 16:33+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 "Choose interface language" +msgstr "Izberite jezik" + +#: Link +msgid "Languages" +msgstr "Jezik" + +#: Title.Language +msgid "Choose an interface language" +msgstr "Izberite Jezik" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/intl/sv/cryptobox-server-feature-language_selection.po b/v0.3/plugins/language_selection/intl/sv/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..21fcb7f --- /dev/null +++ b/v0.3/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: 2006-11-28 05: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 "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Language +msgid "Choose an interface language" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3/plugins/language_selection/language.hdf b/v0.3/plugins/language_selection/language.hdf new file mode 100644 index 0000000..6df1fec --- /dev/null +++ b/v0.3/plugins/language_selection/language.hdf @@ -0,0 +1,7 @@ +Name = Choose interface language +Link = Languages + +Title.Language = Choose an interface language + +Help.Select = Choose your preferred interface language. This setting will be kept for your browsing session. + diff --git a/v0.3/plugins/language_selection/language_selection.cs b/v0.3/plugins/language_selection/language_selection.cs new file mode 100644 index 0000000..30449e5 --- /dev/null +++ b/v0.3/plugins/language_selection/language_selection.cs @@ -0,0 +1,22 @@ + + +

+ + + + + +
+ +
diff --git a/v0.3/plugins/language_selection/language_selection.py b/v0.3/plugins/language_selection/language_selection.py new file mode 100644 index 0000000..6436bba --- /dev/null +++ b/v0.3/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/plugins/language_selection/list_marker_tango.gif b/v0.3/plugins/language_selection/list_marker_tango.gif new file mode 100644 index 0000000..33d079d Binary files /dev/null and b/v0.3/plugins/language_selection/list_marker_tango.gif differ diff --git a/v0.3/plugins/language_selection/plugin_icon.gif b/v0.3/plugins/language_selection/plugin_icon.gif new file mode 100644 index 0000000..7059295 Binary files /dev/null and b/v0.3/plugins/language_selection/plugin_icon.gif differ diff --git a/v0.3/plugins/language_selection/plugin_icon.png b/v0.3/plugins/language_selection/plugin_icon.png new file mode 100644 index 0000000..fdaa852 Binary files /dev/null and b/v0.3/plugins/language_selection/plugin_icon.png differ diff --git a/v0.3/plugins/language_selection/unittests.py b/v0.3/plugins/language_selection/unittests.py new file mode 100644 index 0000000..7184664 --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.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 an interface language') + + + 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/plugins/logs/intl/cryptobox-server-feature-logs.pot b/v0.3/plugins/logs/intl/cryptobox-server-feature-logs.pot new file mode 100644 index 0000000..8c088f5 --- /dev/null +++ b/v0.3/plugins/logs/intl/cryptobox-server-feature-logs.pot @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/cs/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/cs/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/cs/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/da/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/da/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/da/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/de/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/de/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/de/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/en/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/en/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..4fb5ccb --- /dev/null +++ b/v0.3/plugins/logs/intl/en/cryptobox-server-feature-logs.po @@ -0,0 +1,102 @@ +msgid "" +msgstr "" + +#: Name +msgid "Show the content of the log file" +msgstr "Show the content of the log file" + +#: Link +msgid "Show log file" +msgstr "Show log file" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "CryptoBox logfiles" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "The logfile of the CryptoBox is empty." + +#: Text.Refresh +msgid "Refresh" +msgstr "Refresh" + +#: Name +msgid "Show event log" +msgstr "Show event log" + +#: Link +msgid "Event log" +msgstr "Event log" + +#: Title.Log +msgid "CryptoBox event log" +msgstr "CryptoBox 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.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" + +#: 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." + +#: 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 messages 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 messages besides a detailed " +"description to info@cryptobox.org." diff --git a/v0.3/plugins/logs/intl/es/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/es/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/es/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/fi/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/fi/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/fi/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/fr/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/fr/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/fr/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/hu/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/hu/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/hu/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/it/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/it/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/it/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/ja/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/ja/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/ja/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/nl/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/nl/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/nl/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/pl/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/pl/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/pl/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/pt/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/pt/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/pt/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/ru/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/ru/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/ru/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/sl/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/sl/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/sl/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/intl/sv/cryptobox-server-feature-logs.po b/v0.3/plugins/logs/intl/sv/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..fa1431e --- /dev/null +++ b/v0.3/plugins/logs/intl/sv/cryptobox-server-feature-logs.po @@ -0,0 +1,98 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "Show the content of the log file" +msgstr "" + +#: Link +msgid "Show log file" +msgstr "" + +#: Title.Log +msgid "CryptoBox logfiles" +msgstr "" + +#: Text.EmptyLog +msgid "The logfile of the CryptoBox is empty." +msgstr "" + +#: Text.Refresh +msgid "Refresh" +msgstr "" + +#: Name +msgid "Show event log" +msgstr "" + +#: Link +msgid "Event log" +msgstr "" + +#: Title.Log +msgid "CryptoBox 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.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 "" + +#: 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 "" + +#: 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 messages besides a detailed description to info@cryptobox.org." +msgstr "" diff --git a/v0.3/plugins/logs/language.hdf b/v0.3/plugins/logs/language.hdf new file mode 100644 index 0000000..16c8659 --- /dev/null +++ b/v0.3/plugins/logs/language.hdf @@ -0,0 +1,30 @@ +Name = Show event log +Link = Event log + +Title.Log = CryptoBox event log + +Text { + ShowAll = Show all messages + AtLeastWarnings = Show warnings and errors + OnlyErrors = Show errors only + 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 messages 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/plugins/logs/logs.css b/v0.3/plugins/logs/logs.css new file mode 100644 index 0000000..e71d72d --- /dev/null +++ b/v0.3/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/plugins/logs/logs.py b/v0.3/plugins/logs/logs.py new file mode 100644 index 0000000..5470e49 --- /dev/null +++ b/v0.3/plugins/logs/logs.py @@ -0,0 +1,194 @@ +# +# 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 os +import re +import datetime + +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 + "StyleSheetFile"] = os.path.abspath(os.path.join( + self.plugin_dir, "logs.css")) + self.hdf[self.hdf_prefix + "Destination"] = self.cbox.prefs["Log"]["Destination"].lower() + return "show_log" + + + 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(): + for one_level in filtered_levels: + if line.find(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 successfully - 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_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' + """ + # return nothing if the currently selected log output is not a file + try: + if self.cbox.prefs["Log"]["Destination"].upper() != "FILE": + return [] + log_file = self.cbox.prefs["Log"]["Details"] + except KeyError: + self.cbox.log.error( + "could not evaluate one of the following config settings: " + + "[Log]->Destination or [Log]->Details") + 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/plugins/logs/plugin_icon.gif b/v0.3/plugins/logs/plugin_icon.gif new file mode 100644 index 0000000..a5f8618 Binary files /dev/null and b/v0.3/plugins/logs/plugin_icon.gif differ diff --git a/v0.3/plugins/logs/plugin_icon.png b/v0.3/plugins/logs/plugin_icon.png new file mode 100644 index 0000000..1fbb4f0 Binary files /dev/null and b/v0.3/plugins/logs/plugin_icon.png differ diff --git a/v0.3/plugins/logs/show_log.cs b/v0.3/plugins/logs/show_log.cs new file mode 100644 index 0000000..75026fb --- /dev/null +++ b/v0.3/plugins/logs/show_log.cs @@ -0,0 +1,73 @@ + + + + +

+ + + + + + + + + +
+ + + + + + + +
+ +
+ + + + 0 ?> + + + + + + + + + + +
" + alt="symbol: " /> 
+ + + + +
+ diff --git a/v0.3/plugins/logs/unittests.py b/v0.3/plugins/logs/unittests.py new file mode 100644 index 0000000..3d8fa3f --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.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/plugins/network/form_network.cs b/v0.3/plugins/network/form_network.cs new file mode 100644 index 0000000..47dfc01 --- /dev/null +++ b/v0.3/plugins/network/form_network.cs @@ -0,0 +1,29 @@ + + + + +

+ + + + + + + +


+ ...

+ +

+

+ + + diff --git a/v0.3/plugins/network/intl/cryptobox-server-feature-network.pot b/v0.3/plugins/network/intl/cryptobox-server-feature-network.pot new file mode 100644 index 0000000..84afbbc --- /dev/null +++ b/v0.3/plugins/network/intl/cryptobox-server-feature-network.pot @@ -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: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/cs/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/cs/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/cs/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/da/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/da/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/da/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/de/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/de/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/de/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/en/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/en/cryptobox-server-feature-network.po new file mode 100644 index 0000000..457ccf5 --- /dev/null +++ b/v0.3/plugins/network/intl/en/cryptobox-server-feature-network.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" + +#: Name +msgid "Configure network" +msgstr "Configure network" + +#: Title.Network +msgid "Network settings" +msgstr "Network settings" + +#: Button.Network +msgid "Update network settings" +msgstr "Update network settings" + +#: Text.IP +msgid "Network address" +msgstr "Network address" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "Invalid value" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +msgstr "An invalid network address (IP) was supplied. Please try again." + +#: 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." + +#: Help.Network +msgid "" +"Change the network address of the CryptoBox server. Be aware that you may " +"lose your connection to the server under some circumstances." +msgstr "" +"Change the network address of the CryptoBox server. Be aware that you may " +"lose your connection to the server under some circumstances." + +#~ msgid "The network address (IP) was invalid and therefore not changed." +#~ msgstr "The network address (IP) was invalid and therefore not changed." diff --git a/v0.3/plugins/network/intl/es/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/es/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/es/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/fi/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/fi/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/fi/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/fr/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/fr/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/fr/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/hu/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/hu/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/hu/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/it/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/it/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/it/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/ja/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/ja/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/ja/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/nl/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/nl/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/nl/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/pl/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/pl/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/pl/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/pt/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/pt/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/pt/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/ru/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/ru/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/ru/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/sl/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/sl/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/sl/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/intl/sv/cryptobox-server-feature-network.po b/v0.3/plugins/network/intl/sv/cryptobox-server-feature-network.po new file mode 100644 index 0000000..11a71b0 --- /dev/null +++ b/v0.3/plugins/network/intl/sv/cryptobox-server-feature-network.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.Network +msgid "Network settings" +msgstr "" + +#: Button.Network +msgid "Update network settings" +msgstr "" + +#: Text.IP +msgid "Network address" +msgstr "" + +#: WarningMessage.InvalidIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidIP.Text +msgid "An invalid network address (IP) was supplied. Please try again." +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 "" + +#: Help.Network +msgid "Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances." +msgstr "" diff --git a/v0.3/plugins/network/language.hdf b/v0.3/plugins/network/language.hdf new file mode 100644 index 0000000..1e2c41b --- /dev/null +++ b/v0.3/plugins/network/language.hdf @@ -0,0 +1,24 @@ +Name = Configure network +Link = Configure network + +Title.Network = Network settings + +Button.Network = Update network settings + +Text.IP = Network address + +Help.Network = Change the network address of the CryptoBox server. Be aware that you may lose your connection to the server under some circumstances. + +WarningMessage { + InvalidIP { + Title = Invalid value + Text = An invalid network address (IP) was supplied. Please try again. + } +} + +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. + } +} diff --git a/v0.3/plugins/network/network.py b/v0.3/plugins/network/network.py new file mode 100644 index 0000000..63aa189 --- /dev/null +++ b/v0.3/plugins/network/network.py @@ -0,0 +1,169 @@ +# +# 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. +""" + +__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 = 2 + +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=""): + """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" + ## request for IP change? + if store: + self.cbox.log.debug("network plugin: changing IP") + try: + for ip_in in (ip1, ip2, ip3, ip4): + if (int(ip_in) < 0) or (int(ip_in) > 255): + self.cbox.log.info("invalid IP supplied: %s" % \ + str((ip1, ip2, ip3, ip4))) + raise ValueError + new_ip = "%d.%d.%d.%d" % (int(ip1), int(ip2), int(ip3), int(ip4)) + except ValueError: + self.hdf["Data.Warning"] = "Plugins.network.InvalidIP" + self.__prepare_form_data() + return "form_network" + if self.__set_ip(new_ip): + self.cbox.log.info("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 + return "form_network" + else: + self.cbox.log.warn("failed to change IP address to: %s" % new_ip) + self.hdf["Data.Warning"] = "Plugins.network.InvalidIP" + self.__prepare_form_data() + return "form_network" + else: + self.cbox.log.debug("network plugin: show form") + ## just show the form + 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 __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. + """ + (oc1, oc2, oc3, oc4) = self.__get_current_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 + + + def __get_current_ip(self): + """Retrieve the current IP. + """ + import re + import imp + ## load some values from the root_action.py script + root_action_plug = imp.load_source("root_action", + os.path.join(self.plugin_dir, "root_action.py")) + ## get the current IP of the network interface + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + args = [ + root_action_plug.IFCONFIG_BIN, + root_action_plug.IFACE]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + return (0,0,0,0) + ## 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) + + + def __set_ip(self, new_ip): + """Change the IP. + """ + import threading + ## 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 + time.sleep(CHANGE_IP_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"), + new_ip]) + 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 + diff --git a/v0.3/plugins/network/plugin_icon.gif b/v0.3/plugins/network/plugin_icon.gif new file mode 100644 index 0000000..b186f88 Binary files /dev/null and b/v0.3/plugins/network/plugin_icon.gif differ diff --git a/v0.3/plugins/network/plugin_icon.png b/v0.3/plugins/network/plugin_icon.png new file mode 100644 index 0000000..0a1ee2d Binary files /dev/null and b/v0.3/plugins/network/plugin_icon.png differ diff --git a/v0.3/plugins/network/root_action.py b/v0.3/plugins/network/root_action.py new file mode 100755 index 0000000..3b52aca --- /dev/null +++ b/v0.3/plugins/network/root_action.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python2.4 +# +# 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" + + +#TODO: add netmask and gateway + +## necessary: otherwise CryptoBoxRootActions.py will refuse to execute this script +PLUGIN_TYPE = "cryptobox" + +IFCONFIG_BIN = "/sbin/ifconfig" +#TODO: put IFACE in config +IFACE = "eth0" + +import subprocess +import re +import sys +import os + + +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) + + match = re.search(r'^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$', args[0]) + ## 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, args[0])) + sys.exit(1) + + proc = subprocess.Popen( + shell = False, + args = [IFCONFIG_BIN, IFACE, args[0]]) + proc.wait() + sys.exit(proc.returncode) + diff --git a/v0.3/plugins/network/unittests.py b/v0.3/plugins/network/unittests.py new file mode 100644 index 0000000..8ecfd59 --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass +from network import CHANGE_IP_DELAY + + +class unittests(cryptobox.web.testclass.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("set_ip", "ip1", str(ip1)) + self.cmd.formvalue("set_ip", "ip2", str(ip2)) + self.cmd.formvalue("set_ip", "ip3", str(ip3)) + self.cmd.formvalue("set_ip", "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=1") + self.cmd.find("invalid network address") + diff --git a/v0.3/plugins/partition/current_partition_info.cs b/v0.3/plugins/partition/current_partition_info.cs new file mode 100644 index 0000000..960a425 --- /dev/null +++ b/v0.3/plugins/partition/current_partition_info.cs @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/v0.3/plugins/partition/intl/cryptobox-server-feature-partition.pot b/v0.3/plugins/partition/intl/cryptobox-server-feature-partition.pot new file mode 100644 index 0000000..3a0649b --- /dev/null +++ b/v0.3/plugins/partition/intl/cryptobox-server-feature-partition.pot @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/cs/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/cs/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/cs/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/da/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/da/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/da/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/de/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/de/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/de/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/en/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/en/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..07c6a2b --- /dev/null +++ b/v0.3/plugins/partition/intl/en/cryptobox-server-feature-partition.po @@ -0,0 +1,259 @@ +msgid "" +msgstr "" + +#: Name +msgid "Disk partitioning" +msgstr "Disk partitioning" + +#: Link +msgid "Partition a disk" +msgstr "Partition a disk" + +#: Title.Partition +msgid "Disk partitions" +msgstr "Disk partitions" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "Manual partitioning" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "Automatic setup" + +#: Button.AddPartition +msgid "Add" +msgstr "Add" + +#: Button.DelPartition +msgid "Remove" +msgstr "Remove" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "Write new partition table" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "Cancel" + +#: 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 disks will be destroyed, if you continue" +msgstr "These disks will be destroyed, if you continue" + +#: 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!" + +#: 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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "Formatting failed" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "The formatting of the filesystems of the device failed - sorry!" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "This disk is busy" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers of this disk before partitioning." +msgstr "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" +"The container size you entered exceeded the available size of the disk." + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "The minimum size of a container is 10 megabytes." + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "Show log messages" + +#: Help.Partitioning +msgid "" +"You can split every disk into one ore more parts, which are called " +"'partitions'. This is useful if you want to seperate 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 seperate 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 if you confirm this action later." +msgstr "" +"Choose one of the disks given in the list. Be aware that you lose all data " +"on the partitions of this disk if you confirm this action later." + +#: 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.PartitionList +msgid "" +"Choose a size for your partitions and add it to the list by clicking on the " +"corresponding button. You may remove any partition later. Nothing will get " +"written to your disk until you click on the 'write partition table' button. " +"Be very careful as you destroy all data on this disk." +msgstr "" +"Choose a size for your partitions and add it to the list by clicking on the " +"corresponding button. You may remove any partition later. Nothing will get " +"written to your disk until you click on the 'write partition table' button. " +"Be very careful as you destroy all data on this disk." + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "Formatting of at least one volume failed - sorry!" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "Please close all volumes of this disk before partitioning." + +#: 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." + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Yes, I know what I am doing!" + +#: 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." + +#~ msgid "Manage volumes" +#~ msgstr "Manage volumes" + +#~ msgid "Volumes creation" +#~ msgstr "Volumes creation" + +#~ msgid "The data on these disks will be deleted, if you continue" +#~ msgstr "The data on these disks will be deleted, if you continue" + +#~ msgid "Volume initialization completed" +#~ msgstr "Volume initialization completed" + +#~ msgid "No available disks were found!" +#~ msgstr "No available disks were found!" + +#~ msgid "" +#~ "Please check your cryptobox-server configuration and the connected disks." +#~ msgstr "" +#~ "Please check your cryptobox-server configuration and the connected disks." + +#~ msgid "The filesystem formatting on this disk failed - sorry!" +#~ msgstr "The filesystem formatting on this disk failed - sorry!" + +#~ msgid "disks" +#~ msgstr "disks" diff --git a/v0.3/plugins/partition/intl/es/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/es/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/es/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/fi/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/fi/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/fi/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/fr/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/fr/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/fr/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/hu/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/hu/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/hu/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/it/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/it/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/it/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/ja/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/ja/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/ja/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/nl/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/nl/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/nl/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/pl/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/pl/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/pl/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/pt/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/pt/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/pt/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/ru/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/ru/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/ru/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/sl/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/sl/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/sl/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/intl/sv/cryptobox-server-feature-partition.po b/v0.3/plugins/partition/intl/sv/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..9bcde16 --- /dev/null +++ b/v0.3/plugins/partition/intl/sv/cryptobox-server-feature-partition.po @@ -0,0 +1,214 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 partitioning" +msgstr "" + +#: Link +msgid "Partition a disk" +msgstr "" + +#: Title.Partition +msgid "Disk partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Manual partitioning" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add" +msgstr "" + +#: Button.DelPartition +msgid "Remove" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +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 disks will be destroyed, if you continue" +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +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.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.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "The formatting of the filesystems of the device failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please deactivate all containers 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 container size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a container is 10 megabytes." +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +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 seperate 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 if you confirm this action later." +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.PartitionList +msgid "Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk." +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +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 "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" diff --git a/v0.3/plugins/partition/language.hdf b/v0.3/plugins/partition/language.hdf new file mode 100644 index 0000000..ac25d42 --- /dev/null +++ b/v0.3/plugins/partition/language.hdf @@ -0,0 +1,106 @@ +Name = Disk partitioning +Link = Partition a disk + +Title.Partition = Disk partitions + +Button { + SelectDevice = Manual partitioning + EasySetup = Automatic setup + AddPartition = Add + DelPartition = Remove + 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 disks will be destroyed, if you continue +} + + +Help { + Partitioning = You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to seperate 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 if you confirm this action later. + 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. + PartitionList = Choose a size for your partitions and add it to the list by clicking on the corresponding button. You may remove any partition later. Nothing will get written to your disk until you click on the 'write partition table' button. Be very careful as you destroy all data on this disk. +} + + +AdviceMessage { + DeviceDataIsLost { + Text = If you continue, you will destroy all data on the choosen disk. Please be VERY careful! + } +} + +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/plugins/partition/partition.css b/v0.3/plugins/partition/partition.css new file mode 100644 index 0000000..4c47c37 --- /dev/null +++ b/v0.3/plugins/partition/partition.css @@ -0,0 +1,4 @@ +table.partition tr td{ + text-align: center + } + diff --git a/v0.3/plugins/partition/partition.py b/v0.3/plugins/partition/partition.py new file mode 100644 index 0000000..b4e23ec --- /dev/null +++ b/v0.3/plugins/partition/partition.py @@ -0,0 +1,508 @@ +# +# 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 logging +import cryptobox.core.tools as cbxTools +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.device = 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.device)) + self.device_size = self.__get_available_device_size(self.device) + try: + step = args["step"] + del args["step"] + except KeyError: + step = "select_device" + try: + ## this way of selecting the easy setup is necessary: + ## see select_device.cs for details (button values for ie) + if args["easy"]: + step = "easy" + except KeyError: + pass + ## no (or invalid) device was supplied + if not self.device: + step = "select_device" + ## no confirm setting? + if not args.has_key("confirm") or (args["confirm"] != "1"): + if self.device: + self.hdf["Data.Warning"] = "Plugins.partition.FormatNotConfirmed" + return self.__action_select_device() + if step == "add_partition": + return self.__action_add_partition(args) + elif step == "del_partition": + return self.__action_del_partition(args) + elif step == "finish": + return self.__action_finish(args) + elif step == "easy": + return self.__action_easy_setup() + 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.device, self.device_size, + self.with_config_partition) + + + def __prepare_dataset(self): + """Set some hdf values. + """ + self.hdf[self.hdf_prefix + "StyleSheetFile"] = \ + os.path.join(self.plugin_dir, "partition.css") + + + def __get_selected_device(self, args): + """Check the selected device (valid, not busy, ...). + """ + try: + device = args["block_device"] + except KeyError: + return None + if not self.__is_device_valid(device): + return None + if self.__is_device_busy(device): + self.hdf["Data.Warning"] = "Plugins.partition.DiskIsBusy" + return None + return device + + + def __is_device_valid(self, device): + """Check if the device is valid and allowed. + """ + if not device: + return False + if not self.cbox.is_device_allowed(device): + return False + if not device in cbxTools.get_parent_blockdevices(): + return False + return True + + + def __is_device_busy(self, device): + """check if the device (or one of its partitions) is mounted + """ + # the config partition is ignored, as it will get unmounted if necessary + import re + for cont in self.cbox.get_container_list(): + if re.match(device + "\d*$", cont.get_device()): + if 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 cbxTools.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] = \ + cbxTools.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.device + self.hdf[self.hdf_prefix + "Device.Size"] = self.device_size + parts = self.__get_partitions_from_args(args) + self.__set_partition_data(parts) + return "set_partitions" + + + def __action_del_partition(self, args): + """Remove a partition from the proposed partition table. + """ + try: + part_num = int(args["del_num"]) + except (TypeError,KeyError): + return self.__action_add_partition(args) + self.hdf[self.hdf_prefix + "Device"] = self.device + self.hdf[self.hdf_prefix + "Device.Size"] = self.device_size + parts = self.__get_partitions_from_args(args) + ## valid partition number to be deleted? + if part_num < len(parts): + del parts[part_num] + else: + return self.__action_add_partition(args) + 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 cbxTools.is_part_of_blockdevice(self.device, + 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.device) + 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.device_size, "type": "windows" } ] + ## umount partition if necessary + if cbxTools.is_part_of_blockdevice(self.device, + 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.device_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 cbxTools.is_part_of_blockdevice(self.device, e.get_device()) ] + for (index, cont) in enumerate(current_containers): + self.hdf[self.hdf_prefix + "ExistingContainers.%d.name" % index] = \ + cont.get_name() + self.hdf[self.hdf_prefix + "ExistingContainers.%d.size" % index] = \ + cbxTools.get_blockdevice_size_humanly(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.device_size + i = -1 + while not done: + i += 1 + try: + 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 = cbxTools.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 cbxTools.is_part_of_blockdevice(self.device, 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.device_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.device]) + 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.device + str(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.device + str(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.device + str(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 __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/plugins/partition/plugin_icon.gif b/v0.3/plugins/partition/plugin_icon.gif new file mode 100644 index 0000000..136e6d0 Binary files /dev/null and b/v0.3/plugins/partition/plugin_icon.gif differ diff --git a/v0.3/plugins/partition/plugin_icon.png b/v0.3/plugins/partition/plugin_icon.png new file mode 100644 index 0000000..235cf74 Binary files /dev/null and b/v0.3/plugins/partition/plugin_icon.png differ diff --git a/v0.3/plugins/partition/root_action.py b/v0.3/plugins/partition/root_action.py new file mode 100755 index 0000000..f7fe5b5 --- /dev/null +++ b/v0.3/plugins/partition/root_action.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python2.4 +# +# 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/plugins/partition/select_device.cs b/v0.3/plugins/partition/select_device.cs new file mode 100644 index 0000000..0d1a41a --- /dev/null +++ b/v0.3/plugins/partition/select_device.cs @@ -0,0 +1,47 @@ + + + + +

+ + + + + + 0 ?> + + + + + + + +


+

+ + + +

+ +

+ + +

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

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

+ + + 0 ?> + + + + + + + + + + + + +
+ + + + + + +
+ +
+ +
+ +

+ + 0 ?> + + + + +

+

+ + + + +
: +
    + +
  • ()
  • + +
+ + + + diff --git a/v0.3/plugins/partition/unittests.py b/v0.3/plugins/partition/unittests.py new file mode 100644 index 0000000..36ba4c9 --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.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/plugins/plugin-interface.txt b/v0.3/plugins/plugin-interface.txt new file mode 100644 index 0000000..b3ce245 --- /dev/null +++ b/v0.3/plugins/plugin-interface.txt @@ -0,0 +1,74 @@ +The following directory structure is required: + - python code: plugins/PLUGINNAME/PLUGINNAME.py (all lower case is recommended) + - language files: plugins/PLUGINNAME/lang/(en|de|??).hdf + - clearsilver templates: plugins/PLUGINNAME/*.cs + - icon (128x128px recommended): plugins/PLUGINNAME/plugin_icon.png + + +Python code interface: + - create a class with the same name as the plugin - it must inherit CryptoBoxPlugin + - function "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) + - the argument "store" should be used to process a form submission (just a recommendation) + - 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. "Data.Plugins.PLUGINNAME.WarningMessage.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)) + - function "get_status": + - returns a string, that describes a state connected to this plugin (e.g. the current date and + time (for the "date" plugin)) + - function "setup": + - may be overridden to specify bootup behaviour + - function "cleanup": + - may be overridden to specify shutdown behaviour + - the class variable "plugin_capabilities" must be an array of strings (supported: "system" and + "volume") + - 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) + - 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 + + +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 values _must_ be defined: + Name (a short description) + Link (the visible text for links to this plugin) + - all warnings, hints and success messages should be stored below WarningMessage.??? + (resp. AdviceMessage or SuccessMessage) + + +Clearsilver template: + - heading: + - non-volume plugins: "

" + - volume plugins: "" (very important - otherwise + embedding of plugins breaks (see 'volume_properties')) + - the title should be followd by '' + - 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/plugins/plugin_icon_unknown.gif b/v0.3/plugins/plugin_icon_unknown.gif new file mode 100644 index 0000000..7bee58e Binary files /dev/null and b/v0.3/plugins/plugin_icon_unknown.gif differ diff --git a/v0.3/plugins/plugin_icon_unknown.png b/v0.3/plugins/plugin_icon_unknown.png new file mode 100644 index 0000000..d6e9b3a Binary files /dev/null and b/v0.3/plugins/plugin_icon_unknown.png differ diff --git a/v0.3/plugins/plugin_manager/intl/cryptobox-server-feature-plugin_manager.pot b/v0.3/plugins/plugin_manager/intl/cryptobox-server-feature-plugin_manager.pot new file mode 100644 index 0000000..267caff --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/cryptobox-server-feature-plugin_manager.pot @@ -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: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/cs/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/cs/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/cs/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..827316f --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" + +#: Name +msgid "Plugin Manager" +msgstr "Plugin Manager" + +#: Link +msgid "Manage plugins" +msgstr "Manage plugins" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "Volume plugins" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "System plugins" + +#: Button.SaveSettings +msgid "Save settings" +msgstr "Save 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?" + +#: Name +msgid "Plugin manager" +msgstr "Plugin manager" + +#: 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 colum 'order' can be used to " +"change the order of appearance of the plugins." +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 colum 'order' can be used to " +"change the order of appearance of the plugins." + +#: Help.VolumePlugins +msgid "" +"Volume plugins are used to manipulate volumes in any way. The plugin 'Volume " +"properties' can be used as a container for other plugins to increase the " +"clearness of the interface. 'Register' is the tab-based main interface for " +"volume management." +msgstr "" +"Volume plugins are used to manipulate volumes in any way. The plugin 'Volume " +"properties' can be used as a container for other plugins to increase the " +"clearness of the interface. 'Register' is the tab-based main interface for " +"volume management." + +#: 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/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po b/v0.3/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..bbcf062 --- /dev/null +++ b/v0.3/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Plugin Manager" +msgstr "" + +#: Link +msgid "Manage plugins" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save 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 "" + +#: Name +msgid "Plugin manager" +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 colum 'order' can be used to change the order of appearance of the plugins." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management." +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/plugins/plugin_manager/language.hdf b/v0.3/plugins/plugin_manager/language.hdf new file mode 100644 index 0000000..321f473 --- /dev/null +++ b/v0.3/plugins/plugin_manager/language.hdf @@ -0,0 +1,32 @@ +Name = Plugin manager +Link = Manage plugins + +Title { + PluginManager = Plugin Manager + VolumePlugins = Volume plugins + SystemPlugins = System plugins +} + +Button { + SaveSettings = Save 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 colum 'order' can be used to change the order of appearance of the plugins. + VolumePlugins = Volume plugins are used to manipulate volumes in any way. The plugin 'Volume properties' can be used as a container for other plugins to increase the clearness of the interface. 'Register' is the tab-based main interface for volume management. + 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/plugins/plugin_manager/plugin_icon.gif b/v0.3/plugins/plugin_manager/plugin_icon.gif new file mode 100644 index 0000000..4c0b2c9 Binary files /dev/null and b/v0.3/plugins/plugin_manager/plugin_icon.gif differ diff --git a/v0.3/plugins/plugin_manager/plugin_icon.png b/v0.3/plugins/plugin_manager/plugin_icon.png new file mode 100644 index 0000000..236169c Binary files /dev/null and b/v0.3/plugins/plugin_manager/plugin_icon.png differ diff --git a/v0.3/plugins/plugin_manager/plugin_list.cs b/v0.3/plugins/plugin_manager/plugin_list.cs new file mode 100644 index 0000000..daea4f3 --- /dev/null +++ b/v0.3/plugins/plugin_manager/plugin_list.cs @@ -0,0 +1,154 @@ + + + + + +

+ + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
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) ?> + +
+

+ + +

+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
checked="checked" />checked="checked" />checked="checked" /> + &x=#system_plugins"><?cs
+				var:html_escape(Lang.Plugins.plugin_manager.Button.Down) ?>&x=#" ><?cs
+				var:html_escape(Lang.Plugins.plugin_manager.Button.Up) ?> + +
+ +

+ + +

+ + + diff --git a/v0.3/plugins/plugin_manager/plugin_manager.py b/v0.3/plugins/plugin_manager/plugin_manager.py new file mode 100644 index 0000000..3ce7e2f --- /dev/null +++ b/v0.3/plugins/plugin_manager/plugin_manager.py @@ -0,0 +1,154 @@ +# +# 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] + 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.__setConfig(key[:-7], args) + else: + self.cbox.log.info("plugin_manager: invalid plugin name (%s)" % \ + str(key[:-7])) + try: + self.cbox.prefs.plugin_conf.write() + except IOError: + self.cbox.log.warn("failed to write plugin configuration") + 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) + for index,pl in enumerate(self.plugins): + try: + self.cbox.prefs.plugin_conf[pl.get_name()]["rank"] = dist*index + except KeyError: + self.cbox.prefs.plugin_conf[pl.get_name()] = {} + self.cbox.prefs.plugin_conf[pl.get_name()]["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 __setConfig(self, name, args): + import re + setting = {} + 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() + setting["visibility"].append(vis_type) + setting["rank"] = "50" + try: + r = int(args[name + "_rank"]) + if r>=0 and r<=100: + setting["rank"] = r + except (KeyError, ValueError): + pass + setting["requestAuth"] = False + try: + if args[name + "_auth"]: + setting["requestAuth"] = True + except (KeyError, ValueError): + pass + self.cbox.prefs.plugin_conf[name] = setting + diff --git a/v0.3/plugins/plugin_manager/tango-go-down.gif b/v0.3/plugins/plugin_manager/tango-go-down.gif new file mode 100644 index 0000000..9071f8e Binary files /dev/null and b/v0.3/plugins/plugin_manager/tango-go-down.gif differ diff --git a/v0.3/plugins/plugin_manager/tango-go-down.png b/v0.3/plugins/plugin_manager/tango-go-down.png new file mode 100644 index 0000000..6a8566d Binary files /dev/null and b/v0.3/plugins/plugin_manager/tango-go-down.png differ diff --git a/v0.3/plugins/plugin_manager/tango-go-up.gif b/v0.3/plugins/plugin_manager/tango-go-up.gif new file mode 100644 index 0000000..7fac7c3 Binary files /dev/null and b/v0.3/plugins/plugin_manager/tango-go-up.gif differ diff --git a/v0.3/plugins/plugin_manager/tango-go-up.png b/v0.3/plugins/plugin_manager/tango-go-up.png new file mode 100644 index 0000000..a1576db Binary files /dev/null and b/v0.3/plugins/plugin_manager/tango-go-up.png differ diff --git a/v0.3/plugins/plugin_manager/unittests.py b/v0.3/plugins/plugin_manager/unittests.py new file mode 100644 index 0000000..caebd79 --- /dev/null +++ b/v0.3/plugins/plugin_manager/unittests.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.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_read_form(self): + """Check if the 'plugin_manager' works. + """ + url = self.url + "plugin_manager?weblang=en" + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('Plugin Manager') + + + def test_set_options(self): + """Do some various stuff. + """ + #TODO: these 'tests' are really a bit stupid - someone should fix this + url = self.url + "plugin_manager" + self.register_auth(url) + self.cmd.go(url + r"?plugin_name=t/-!") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?plugin_name=foobar") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?plugin_name=disks&action=up") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?plugin_name=disks&action=down") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&dis/ks_listed") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&disks_listed&disks_visible_menu") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&disks_listed&disks_visible_menu=1&disks_rank=50") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&disks_listed&disks_visible_menu=1&disks_rank=x") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&disks_listed&disks_visible_menu=1&disks_auth=1") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&disks_listed&disks_visible_menu=1&disks_rank=50&disks_auth=1") + self.cmd.find('Plugin Manager') + + + def test_move_up(self): + """Move some plugins up. + """ + #TODO: if we want to be perfect, then we should check the change of the rank + url = self.url + "plugin_manager" + self.register_auth(url) + self.cmd.go(url + r"?plugin_name=disks&action=up") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&disks_listed&disks_visible_menu=1&disks_rank=0") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?plugin_name=disks&action=up") + self.cmd.find('Plugin Manager') + + + def test_move_down(self): + """Move some plugins down. + """ + ## TODO: if we want to be perfect, then we should check the change of the rank + url = self.url + "plugin_manager" + self.register_auth(url) + self.cmd.go(url + r"?plugin_name=disks&action=down") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?store=1&disks_listed&disks_visible_menu=1&disks_rank=100") + self.cmd.find('Plugin Manager') + self.cmd.go(url + r"?plugin_name=disks&action=down") + self.cmd.find('Plugin Manager') + diff --git a/v0.3/plugins/shutdown/form_shutdown.cs b/v0.3/plugins/shutdown/form_shutdown.cs new file mode 100644 index 0000000..8e3e428 --- /dev/null +++ b/v0.3/plugins/shutdown/form_shutdown.cs @@ -0,0 +1,18 @@ + + +

+ + + + + +
+ +
+ + icon: reboot
+ diff --git a/v0.3/plugins/shutdown/gnome-reboot.gif b/v0.3/plugins/shutdown/gnome-reboot.gif new file mode 100644 index 0000000..36eb686 Binary files /dev/null and b/v0.3/plugins/shutdown/gnome-reboot.gif differ diff --git a/v0.3/plugins/shutdown/gnome-reboot.png b/v0.3/plugins/shutdown/gnome-reboot.png new file mode 100644 index 0000000..1556089 Binary files /dev/null and b/v0.3/plugins/shutdown/gnome-reboot.png differ diff --git a/v0.3/plugins/shutdown/gnome-shutdown.gif b/v0.3/plugins/shutdown/gnome-shutdown.gif new file mode 100644 index 0000000..6ee043d Binary files /dev/null and b/v0.3/plugins/shutdown/gnome-shutdown.gif differ diff --git a/v0.3/plugins/shutdown/gnome-shutdown.png b/v0.3/plugins/shutdown/gnome-shutdown.png new file mode 100644 index 0000000..244330e Binary files /dev/null and b/v0.3/plugins/shutdown/gnome-shutdown.png differ diff --git a/v0.3/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot b/v0.3/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot new file mode 100644 index 0000000..52eaedd --- /dev/null +++ b/v0.3/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot @@ -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: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/cs/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/cs/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/da/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/da/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/de/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/de/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/plugins/shutdown/intl/de/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..9bff4aa --- /dev/null +++ b/v0.3/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "Shutdown or reboot the computer" + +#: Link +msgid "Shutdown" +msgstr "Shutdown" + +#: Title.Shutdown +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" + +#: 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!" + +#: 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." diff --git a/v0.3/plugins/shutdown/intl/es/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/es/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/fi/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/fi/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/fr/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/fr/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/plugins/shutdown/intl/fr/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/hu/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/hu/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/it/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/it/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/plugins/shutdown/intl/it/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/ja/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/ja/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/plugins/shutdown/intl/ja/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/nl/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/nl/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/pl/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/pl/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/plugins/shutdown/intl/pl/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/pt/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/pt/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/ru/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/ru/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/sl/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/sl/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/plugins/shutdown/intl/sl/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/intl/sv/cryptobox-server-feature-shutdown.po b/v0.3/plugins/shutdown/intl/sv/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..97f2d85 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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.Shutdown +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 "" + +#: 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 "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" diff --git a/v0.3/plugins/shutdown/language.hdf b/v0.3/plugins/shutdown/language.hdf new file mode 100644 index 0000000..16f56fa --- /dev/null +++ b/v0.3/plugins/shutdown/language.hdf @@ -0,0 +1,37 @@ +Name = Shutdown or reboot the computer +Link = Shutdown + +Title.Shutdown = Shutdown computer +Title.ProgressShutdown = The CryptoBox is shutting down +Title.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/plugins/shutdown/plugin_icon.gif b/v0.3/plugins/shutdown/plugin_icon.gif new file mode 100644 index 0000000..96fd8f7 Binary files /dev/null and b/v0.3/plugins/shutdown/plugin_icon.gif differ diff --git a/v0.3/plugins/shutdown/plugin_icon.png b/v0.3/plugins/shutdown/plugin_icon.png new file mode 100644 index 0000000..9d537e7 Binary files /dev/null and b/v0.3/plugins/shutdown/plugin_icon.png differ diff --git a/v0.3/plugins/shutdown/progress_reboot.cs b/v0.3/plugins/shutdown/progress_reboot.cs new file mode 100644 index 0000000..d36ce78 --- /dev/null +++ b/v0.3/plugins/shutdown/progress_reboot.cs @@ -0,0 +1,6 @@ + + +

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

+ + + diff --git a/v0.3/plugins/shutdown/root_action.py b/v0.3/plugins/shutdown/root_action.py new file mode 100755 index 0000000..25809eb --- /dev/null +++ b/v0.3/plugins/shutdown/root_action.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python2.4 +# +# 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/plugins/shutdown/shutdown.py b/v0.3/plugins/shutdown/shutdown.py new file mode 100644 index 0000000..b970185 --- /dev/null +++ b/v0.3/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 = [ "preferences", "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/plugins/shutdown/unittests.py b/v0.3/plugins/shutdown/unittests.py new file mode 100644 index 0000000..bfc2105 --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.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/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot b/v0.3/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot new file mode 100644 index 0000000..248995d --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot @@ -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-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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 "" diff --git a/v0.3/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..cbfdcf1 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.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-11-28 05:04+0100\n" +"PO-Revision-Date: 2006-12-14 03:54+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 "System preferences" +msgstr "Systemsteuerung" + +#: Link +msgid "Preferences" +msgstr "Einstellungen" diff --git a/v0.3/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..028be13 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,10 @@ +msgid "" +msgstr "" + +#: Name +msgid "System preferences" +msgstr "System preferences" + +#: Link +msgid "Preferences" +msgstr "Preferences" diff --git a/v0.3/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.po b/v0.3/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..607a309 --- /dev/null +++ b/v0.3/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.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-11-28 05:04+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 "" diff --git a/v0.3/plugins/system_preferences/language.hdf b/v0.3/plugins/system_preferences/language.hdf new file mode 100644 index 0000000..2beeec5 --- /dev/null +++ b/v0.3/plugins/system_preferences/language.hdf @@ -0,0 +1,5 @@ +Name = System preferences +Link = Preferences + +Title.Preferences = Preferences + diff --git a/v0.3/plugins/system_preferences/plugin_icon.gif b/v0.3/plugins/system_preferences/plugin_icon.gif new file mode 100644 index 0000000..9f60626 Binary files /dev/null and b/v0.3/plugins/system_preferences/plugin_icon.gif differ diff --git a/v0.3/plugins/system_preferences/plugin_icon.png b/v0.3/plugins/system_preferences/plugin_icon.png new file mode 100644 index 0000000..1355333 Binary files /dev/null and b/v0.3/plugins/system_preferences/plugin_icon.png differ diff --git a/v0.3/plugins/system_preferences/show_plugins.cs b/v0.3/plugins/system_preferences/show_plugins.cs new file mode 100644 index 0000000..6946f78 --- /dev/null +++ b/v0.3/plugins/system_preferences/show_plugins.cs @@ -0,0 +1,21 @@ + + +

+ + + + + +
<?cs
+				var:html_escape('icon: ' + x.Name) ?>
+ + diff --git a/v0.3/plugins/system_preferences/system_preferences.py b/v0.3/plugins/system_preferences/system_preferences.py new file mode 100644 index 0000000..0d1aadf --- /dev/null +++ b/v0.3/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 = 20 + + 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/plugins/system_preferences/unittests.py b/v0.3/plugins/system_preferences/unittests.py new file mode 100644 index 0000000..6342551 --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.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/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot b/v0.3/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot new file mode 100644 index 0000000..499d6a0 --- /dev/null +++ b/v0.3/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot @@ -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: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User Manager" +msgstr "" + +#: Link +msgid "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/cs/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/cs/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/da/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/da/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/de/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/de/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/plugins/user_manager/intl/de/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..225f584 --- /dev/null +++ b/v0.3/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po @@ -0,0 +1,122 @@ +msgid "" +msgstr "" + +#: Name +msgid "User Manager" +msgstr "User Manager" + +#: Link +msgid "Manage users" +msgstr "Manage users" + +#: 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" + +#: 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.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." + +#: 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!" + +#: Name +msgid "User manager" +msgstr "User manager" + +#: 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." diff --git a/v0.3/plugins/user_manager/intl/es/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/es/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/fi/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/fi/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/fr/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/fr/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/hu/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/hu/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/it/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/it/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/plugins/user_manager/intl/it/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/ja/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/ja/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/plugins/user_manager/intl/ja/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/nl/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/nl/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/pl/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/pl/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/plugins/user_manager/intl/pl/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/pt/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/pt/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/ru/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/ru/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/sl/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/sl/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/plugins/user_manager/intl/sl/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/intl/sv/cryptobox-server-feature-user_manager.po b/v0.3/plugins/user_manager/intl/sv/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5370780 --- /dev/null +++ b/v0.3/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: 2006-11-28 05:04+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 "Manage users" +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 "" + +#: 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.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: Name +msgid "User manager" +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 "" diff --git a/v0.3/plugins/user_manager/language.hdf b/v0.3/plugins/user_manager/language.hdf new file mode 100644 index 0000000..f6c1481 --- /dev/null +++ b/v0.3/plugins/user_manager/language.hdf @@ -0,0 +1,65 @@ +Name = User manager +Link = Manage users + +Title { + UserManager = Manage users + 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/plugins/user_manager/plugin_icon.gif b/v0.3/plugins/user_manager/plugin_icon.gif new file mode 100644 index 0000000..04a9d51 Binary files /dev/null and b/v0.3/plugins/user_manager/plugin_icon.gif differ diff --git a/v0.3/plugins/user_manager/plugin_icon.png b/v0.3/plugins/user_manager/plugin_icon.png new file mode 100644 index 0000000..e035d2b Binary files /dev/null and b/v0.3/plugins/user_manager/plugin_icon.png differ diff --git a/v0.3/plugins/user_manager/unittests.py b/v0.3/plugins/user_manager/unittests.py new file mode 100644 index 0000000..eb9d821 --- /dev/null +++ b/v0.3/plugins/user_manager/unittests.py @@ -0,0 +1,196 @@ +# +# 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.web.testclass + +## this user may not be removed +from user_manager import RESERVED_USERS + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + + def test_read_users(self): + """does the 'admin' user exist?""" + cur_users = self._getUsers() + self.cmd.find("Manage users") + self.assertTrue("admin" in cur_users) + + + def test_test_wrong_credentials(self): + """check if the user_manager is protected""" + url = self.url + "user_manager" + self.register_auth(url,"foo","bar") + self.cmd.go(url) + self.cmd.notfind("Manage users") + + + def test_add_existing_user(self): + """adding an existing user should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self._add_user("admin","foo","foo") + self.cmd.find("The choosen username does already exist") + + + def test_add_invalid_username(self): + """adding an invalid username should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self._add_user("foo/bar","foo","foo") + self.cmd.find("Invalid username") + self.assertFalse("foo/bar" in self._getUsers()) + + + def test_add_without_password(self): + """adding a user without password should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self.assertFalse("foo" in self._getUsers()) + self._add_user("foo","","foo") + self.cmd.find("Missing new password") + self.assertFalse("foo" in self._getUsers()) + + + def test_add_with_different_passwords(self): + """adding a user with different passwords should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self.assertFalse("foo" in self._getUsers()) + self._add_user("foo","bar","foo") + self.cmd.find("Different passwords") + self.assertFalse("foo" in self._getUsers()) + + + def test_change_pw_for_invalid_user(self): + """changing a password of a non existing user should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self.assertFalse("barfoo" in self._getUsers()) + self.cmd.go(url + "?store=change_password&user=foobar&new_pw=foo&new_pw2=foo") + self.cmd.notfind("Password changed") + + + def test_change_pw_without_password(self): + """changing a password without a new password should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self.assertFalse("foo" in self._getUsers()) + self._add_user("foo","bar","bar") + self.assertTrue("foo" in self._getUsers()) + self._change_password("foo","","foo") + self.cmd.find("Missing new password") + self._del_user("foo") + self.assertFalse("foo" in self._getUsers()) + + + def test_change_pw_wit_different_passwords(self): + """changing a password while supplying different passwords should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self.assertFalse("foo" in self._getUsers()) + self._add_user("foo","bar","bar") + self.assertTrue("foo" in self._getUsers()) + self._change_password("foo","bar","foo") + self.cmd.find("Different passwords") + self._del_user("foo") + self.assertFalse("foo" in self._getUsers()) + + + def _remove_reserved_user(self): + """removing a reserved user should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self.assertTrue("admin" in self._getUsers()) + self._del_user("admin") + self.cmd.find("may not remove a reserved user") + self.assertTrue("admin" in self._getUsers()) + + + def _remove_non_existing_user(self): + """removing a non-existing user should fail""" + url = self.url + "user_manager" + self.register_auth(url) + self.assertFalse("barfoo" in self._getUsers()) + self._del_user("barfoo") + self.cmd.notfind("User removed") + + + def test_manage_users(self): + """add a new user, change its password and remove the user afterwards""" + url = self.url + "user_manager" + self.register_auth(url) + ## remove the user that should be added - just in case a previous run was unclean + ## check its existence before + if "foobar" in self._getUsers(): self._del_user("foobar") + ## add a new user + self._add_user("foobar","foo","foo") + self.cmd.find("User added") + users = self._getUsers() + self.assertTrue("foobar" in users) + ## change the password of the new user + self.register_auth(url,"foobar","foo") + self._change_password("foobar","bar","bar") + self.cmd.find("Password changed") + ## remove the new user + self.register_auth(url,"foobar","bar") + self._del_user("foobar") + self.cmd.find("User removed") + users = self._getUsers() + self.assertFalse("foobar" in users) + + + def test_invalid_input(self): + """check all combinations of invalid input""" + url = self.url + "user_manager" + self.register_auth(url) + self.cmd.go(url + "?store=foobar") + + + def _add_user(self, username, pw, pw2): + self.cmd.go(self.url + "user_manager") + self.cmd.formvalue("add_user","user",username) + self.cmd.formvalue("add_user","new_pw",pw) + self.cmd.formvalue("add_user","new_pw2",pw2) + self.cmd.submit() + + + def _del_user(self, username): + self.cmd.go(self.url + "user_manager") + self.cmd.formvalue("del_user","user",username) + self.cmd.submit() + + + def _change_password(self, username, pw, pw2): + self.cmd.go(self.url + "user_manager") + self.cmd.formvalue("change_password","user",username) + self.cmd.formvalue("change_password","new_pw",pw) + self.cmd.formvalue("change_password","new_pw2",pw2) + self.cmd.submit() + + + def _getUsers(self): + url = self.url + "user_manager" + self.register_auth(url) + self.cmd.go(url) + self.cmd.find("Data.Status.Plugins.user_manager=([\w:]+)") + return self.locals["__match__"].split(":") + diff --git a/v0.3/plugins/user_manager/user_list.cs b/v0.3/plugins/user_manager/user_list.cs new file mode 100644 index 0000000..9249230 --- /dev/null +++ b/v0.3/plugins/user_manager/user_list.cs @@ -0,0 +1,85 @@ + + + + + +

+ + + + + +
+ + + + + + + + + + + + + +
+
+
+ + +
+ +
+ + +
+ + + + + + + + + + + + + +
+
+
+ + +
+ +
+ + + 1 ?> +
+ + +
+ + + + +
+
+ + diff --git a/v0.3/plugins/user_manager/user_manager.py b/v0.3/plugins/user_manager/user_manager.py new file mode 100644 index 0000000..1d3f4a0 --- /dev/null +++ b/v0.3/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/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot b/v0.3/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot new file mode 100644 index 0000000..6ef97e0 --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..fe3dbbf --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" + +#: Name +msgid "Automatic activation" +msgstr "Automatic activation" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "Activate during startup" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "Enable automatic activation" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "Disable automatic activation" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "Currently automatic activation is enabled" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "Currently automatic activation is disabled" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "Automatic activation enabled" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "This volume will get activated during startup" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "Automatic activation disabled" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "This volume will not get activated during startup" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "Automatic activation is not possible for encrypted volumes." + +#: Name +msgid "Automatic opening" +msgstr "Automatic opening" + +#: Link +msgid "AutoOpen" +msgstr "AutoOpen" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "Open during startup" + +#: 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.Text +msgid "This volume will get opened during startup" +msgstr "This volume will get opened during startup" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "This volume will not get opened during startup" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +msgstr "Automatic opening is not possible for encrypted volumes." + +#: 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." diff --git a/v0.3/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po b/v0.3/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..345e23e --- /dev/null +++ b/v0.3/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 activation" +msgstr "" + +#: Title.AutoMountVolume +msgid "Activate during startup" +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic activation" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic activation" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic activation is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic activation is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get activated during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get activated during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Link +msgid "AutoOpen" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +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.Text +msgid "This volume will get opened during startup" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup" +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic opening is not possible for encrypted volumes." +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 "" diff --git a/v0.3/plugins/volume_automount/language.hdf b/v0.3/plugins/volume_automount/language.hdf new file mode 100644 index 0000000..f3cccbe --- /dev/null +++ b/v0.3/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/plugins/volume_automount/unittests.py b/v0.3/plugins/volume_automount/unittests.py new file mode 100644 index 0000000..db0c6a8 --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_read_form(self): + """try to read automount form""" + url = self.url + "volume_automount?weblang=en&device=%2Fdev%2F" + self.device + 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=%%2Fdev%%2F%s&action=disable" % self.device) + self.cmd.find("Automatic activation disabled") + self.cmd.find("is disabled") + self.cmd.go(url + "?device=%%2Fdev%%2F%s&action=enable" % self.device) + 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=%%2Fdev%%2F%s&action=foobar" % self.device) + self.cmd.notfind("Automatic activation disabled") + self.cmd.notfind("Automatic activation enabled") + diff --git a/v0.3/plugins/volume_automount/volume_automount.cs b/v0.3/plugins/volume_automount/volume_automount.cs new file mode 100644 index 0000000..8d7daf8 --- /dev/null +++ b/v0.3/plugins/volume_automount/volume_automount.cs @@ -0,0 +1,25 @@ + + +<>> + + + + + + +

+ + + + + + + + + + +

+ + + + diff --git a/v0.3/plugins/volume_automount/volume_automount.py b/v0.3/plugins/volume_automount/volume_automount.py new file mode 100644 index 0000000..713804d --- /dev/null +++ b/v0.3/plugins/volume_automount/volume_automount.py @@ -0,0 +1,109 @@ +# +# 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": + container.attributes["automount"] = self.true_string + self.hdf["Data.Success"] = "Plugins.volume_automount.AutoMountEnabled" + self.cbox.log.info("volume_automount: enabled for device '%s'" % self.device) + try: + self.cbox.prefs.volumes_db.write() + except IOError: + self.cbox.log.warn("Failed to store volume database") + elif action == "disable": + container.attributes["automount"] = self.false_string + self.hdf["Data.Success"] = "Plugins.volume_automount.AutoMountDisabled" + self.cbox.log.info("volume_automount: disabled for device '%s'" % self.device) + try: + self.cbox.prefs.volumes_db.write() + except IOError: + self.cbox.log.warn("Failed to store volume database") + else: + self.cbox.log.info("volume_automount: invalid action (%s)" % str(action)) + self.__prepare_hdf() + return "volume_automount" + + + def setup(self): + """Override bootup behaviour. + + Mount all volumes marked as 'automount'. + """ + cryptobox.plugins.base.CryptoBoxPlugin.setup(self) + 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. + """ + 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 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 container.attributes.has_key("automount"): + return container.attributes["automount"] == self.true_string + else: + return False + diff --git a/v0.3/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot b/v0.3/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot new file mode 100644 index 0000000..d7b1409 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot @@ -0,0 +1,65 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..4f77637 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" + +#: 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" + +#: Button.FormatContainer +msgid "Format volume" +msgstr "Format volume" + +#: 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 destroy all data of this " +"container." +msgstr "" +"This volume is not encrypted. If you want to turn on encryption, then you " +"have to format the volume. Beware: this will destroy all data of this " +"container." + +#: 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!" + +#: 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 destroy all data of 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 destroy all data of this volume." + +#: Help.Password +msgid "" +"You can change the password of an encrypted volume easily. Just enter the " +"current password and type the new password twice. No data will get lost." +msgstr "" +"You can change the password of an encrypted volume easily. Just enter the " +"current password and type the new password twice. No data will get lost." + +#~ msgid "volume_format_fs" +#~ msgstr "volume_format_fs" diff --git a/v0.3/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po b/v0.3/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..aee0684 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,66 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Button.FormatContainer +msgid "Format volume" +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 destroy all data of this container." +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 "" + +#: 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 destroy all data of this volume." +msgstr "" + +#: Help.Password +msgid "You can change the password of an encrypted volume easily. Just enter the current password and type the new password twice. No data will get lost." +msgstr "" diff --git a/v0.3/plugins/volume_chpasswd/language.hdf b/v0.3/plugins/volume_chpasswd/language.hdf new file mode 100644 index 0000000..025dad8 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/language.hdf @@ -0,0 +1,39 @@ +Name = Change volume password +Link = Password + +Title { + ChangePassword = Change the password of this volume +} + + +Button { + ChangePassword = Change password + FormatContainer = Format volume +} + + +Help.Password = You can change the password of an encrypted volume easily. Just enter the current password and type the 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 destroy all data of 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/plugins/volume_chpasswd/unittests.py b/v0.3/plugins/volume_chpasswd/unittests.py new file mode 100644 index 0000000..5ad7f7a --- /dev/null +++ b/v0.3/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_read_form(self): + url = self.url + "volume_chpasswd?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('hange') + self.cmd.find('password') + diff --git a/v0.3/plugins/volume_chpasswd/volume_chpasswd.cs b/v0.3/plugins/volume_chpasswd/volume_chpasswd.cs new file mode 100644 index 0000000..f38b697 --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/volume_chpasswd.cs @@ -0,0 +1,37 @@ + + +<>> + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + diff --git a/v0.3/plugins/volume_chpasswd/volume_chpasswd.py b/v0.3/plugins/volume_chpasswd/volume_chpasswd.py new file mode 100644 index 0000000..521aefd --- /dev/null +++ b/v0.3/plugins/volume_chpasswd/volume_chpasswd.py @@ -0,0 +1,85 @@ +# +# 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/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot b/v0.3/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot new file mode 100644 index 0000000..552f7ca --- /dev/null +++ b/v0.3/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot @@ -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: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..3a5c796 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" + +#: 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" + +#: Text.DeviceName +msgid "Name of device" +msgstr "Name of device" + +#: Text.Status +msgid "Status" +msgstr "Status" + +#: Text.StatusActive +msgid "active" +msgstr "active" + +#: Text.StatusPassive +msgid "passive" +msgstr "passive" + +#: 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" + +#: Text.StatusActive +msgid "open" +msgstr "open" + +#: Text.StatusPassive +msgid "closed" +msgstr "closed" diff --git a/v0.3/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.po b/v0.3/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..2416052 --- /dev/null +++ b/v0.3/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.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: 2006-11-28 05:04+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 "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "active" +msgstr "" + +#: Text.StatusPassive +msgid "passive" +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 "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" diff --git a/v0.3/plugins/volume_details/language.hdf b/v0.3/plugins/volume_details/language.hdf new file mode 100644 index 0000000..7d08b4b --- /dev/null +++ b/v0.3/plugins/volume_details/language.hdf @@ -0,0 +1,20 @@ +Name = Technical details of a volume +Link = Details + +Title.Details = Technical details + +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/plugins/volume_details/plugin_icon.gif b/v0.3/plugins/volume_details/plugin_icon.gif new file mode 100644 index 0000000..013c691 Binary files /dev/null and b/v0.3/plugins/volume_details/plugin_icon.gif differ diff --git a/v0.3/plugins/volume_details/plugin_icon.png b/v0.3/plugins/volume_details/plugin_icon.png new file mode 100644 index 0000000..d15b3b3 Binary files /dev/null and b/v0.3/plugins/volume_details/plugin_icon.png differ diff --git a/v0.3/plugins/volume_details/unittests.py b/v0.3/plugins/volume_details/unittests.py new file mode 100644 index 0000000..cad34fe --- /dev/null +++ b/v0.3/plugins/volume_details/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_read_form(self): + url = self.url + "volume_details?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('Technical details') + diff --git a/v0.3/plugins/volume_details/volume_details.cs b/v0.3/plugins/volume_details/volume_details.cs new file mode 100644 index 0000000..49b621b --- /dev/null +++ b/v0.3/plugins/volume_details/volume_details.cs @@ -0,0 +1,18 @@ + + +<>> + + + +
    +
  • :
  • +
  • :
  • +
  • :
  • +
  • :
  • + +
  • : MB
  • +
  • : MB
  • +
  • : %
  • + +
+ diff --git a/v0.3/plugins/volume_details/volume_details.py b/v0.3/plugins/volume_details/volume_details.py new file mode 100644 index 0000000..4bfbdde --- /dev/null +++ b/v0.3/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/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot b/v0.3/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot new file mode 100644 index 0000000..e39569b --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot @@ -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: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..ad0b443 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,169 @@ +msgid "" +msgstr "" + +#: 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" + +#: 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 deactivate this volume before you may initialize it." +msgstr "You must deactivate this volume before you may initialize it." + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "Deactive volume now" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "Formatting successful" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +msgstr "The selected filesystem was successfully formatted." + +#: 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!" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +msgstr "View log messages" + +#: 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 destroy all data of 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 destroy all data of this volume." + +#: 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 a 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 a 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." + +#: 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" + +#: 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." + +#~ msgid "action" +#~ msgstr "action" + +#~ msgid "umount" +#~ msgstr "umount" + +#~ msgid "redirect" +#~ msgstr "redirect" + +#~ msgid "volume_format_fs" +#~ msgstr "volume_format_fs" + +#~ msgid "volume_mount" +#~ msgstr "volume_mount" diff --git a/v0.3/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.po b/v0.3/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6295b89 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.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: 2006-11-28 05:04+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 "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must deactivate this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Deactive volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting successful" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem was successfully formatted." +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 "" + +#: 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.FormatFailed.Link.Text +msgid "View log messages" +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 destroy all data of this volume." +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 a 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 "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +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 "" diff --git a/v0.3/plugins/volume_format_fs/language.hdf b/v0.3/plugins/volume_format_fs/language.hdf new file mode 100644 index 0000000..af3af65 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/language.hdf @@ -0,0 +1,62 @@ +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 destroy all data of this volume. + 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. +} + + +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/plugins/volume_format_fs/plugin_icon.gif b/v0.3/plugins/volume_format_fs/plugin_icon.gif new file mode 100644 index 0000000..479611f Binary files /dev/null and b/v0.3/plugins/volume_format_fs/plugin_icon.gif differ diff --git a/v0.3/plugins/volume_format_fs/plugin_icon.png b/v0.3/plugins/volume_format_fs/plugin_icon.png new file mode 100644 index 0000000..85f58d3 Binary files /dev/null and b/v0.3/plugins/volume_format_fs/plugin_icon.png differ diff --git a/v0.3/plugins/volume_format_fs/unittests.py b/v0.3/plugins/volume_format_fs/unittests.py new file mode 100644 index 0000000..4746375 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/unittests.py @@ -0,0 +1,94 @@ +# +# 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.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + + def test_read_form(self): + """Simply check if the plugin works. + """ + url = self.url + "volume_format_fs?weblang=en&device=%2Fdev%2F" + self.device + 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=%2Fdev%2F" + self.device + self.register_auth(url) + ## 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 = self.url + "volume_format_fs?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + ## mount device + self.cmd.go(self.url + "volume_mount?weblang=en&device=%2Fdev%2F" \ + + self.device + "&action=mount_plain") + self.cmd.find('Data.Status.Plugins.volume_mount=active') + ## try plain device + self.cmd.go(url + "&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 + "&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.') + self.cmd.go(self.url + "volume_mount?weblang=en&device=%2Fdev%2F" \ + + self.device + "&action=umount") + + + def test_format_device(self): + """Formatting of a device was done in 'volume_mount' plugin tests. + """ + pass + diff --git a/v0.3/plugins/volume_format_fs/volume_format.cs b/v0.3/plugins/volume_format_fs/volume_format.cs new file mode 100644 index 0000000..30cf993 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/volume_format.cs @@ -0,0 +1,36 @@ +<>> + + + + + + + + + + + + + +

+ + +

+ +

+ +

+ +

+ + + + diff --git a/v0.3/plugins/volume_format_fs/volume_format_fs.py b/v0.3/plugins/volume_format_fs/volume_format_fs.py new file mode 100644 index 0000000..9cce800 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/volume_format_fs.py @@ -0,0 +1,124 @@ +# +# 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): + 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.warn("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, errMsg: + self.hdf["Data.Warning"] = "Plugins.volume_format_fs.FormatFailed" + self.cbox.log.warn("initialization of device '%s' failed" % self.device) + self.cbox.log.warn("reason: %s" % errMsg) + 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.warn("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.warn("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, errMsg: + self.hdf["Data.Warning"] = "Plugins.volume_format_fs.FormatFailed" + self.cbox.log.warn("initialization of device '%s' failed" % self.device) + self.cbox.log.warn("reason: %s" % errMsg) + 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/plugins/volume_format_fs/volume_format_luks.cs b/v0.3/plugins/volume_format_fs/volume_format_luks.cs new file mode 100644 index 0000000..da40121 --- /dev/null +++ b/v0.3/plugins/volume_format_fs/volume_format_luks.cs @@ -0,0 +1,30 @@ + + +<>> + + + + + + + + + + +

:

+

:

+ + +

+

+

+ + + +

+ + + + diff --git a/v0.3/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot b/v0.3/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot new file mode 100644 index 0000000..55bb03b --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..8fa0a58 --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,189 @@ +msgid "" +msgstr "" + +#: Name +msgid "Mount and umount volumes" +msgstr "Mount and umount volumes" + +#: Link +msgid "Activation" +msgstr "Activation" + +#: Title.Mount +msgid "Activate volume" +msgstr "Activate volume" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "Deactivate volume" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "Encrypted filesystem activated" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "The encrypted filesystem is now available." + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "Encrypted filesystem deactivated" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "The encrypted filesystem is now secured from all forms of access." + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "Activation failed" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "The volume could not be activated for some reason. Sorry!" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the wrong password?" +msgstr "Maybe you entered the wrong password?" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "Unknown format" + +#: WarningMessage.InvalidContainerType.Text +msgid "" +"The type of this volume ist not known. Maybe you want to initialize itfirst?" +msgstr "" +"The type of this volume ist not known. Maybe you want to initialize itfirst?" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "Format volume" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "Deactivation failed" + +#: WarningMessage.UmountFailed.Text +msgid "" +"The volume could not be deactivated. Probably some files are still in use. " +"In case of emergency just shut down the CryptoBox!" +msgstr "" +"The volume could not be deactivated. Probably some files are still in use. " +"In case of emergency just shut down the CryptoBox!" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "Already active" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "The volume is already active." + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "Inactive" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "The volume is currently not active." + +#: Title.Mount +msgid "Open volume" +msgstr "Open volume" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "Turn on the volume" + +#: Button.Umount +msgid "Close volume" +msgstr "Close volume" + +#: 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.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." + +#: Title.Mount +msgid "Opening a volume" +msgstr "Opening a volume" + +#: Title.Umount +msgid "Closing a volume" +msgstr "Closing a volume" + +#: Help.Open +msgid "" +"The 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." +msgstr "" +"The 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." + +#: Help.Close +msgid "" +"Currently the volume is 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 "" +"Currently the volume is 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." + +#: 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!" + +#: Name +msgid "Open and close volumes" +msgstr "Open and close volumes" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "View event log" + +#~ msgid "volume_format_fs" +#~ msgstr "volume_format_fs" diff --git a/v0.3/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po b/v0.3/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6b1d6bb --- /dev/null +++ b/v0.3/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,178 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05: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 "Mount and umount volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Mount +msgid "Activate volume" +msgstr "" + +#: Title.Umount +msgid "Deactivate volume" +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Encrypted filesystem activated" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The encrypted filesystem is now available." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Encrypted filesystem deactivated" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The encrypted filesystem is now secured from all forms of access." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Activation failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be activated for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered the 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 itfirst?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Deactivation failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be deactivated. Probably some files are still in use. In case of emergency just shut down the CryptoBox!" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already active" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already active." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Inactive" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is currently not active." +msgstr "" + +#: Title.Mount +msgid "Open volume" +msgstr "" + +#: Title.Umount +msgid "Turn on the volume" +msgstr "" + +#: Button.Umount +msgid "Close volume" +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.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 "" + +#: Title.Mount +msgid "Opening a volume" +msgstr "" + +#: Title.Umount +msgid "Closing a volume" +msgstr "" + +#: Help.Open +msgid "The 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." +msgstr "" + +#: Help.Close +msgid "Currently the volume is 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 "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" diff --git a/v0.3/plugins/volume_mount/language.hdf b/v0.3/plugins/volume_mount/language.hdf new file mode 100644 index 0000000..955d9b0 --- /dev/null +++ b/v0.3/plugins/volume_mount/language.hdf @@ -0,0 +1,73 @@ +Name = Open and close volumes +Link = Activation + + +Title { + Mount = Opening a volume + Umount = Closing a volume +} + + +Button { + Mount = Open volume + Umount = Close volume +} + + +Help { + Open = The 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. + Close = Currently the volume is 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 the wrong password? + } + + InvalidContainerType { + Title = Unknown format + Text = The type of this volume ist not known. Maybe you want to initialize itfirst? + 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/plugins/volume_mount/plugin_icon.gif b/v0.3/plugins/volume_mount/plugin_icon.gif new file mode 100644 index 0000000..5106ecd Binary files /dev/null and b/v0.3/plugins/volume_mount/plugin_icon.gif differ diff --git a/v0.3/plugins/volume_mount/plugin_icon.png b/v0.3/plugins/volume_mount/plugin_icon.png new file mode 100644 index 0000000..952890b Binary files /dev/null and b/v0.3/plugins/volume_mount/plugin_icon.png differ diff --git a/v0.3/plugins/volume_mount/unittests.py b/v0.3/plugins/volume_mount/unittests.py new file mode 100644 index 0000000..6f0870a --- /dev/null +++ b/v0.3/plugins/volume_mount/unittests.py @@ -0,0 +1,184 @@ +# +# 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.web.testclass +import twill + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + + def test_read_form(self): + """Simply check if the plugin works + """ + url = self.url + "volume_mount?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('Open volume') + self.cmd.find('Data.Status.Plugins.volume_mount=passive') + + + def test_mount(self): + """Do all variations of mount/umount actions. + """ + url = self.url + "volume_mount?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + ## we may not split these tests into two functions, as the order + ## is important (we must leave a clean plain volume behind) + self.__do_tests_with_luks() + self.__do_tests_with_plain() + + + def __do_tests_with_luks(self): + """Some tests with a luks partition. + """ + url = self.url + "volume_mount?weblang=en&device=%2Fdev%2F" + self.device + self.__format_luks() + ## mount the volume + self.cmd.go(url) + self.cmd.find('Open volume') + # the following _should_ work, but it does not - probably a parsing problem + # of twill - for now we use the direct link instead + #self.cmd.formvalue("mount", "pw", "foo") + #self.cmd.submit() + self.cmd.go(url + "&action=mount_luks&pw=foo") + self.cmd.find('Volume opened') + self.cmd.find('Data.Status.Plugins.volume_mount=active') + ## try to mount active volume + self.cmd.go(url + "&action=mount_luks&pw=foo") + self.cmd.find('The volume is already open.') + ## close the volume + # the following _should_ work, but it does not - probably a parsing problem + # of twill - for now we use the direct link instead + #self.cmd.submit() + self.cmd.go(url + "&action=umount") + self.cmd.find('Volume closed') + self.cmd.find('Data.Status.Plugins.volume_mount=passive') + ## try plain instead of luks + self.cmd.go(url + "&action=mount_plain") + self.cmd.find('Data.Status.Plugins.volume_mount=passive') + self.cmd.find('Unknown format') + ## no password supplied + self.cmd.go(url + "&action=mount_luks") + self.cmd.find('Data.Status.Plugins.volume_mount=passive') + self.cmd.find('Missing password') + ## wrong password supplied + self.cmd.go(url + "&action=mount_luks&pw=bar") + self.cmd.find('Data.Status.Plugins.volume_mount=passive') + self.cmd.find('Maybe you entered the wrong password?') + + + def __do_tests_with_plain(self): + """Some tests with a plain partition. + """ + url = self.url + "volume_mount?weblang=en&device=%2Fdev%2F" + self.device + self.__format_plain() + ## open plain volume + self.cmd.go(url) + self.cmd.find('Open volume') + # the following _should_ work, but it does not - probably a parsing problem + # of twill - for now we use the direct link instead + #self.cmd.submit() + self.cmd.go(url + "&action=mount_plain") + self.cmd.find('Volume opened') + self.cmd.find('Data.Status.Plugins.volume_mount=active') + ## try to mount active volume + self.cmd.go(url + "&action=mount_plain") + self.cmd.find('The volume is already open.') + ## umount + # the following _should_ work, but it does not - probably a parsing problem + # of twill - for now we use the direct link instead + #self.cmd.submit() + self.cmd.go(url + "&action=umount") + self.cmd.find('Volume closed') + self.cmd.find('Data.Status.Plugins.volume_mount=passive') + ## try to umount closed volume + self.cmd.go(url + "&action=umount") + self.cmd.find('The volume is already closed.') + + + def __format_luks(self): + """Format a luks partition. + """ + url = self.url + "volume_format_fs?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('select name="fs_type"') + # the following _should_ work, but it does not - probably a parsing problem + # of twill - for now we use the direct link instead + #self.cmd.formvalue("set_type", "fs_type", "linux") + #self.cmd.formvalue("set_type", "container_type", "luks") + #self.cmd.formvalue("set_type", "confirm", "1") + #self.cmd.submit() + self.cmd.go(url + "&fs_type=linux&container_type=luks&confirm=1&store=step1") + self.cmd.find('name="crypto_password"') + # the following _should_ work, but it does not - probably a parsing problem + # of twill - for now we use the direct link instead + #self.cmd.formvalue("set_luks", "crypto_password", "foo") + #self.cmd.formvalue("set_luks", "crypto_password2", "foo") + #self.cmd.submit() + self.cmd.go(url + "&store=step2&container_type=luks&fs_type=windows&" \ + + "crypto_password=foo&crypto_password2=foo") + self.cmd.find('Formatting is running') + self.__wait_until_ready() + + + def __format_plain(self): + """Format a plaintext partition. + """ + url = self.url + "volume_format_fs?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('select name="fs_type"') + # the following _should_ work, but it does not - probably a parsing problem + # of twill - for now we use the direct link instead + #self.cmd.formvalue("set_type", "fs_type", "windows") + #self.cmd.formvalue("set_type", "container_type", "plain") + #self.cmd.formvalue("set_type", "confirm", "1") + #self.cmd.submit() + self.cmd.go(url + "&store=step1&confirm=1&container_type=plain&fs_type=windows") + self.cmd.find('Formatting is running') + self.__wait_until_ready() + + + def __wait_until_ready(self): + """Wait until the device is ready again. + """ + import time + finish_time = time.time() + 120 + while self.__is_device_busy(): + if (time.time() > 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=%2Fdev%2F" + self.device + 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/plugins/volume_mount/volume_mount.cs b/v0.3/plugins/volume_mount/volume_mount.cs new file mode 100644 index 0000000..a7f8547 --- /dev/null +++ b/v0.3/plugins/volume_mount/volume_mount.cs @@ -0,0 +1,20 @@ +<>> + + + + + +

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

+ diff --git a/v0.3/plugins/volume_mount/volume_mount.py b/v0.3/plugins/volume_mount/volume_mount.py new file mode 100644 index 0000000..fc02a96 --- /dev/null +++ b/v0.3/plugins/volume_mount/volume_mount.py @@ -0,0 +1,128 @@ +# +# 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.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/plugins/volume_mount/volume_status.cs b/v0.3/plugins/volume_mount/volume_status.cs new file mode 100644 index 0000000..b0eb9cd --- /dev/null +++ b/v0.3/plugins/volume_mount/volume_status.cs @@ -0,0 +1,6 @@ + + + + + + diff --git a/v0.3/plugins/volume_mount/volume_umount.cs b/v0.3/plugins/volume_mount/volume_umount.cs new file mode 100644 index 0000000..dd11792 --- /dev/null +++ b/v0.3/plugins/volume_mount/volume_umount.cs @@ -0,0 +1,12 @@ +<>> + + + + + + +

+ +

+ + diff --git a/v0.3/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot b/v0.3/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot new file mode 100644 index 0000000..094f4de --- /dev/null +++ b/v0.3/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot @@ -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-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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/plugins/volume_props/intl/cs/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/cs/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/da/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/da/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/de/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/de/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..9221a8a --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..2491d60 --- /dev/null +++ b/v0.3/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po @@ -0,0 +1,14 @@ +msgid "" +msgstr "" + +#: 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/plugins/volume_props/intl/es/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/es/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/fi/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/fi/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/fr/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/fr/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/hu/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/hu/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/it/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/it/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/plugins/volume_props/intl/it/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-11-28 05:04+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/plugins/volume_props/intl/ja/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/ja/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/plugins/volume_props/intl/ja/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-11-28 05:04+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/plugins/volume_props/intl/nl/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/nl/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/pl/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/pl/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/plugins/volume_props/intl/pl/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-11-28 05:04+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/plugins/volume_props/intl/pt/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/pt/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/ru/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/ru/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/intl/sl/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/sl/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/plugins/volume_props/intl/sl/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-11-28 05:04+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/plugins/volume_props/intl/sv/cryptobox-server-feature-volume_props.po b/v0.3/plugins/volume_props/intl/sv/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..d4d2e7e --- /dev/null +++ b/v0.3/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-11-28 05:04+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/plugins/volume_props/language.hdf b/v0.3/plugins/volume_props/language.hdf new file mode 100644 index 0000000..7dd3a27 --- /dev/null +++ b/v0.3/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/plugins/volume_props/plugin_icon.gif b/v0.3/plugins/volume_props/plugin_icon.gif new file mode 100644 index 0000000..65b482b Binary files /dev/null and b/v0.3/plugins/volume_props/plugin_icon.gif differ diff --git a/v0.3/plugins/volume_props/plugin_icon.png b/v0.3/plugins/volume_props/plugin_icon.png new file mode 100644 index 0000000..20d6d59 Binary files /dev/null and b/v0.3/plugins/volume_props/plugin_icon.png differ diff --git a/v0.3/plugins/volume_props/unittests.py b/v0.3/plugins/volume_props/unittests.py new file mode 100644 index 0000000..f2c7281 --- /dev/null +++ b/v0.3/plugins/volume_props/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" + +import cryptobox.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_read_form(self): + url = self.url + "volume_props?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('Properties') + diff --git a/v0.3/plugins/volume_props/volume_properties.cs b/v0.3/plugins/volume_props/volume_properties.cs new file mode 100644 index 0000000..345acd1 --- /dev/null +++ b/v0.3/plugins/volume_props/volume_properties.cs @@ -0,0 +1,15 @@ + + +

+ + + + + + + + + + + + diff --git a/v0.3/plugins/volume_props/volume_props.py b/v0.3/plugins/volume_props/volume_props.py new file mode 100644 index 0000000..73d051e --- /dev/null +++ b/v0.3/plugins/volume_props/volume_props.py @@ -0,0 +1,86 @@ +# +# 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 + 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()] + ## 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 += "
" \ + 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 "TODO" + + + 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: + 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/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot b/v0.3/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot new file mode 100644 index 0000000..e196c7a --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sense.lab \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: utf-8\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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..2f6ce1b --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" + +#: Name +msgid "Rename volume" +msgstr "Rename volume" + +#: Link +msgid "Rename" +msgstr "Rename" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "Change the name of this volume" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "Change name" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "You can not rename a volume while it is active." + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate volume now" +msgstr "Deactivate 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 active." +msgstr "You may not rename a volume while it is active." + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "Changing of container's name failed" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "The supplied new name of the container was invalid. Please try again!" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "" +"Could not change the name of the container. Take a look at the log files for " +"details." +msgstr "" +"Could not change the name of the container. 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." + +#: 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." + +#: 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." + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "Close volume now" + +#: 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." + +#: Help.Rename +msgid "" +"Define a name for the volume. This should help you to manage multiple " +"volumes easily." +msgstr "" +"Define a name for the volume. This should help you to manage multiple " +"volumes easily." + +#~ msgid "action" +#~ msgstr "action" + +#~ msgid "umount" +#~ msgstr "umount" + +#~ msgid "redirect" +#~ msgstr "redirect" + +#~ msgid "volume_rename" +#~ msgstr "volume_rename" + +#~ msgid "volume_mount" +#~ msgstr "volume_mount" diff --git a/v0.3/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po b/v0.3/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..341e4c0 --- /dev/null +++ b/v0.3/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,102 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-11-28 05:04+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 "" + +#: Title.ChangeVolumeName +msgid "Change the name of this volume" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is active." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Deactivate 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 active." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of container's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the container was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the container. 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 "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +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 "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily." +msgstr "" diff --git a/v0.3/plugins/volume_rename/language.hdf b/v0.3/plugins/volume_rename/language.hdf new file mode 100644 index 0000000..5c15758 --- /dev/null +++ b/v0.3/plugins/volume_rename/language.hdf @@ -0,0 +1,57 @@ +Name = Rename volume +Link = Rename + +Title { + ChangeVolumeName = Change the name of this volume +} + + +Button { + ContainerNameSet = Change name +} + +Help.Rename = Define a name for the volume. This should help you to manage multiple volumes easily. + +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/plugins/volume_rename/unittests.py b/v0.3/plugins/volume_rename/unittests.py new file mode 100644 index 0000000..17c4db8 --- /dev/null +++ b/v0.3/plugins/volume_rename/unittests.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.web.testclass + +class unittests(cryptobox.web.testclass.WebInterfaceTestClass): + + def test_read_form(self): + """Check if the 'volume_rename' plugin works. + """ + url = self.url + "volume_rename?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('Change the name of this volume') + + + def test_rename(self): + """Try to rename the volume. + """ + 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. + """ + 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. + """ + save_name = self.__get_name() + ## first set the name to 'bar' + self.__set_name("bar") + mount_url = self.url + "volume_mount?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(mount_url) + name_url = self.url + "volume_rename?weblang=en&device=%2Fdev%2F" + self.device + 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. + """ + used_name = [ e.get_name() for e in self.cbox.get_container_list() + if e.get_device() != "/dev/%s" % 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=%2Fdev%2F" + self.device + 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=%2Fdev%2F" + self.device + 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/plugins/volume_rename/volume_rename.cs b/v0.3/plugins/volume_rename/volume_rename.cs new file mode 100644 index 0000000..8bb8e4b --- /dev/null +++ b/v0.3/plugins/volume_rename/volume_rename.cs @@ -0,0 +1,20 @@ + + +<>> + + + + + + + + +

+ + + + + +

+ + diff --git a/v0.3/plugins/volume_rename/volume_rename.py b/v0.3/plugins/volume_rename/volume_rename.py new file mode 100644 index 0000000..f7c6e3d --- /dev/null +++ b/v0.3/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/scripts/fetch_po_files.sh b/v0.3/scripts/fetch_po_files.sh new file mode 100755 index 0000000..d151ce5 --- /dev/null +++ b/v0.3/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/scripts/show_TODO.sh b/v0.3/scripts/show_TODO.sh new file mode 100755 index 0000000..a2904ec --- /dev/null +++ b/v0.3/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/scripts/update_english.sh b/v0.3/scripts/update_english.sh new file mode 100755 index 0000000..4a1fd77 --- /dev/null +++ b/v0.3/scripts/update_english.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +which potool &>/dev/null || { echo "potool not found - try 'apt-get install potool'" >&2; exit 1; } + +PROJ_DIR=$(cd "$(dirname $0)/.."; pwd) + +find "$PROJ_DIR/intl" "$PROJ_DIR/plugins" -type f -name \*.po | grep /intl/en/ | while read a + do potool -c -n scmt "$a" > "${a}.new" && mv "${a}.new" "$a" + done + diff --git a/v0.3/scripts/update_po_files.py b/v0.3/scripts/update_po_files.py new file mode 100755 index 0000000..c6b1d65 --- /dev/null +++ b/v0.3/scripts/update_po_files.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python2.4 +# +# 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 +# + + +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) + +LANGUAGE_FILE = 'language.hdf' +GETTEXT_DOMAIN = 'cryptobox-server' +DEFAULT_LANG = 'en' +LANG_DIR = 'intl' +MAIL_ADDRESS = 'translate@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".split(" ") + + +# --------------=-=-=- functions -=-=-=-------------------- + +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 ', 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) + 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) + ## 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/scripts/userdocexport.sh b/v0.3/scripts/userdocexport.sh new file mode 100755 index 0000000..299df52 --- /dev/null +++ b/v0.3/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/setup.py b/v0.3/setup.py new file mode 100644 index 0000000..19a4084 --- /dev/null +++ b/v0.3/setup.py @@ -0,0 +1,137 @@ +#!/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 +# + +## TODO: compilation of language files (po->mo) is not done here (only by debian/rules) + +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(pydir, 'share') +## doc dir +docdir = os.path.join(pydir, 'doc') +## 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)""" + 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)]: + mapping.append((os.path.join( + prefix, os.path.basename(lang_dir), 'LC_MESSAGES'), + [ 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') ])) + return mapping + + + +setup( + name = 'cryptobox-server', + version = '0.3.0', + description = 'webinterface for handling encrypted disks', + author = 'Lars Kruse', + author_email = 'devel@sumpfralle.de', + 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', 'lang', '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, ['doc/html']) + + getdatafiles(docdir, ['conf-examples', 'event-scripts', 'README', 'changelog', + 'LICENSE', 'copyright', 'doc/html', 'README.davfs', 'README.samba', + 'README.proxy', 'README.ssl' ]) + + get_language_files('share/locale'), + package_dir = { '': 'src' }, + scripts = [ 'bin/CryptoBoxWebserver', '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/src/cryptobox/__init__.py b/v0.3/src/cryptobox/__init__.py new file mode 100644 index 0000000..e3b7cf2 --- /dev/null +++ b/v0.3/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.0" + diff --git a/v0.3/src/cryptobox/core/__init__.py b/v0.3/src/cryptobox/core/__init__.py new file mode 100644 index 0000000..3b001bf --- /dev/null +++ b/v0.3/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/src/cryptobox/core/container.py b/v0.3/src/cryptobox/core/container.py new file mode 100644 index 0000000..1c4a1c4 --- /dev/null +++ b/v0.3/src/cryptobox/core/container.py @@ -0,0 +1,785 @@ +# +# 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. + """ + 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). + """ + 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 + """ + 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 get_device(self): + """Return the device name of the container + + e.g.: /dev/hdc1 + """ + return self.device + + + def get_type(self): + """Return the type (int) of this container. + """ + return self.cont_type + + + def is_mounted(self): + """Check if the container is currently mounted. + """ + 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) + """ + 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" + """ + 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' """ + 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. + """ + 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. + """ + 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. + """ + 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. + """ + 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 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() + ## for 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.start() + time.sleep(3) + ## if the thread exited very fast, then it failed + if not bg_task.isAlive(): + raise CBCreateError("Failed to initilize device: %s" % self.device) + + + 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("Failed to initilize device: %s" % self.device) + + + 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/src/cryptobox/core/exceptions.py b/v0.3/src/cryptobox/core/exceptions.py new file mode 100644 index 0000000..c3f0343 --- /dev/null +++ b/v0.3/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/src/cryptobox/core/main.py b/v0.3/src/cryptobox/core/main.py new file mode 100644 index 0000000..2482b88 --- /dev/null +++ b/v0.3/src/cryptobox/core/main.py @@ -0,0 +1,287 @@ +# +# 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(): + cont.umount() + ## save all settings + self.log.info("Storing local settings ...") + ## problems with storing are logged automatically + self.prefs.write() + if self.prefs.get_active_partition: + 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" + import types + allowed = self.prefs["Main"]["AllowedDevices"] + if type(allowed) == types.StringType: + allowed = [allowed] + for a_dev in allowed: + ## remove double dots and so on ... + real_device = os.path.realpath(devicename) + if a_dev and re.search('^' + a_dev, real_device): + return True + 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/src/cryptobox/core/settings.py b/v0.3/src/cryptobox/core/settings.py new file mode 100644 index 0000000..70f4e6d --- /dev/null +++ b/v0.3/src/cryptobox/core/settings.py @@ -0,0 +1,654 @@ +# +# 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 + + +class CryptoBoxSettings: + """Manage the various configuration files of the CryptoBox + """ + + 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" + + + def __init__(self, config_file=None): + 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) + 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.__read_misc_files() + + + def __read_misc_files(self): + 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 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] + 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() + if not conf_partitions: + self.log.error("no configuration partition found - you have to create " + + "it first") + return False + partition = conf_partitions[0] + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.prefs["Programs"]["super"], + self.prefs["Programs"]["CryptoBoxRootActions"], + "mount", + partition, + self.prefs["Locations"]["SettingsDir"]]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.log.error("failed to mount the configuration partition: %s" % partition) + self.log.error("output of mount: %s" % (stderr,)) + return False + self.log.info("configuration partition mounted: %s" % partition) + return True + + + def umount_partition(self): + """Umount the currently active configuration partition. + """ + if not self.get_active_partition(): + self.log.warn("umountConfigPartition: no configuration partition mounted") + return False + self.__read_misc_files() + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.prefs["Programs"]["super"], + self.prefs["Programs"]["CryptoBoxRootActions"], + "umount", + self.prefs["Locations"]["SettingsDir"]]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.log.error("failed to unmount the configuration partition") + self.log.error("output of mount: %s" % (stderr,)) + return False + self.log.info("configuration partition unmounted") + return True + + + def get_available_partitions(self): + """returns a sequence of found config partitions""" + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + args = [ + self.prefs["Programs"]["blkid"], + "-c", os.path.devnull, + "-t", "LABEL=%s" % self.prefs["Main"]["ConfigVolumeLabel"] ]) + (output, error) = proc.communicate() + if output: + return [e.strip().split(":", 1)[0] for e in output.splitlines()] + else: + return [] + + + 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) + 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"], self.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: + plugin_conf = configobj.ConfigObj(plugin_conf_file, configspec=plugin_rules, + create_empty=True) + ## validate and convert values according to the spec + plugin_conf.validate(validate.Validator()) + ## check if plugin_conf_file file was created successfully? + if not os.path.exists(plugin_conf_file): + raise CBEnvironmentError( + "failed to create plugin configuration file (%s)" % plugin_conf_file) + return plugin_conf + + + def __get_volumes_database(self): + """Load the volume database file if it exists. + """ + try: + try: + conf_file = os.path.join( + self.prefs["Locations"]["SettingsDir"], self.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: + conf = configobj.ConfigObj(conf_file, create_empty=True) + ## check if conf_file file was created successfully? + if not os.path.exists(conf_file): + raise CBEnvironmentError( + "failed to create volume database file (%s)" % 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"], self.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: + user_db = configobj.ConfigObj(user_db_file, configspec=user_db_rules, + create_empty=True) + ## validate and set default value for "admin" user + user_db.validate(validate.Validator()) + ## check if user_db file was created successfully? + if not os.path.exists(user_db_file): + raise CBEnvironmentError( + "failed to create user database file (%s)" % user_db_file) + ## 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 self.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) + """ + + 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. + """ + 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: + self.handleError(record) + diff --git a/v0.3/src/cryptobox/core/tools.py b/v0.3/src/cryptobox/core/tools.py new file mode 100644 index 0000000..1aebd4e --- /dev/null +++ b/v0.3/src/cryptobox/core/tools.py @@ -0,0 +1,246 @@ +# +# 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"): + p_parent = re.sub('[1-9]?[0-9]$', '', p_device) + if p_parent == p_device: + if [e for e in ret_list + if re.search('^' + p_parent + '[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. + """ + 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 "%sGB" % size/1024 + else: + return "%sMB" % size + diff --git a/v0.3/src/cryptobox/plugins/__init__.py b/v0.3/src/cryptobox/plugins/__init__.py new file mode 100644 index 0000000..eedeafc --- /dev/null +++ b/v0.3/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/src/cryptobox/plugins/base.py b/v0.3/src/cryptobox/plugins/base.py new file mode 100644 index 0000000..f9eb411 --- /dev/null +++ b/v0.3/src/cryptobox/plugins/base.py @@ -0,0 +1,237 @@ +# $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 + + +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.gif" + + ## fallback icon file (in the common plugin directory) + fallback_icon_filename = "plugin_icon_unknown.gif" + + + def __init__(self, cbox, plugin_dir, site_class=None): + self.cbox = cbox + self.hdf = {} + self.plugin_dir = plugin_dir + self.hdf_prefix = "Data.Plugins.%s." % self.get_name() + self.site = site_class + + + + 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 setup(self): + """Any plugin that wants to define bootup actions may override this. + """ + pass + + + def cleanup(self): + """Any plugin that wants to define shutdown actions may override this. + """ + pass + + + @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 + if (image is None) or (not re.match(r'[\w\-\.]*$', image)): + plugin_icon_file = os.path.join(self.plugin_dir, self.default_icon_filename) + else: + plugin_icon_file = os.path.join(self.plugin_dir, image) + if not os.access(plugin_icon_file, os.R_OK): + plugin_icon_file = os.path.join( + self.cbox.prefs["Locations"]["PluginDir"], self.fallback_icon_filename) + return cherrypy.lib.cptools.serveFile(plugin_icon_file) + + + 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)) + + + def is_auth_required(self): + """check if this plugin requires authentication + first step: check plugin configuration + second step: check default value of plugin + """ + try: + if self.cbox.prefs.plugin_conf[self.get_name()]["requestAuth"] is None: + return self.request_auth + if self.cbox.prefs.plugin_conf[self.get_name()]["requestAuth"]: + return True + else: + return False + except KeyError: + 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 + """ + fallback = bool(self.plugin_visibility) + try: + if self.cbox.prefs.plugin_conf[self.get_name()]["visibility"] is None: + return fallback + return bool(self.cbox.prefs.plugin_conf[self.get_name()]["visibility"]) + except KeyError: + return fallback + + + def get_rank(self): + """check the rank of this plugin + first step: check plugin configuration + second step: check default value of plugin + """ + try: + if self.cbox.prefs.plugin_conf[self.get_name()]["rank"] is None: + return self.rank + return int(self.cbox.prefs.plugin_conf[self.get_name()]["rank"]) + except (KeyError, TypeError): + return self.rank + + + def get_visibility(self): + """Check which visibility flags of the feature are set. + """ + try: + if self.cbox.prefs.plugin_conf[self.get_name()]["visibility"] is None: + return self.plugin_visibility[:] + return self.cbox.prefs.plugin_conf[self.get_name()]["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/src/cryptobox/plugins/manage.py b/v0.3/src/cryptobox/plugins/manage.py new file mode 100644 index 0000000..78c7916 --- /dev/null +++ b/v0.3/src/cryptobox/plugins/manage.py @@ -0,0 +1,110 @@ +# $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(os.path.basename(plfile)[:-3])) + return plist + + + def __get_plugin_class(self, name): + """Return a instance object of the give feature. + """ + import imp + for plfile in self.__get_plugin_files(): + if 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) + else: + return None + + + 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( + "skipped 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/src/cryptobox/tests/__init__.py b/v0.3/src/cryptobox/tests/__init__.py new file mode 100644 index 0000000..afc7ca5 --- /dev/null +++ b/v0.3/src/cryptobox/tests/__init__.py @@ -0,0 +1,7 @@ +"""Some unittests for the CryptoBox. +""" + +__revision__ = "$Id" + +__all__ = [ 'test.cryptobox', 'test.cryptoboxtools', 'test.plugins', 'test.websites' ] + diff --git a/v0.3/src/cryptobox/tests/test.cryptobox.py b/v0.3/src/cryptobox/tests/test.cryptobox.py new file mode 100755 index 0000000..aad5383 --- /dev/null +++ b/v0.3/src/cryptobox/tests/test.cryptobox.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python2.4 +# +# 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 unittest +import sys +import cryptobox.core.main +from cryptobox.core.exceptions import * +import cryptobox.core.settings +import os + +class CryptoBoxDeviceTests(unittest.TestCase): + """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/loop")) + self.assertTrue(self.cb.is_device_allowed("/dev/loop1")) + self.assertTrue(self.cb.is_device_allowed("/dev/loop/urgd")) + 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("/")) + + +class CryptoBoxConfigTests(unittest.TestCase): + '''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): + '''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) + + + 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() + + +if __name__ == "__main__": + unittest.main() + diff --git a/v0.3/src/cryptobox/tests/test.cryptoboxtools.py b/v0.3/src/cryptobox/tests/test.cryptoboxtools.py new file mode 100755 index 0000000..f8eb101 --- /dev/null +++ b/v0.3/src/cryptobox/tests/test.cryptoboxtools.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python2.4 +# +# 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 unittest +import cryptobox.core.tools as cbx_tools +import os + +## use /dev/ubd? if possible - otherwise /dev/hd? +## so it will be possible to use these tests inside of an uml +for d in ["ubdb", "ubda", "udbc", "ubdd", "hdb", "hda", "hdc", "hdd"]: + if os.path.exists("/dev/%s1" % d): + device = d + break +else: + device = "hda" + + + +class CryptoBoxToolsTests(unittest.TestCase): + """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(device) == "/dev/%s" % 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("/dev/%s" % device, "/dev/%s1" % device)) + self.assertFalse(func("/dev/%s" % device, "/dev/%s" % device)) + self.assertFalse(func("/dev/%s1" % device, "/dev/%s" % device)) + self.assertFalse(func("/dev/%s1" % device, "/dev/%s1" % device)) + self.assertFalse(func("/dev/%s" % device, "/dev/hde1")) + self.assertFalse(func(None, "/dev/%s1" % device)) + self.assertFalse(func("/dev/%s" % device, None)) + self.assertFalse(func(None, "")) + self.assertFalse(func("loop0", "loop1")) + + +if __name__ == "__main__": + unittest.main() + diff --git a/v0.3/src/cryptobox/tests/test.plugins.py b/v0.3/src/cryptobox/tests/test.plugins.py new file mode 100755 index 0000000..d9172fa --- /dev/null +++ b/v0.3/src/cryptobox/tests/test.plugins.py @@ -0,0 +1,58 @@ +#!/usr/bin/python2.4 +# +# 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" + +import unittest +import cryptobox.plugins.manage + +class CheckForUndefinedTestCases(unittest.TestCase): + """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() + +if __name__ == "__main__": + unittest.main() diff --git a/v0.3/src/cryptobox/tests/test.websites.py b/v0.3/src/cryptobox/tests/test.websites.py new file mode 100755 index 0000000..3a6ab6f --- /dev/null +++ b/v0.3/src/cryptobox/tests/test.websites.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python2.4 +# +# 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" + +import unittest + +## this makes assertRaises shorter +from twill.errors import * +from mechanize import BrowserStateError, LinkNotFoundError + +## import the module of the common super class of all web interface test classes +import cryptobox.web.testclass + + + +class WebServer(cryptobox.web.testclass.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(cryptobox.web.testclass.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") + + +if __name__ == "__main__": + unittest.main() + diff --git a/v0.3/src/cryptobox/web/__init__.py b/v0.3/src/cryptobox/web/__init__.py new file mode 100644 index 0000000..f524565 --- /dev/null +++ b/v0.3/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/src/cryptobox/web/dataset.py b/v0.3/src/cryptobox/web/dataset.py new file mode 100644 index 0000000..4823098 --- /dev/null +++ b/v0.3/src/cryptobox/web/dataset.py @@ -0,0 +1,227 @@ +# +# 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, plugins): + super(WebInterfaceDataset, self).__init__() + self.prefs = prefs + self.cbox = cbox + self.__set_config_values() + self.plugins = plugins + 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 + pass + + 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: + (size, avail, used) = container.get_capacity() + percent = used / size + 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.plugins: + entry_name = "Settings.PluginList." + plugin.get_name() + ## first: remove all existing settings of this plugin + for key in self.keys(): + if key.startswith(entry_name): + del self[key] + lang_data = plugin.get_language_data() + self[entry_name] = plugin.get_name() + self[entry_name + ".Name"] = lang_data.getValue("Name", plugin.get_name()) + self[entry_name + ".Link"] = lang_data.getValue("Link", 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] + for (num, dpath) in enumerate(self.prefs["Locations"]["PluginDir"]): + self["Settings.PluginDir.%d" % num] = dpath + ## store the first directory in this settings variable - backward compatibility + self["Settings.PluginDir"] = self.prefs["Locations"]["PluginDir"][0] + self["Settings.SettingsDir"] = self.prefs["Locations"]["SettingsDir"] + diff --git a/v0.3/src/cryptobox/web/languages.py b/v0.3/src/cryptobox/web/languages.py new file mode 100644 index 0000000..e55a2f1 --- /dev/null +++ b/v0.3/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/src/cryptobox/web/sites.py b/v0.3/src/cryptobox/web/sites.py new file mode 100644 index 0000000..c96752f --- /dev/null +++ b/v0.3/src/cryptobox/web/sites.py @@ -0,0 +1,640 @@ +# +# 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""" + + 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 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 + self.icons = None + self.__plugin_manager = None + 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"][:] + self.setup() + + + def setup(self): + """Prepare the webinterface. + """ + self.cbox.setup() + for plugin in self.__plugin_manager.get_plugins(): + if plugin: + plugin.setup() + + + def cleanup(self): + """Shutdown the webinterface safely. + """ + for plugin in self.__plugin_manager.get_plugins(): + if plugin: + plugin.cleanup() + 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.get_plugins()) + ## publish plugin icons + self.icons = PluginIconHandler(self.__plugin_manager) + self.icons.exposed = True + ## 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 + """ + self.__plugin_manager = cryptobox.plugins.manage.PluginManager( + self.cbox, self.cbox.prefs["Locations"]["PluginDir"], self) + for plugin in self.__plugin_manager.get_plugins(): + if not plugin: + continue + plname = plugin.get_name() + ## 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 do not check this here, nasty side effects may occour ... + try: + prev_obj = getattr(self, plname) + if not callable(prev_obj) \ + or not prev_obj.exposed: + self.cbox.log.error("Skipped feature (%s) as its name" + + " conflicts with a local variable - see" + + " module cryptobox.web.sites" % plname) + ## skip this plugin + continue + except (NameError, AttributeError): + ## an attribute with the same name does not exist -> ok + 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 this 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) + ## remove the plugin, if it was active before + setattr(self, plname, None) + + + ## 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 response 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 + self.__dataset.set_plugin_data() + ## default page for non-volume plugins is the disk selection + if not next_template: + next_template = { "plugin":"disks", "values":{} } + ## 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() + return "test passed" + + + @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, ... + """ + ## 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(): + self.__dataset["Data.EnvironmentWarning"] = "ReadOnlyConfig" + #TODO: turn this on soon (add "not") - for now it is annoying + if not self.__check_https(): + self.__dataset["Data.EnvironmentWarning"] = "NoSSL" + + + def __check_https(self): + """check the request scheme + """ + 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 + ## this arbitrarily chosen header must be documented in README.proxy + #TODO: check http://jamesthornton.com/writing/openacs-pound.html for this + if cherrypy.request.headers.has_key("X-SSL-Request") \ + and (cherrypy.request.headers["X-SSL-Request"] == "1"): + return True + ## plaintext connection + return False + + + 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) + ## 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)): + 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.debug( + "current language preference: %s" % str(lang_order)) + self.lang_order = lang_order + self.__dataset["Settings.Language"] = lang_order[0] + 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/src/cryptobox/web/testclass.py b/v0.3/src/cryptobox/web/testclass.py new file mode 100644 index 0000000..f844564 --- /dev/null +++ b/v0.3/src/cryptobox/web/testclass.py @@ -0,0 +1,143 @@ +# +# 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 +# + +""" +super class of all web interface unittests for the cryptobox + +just inherit this class and add some test functions +""" + +__revision__ = "$Id" + +import unittest +import twill +import cherrypy +import cryptobox.web.sites +import os + + +## 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" + + +class WebInterfaceTestClass(unittest.TestCase): + '''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 + one way to manually run twill code is through the python + interpreter commandline e.g.: + + import twill + twill.shell.main() + go http://localhost:8080 + find "my very special html content" + help + ''' + + def setUp(self): + '''configures the cherrypy server that it works nice with twill + ''' + 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( + "cryptobox-unittests.conf") + 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() + ## 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 an uml + self.blockdevice, self.device = self.__find_test_device() + ## umount the device (just to be sure) + url = self.url + "volume_mount?weblang=en&device=%2Fdev%2F" + self.device + self.register_auth(url) + self.cmd.go(url + "&action=umount") + + + + 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() + + + def __get_soup(): + browser = twill.commands.get_browser() + soup = BeautifulSoup(browser.get_html()) + return soup + + + def __find_test_device(self): + """Search for a valid test device - the data will get lost ... + """ + for dev in ["ubdb", "loop", "ubda", "udbc", "ubdd"]: + if os.path.exists("/dev/%s1" % dev) \ + and not self.__is_config_partition("/dev/%s1" % dev): + return (dev, dev + "1") + if os.path.exists("/dev/%s2" % dev) \ + and not self.__is_config_partition("/dev/%s2" % dev): + return (dev, dev + "2") + else: + raise Exception, "no valid device for testing found" + + + def __is_config_partition(self, device): + """Check if the device is a configuration partition. + """ + import subprocess + 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 register_auth(self, url, user="admin", password="admin"): + self.cmd.add_auth("CryptoBox", url, user, password) + diff --git a/v0.3/src/pylintrc b/v0.3/src/pylintrc new file mode 100644 index 0000000..bdcf546 --- /dev/null +++ b/v0.3/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/stuff/commit-policy.txt b/v0.3/stuff/commit-policy.txt new file mode 100644 index 0000000..43b4362 --- /dev/null +++ b/v0.3/stuff/commit-policy.txt @@ -0,0 +1,11 @@ +The usual steps before commit: + - scripts/update_po_files.py + - scripts/update_english.sh + - ../tags/make-deb.sh 0.2.$VERSION . + - 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 + diff --git a/v0.3/stuff/cron-cryptobox b/v0.3/stuff/cron-cryptobox new file mode 100644 index 0000000..67d9661 --- /dev/null +++ b/v0.3/stuff/cron-cryptobox @@ -0,0 +1 @@ +* * * * * root [ -e /usr/lib/cryptobox/cbox-manage.sh ] && /usr/lib/cryptobox/check_smb_idle.sh diff --git a/v0.3/stuff/debian-package.txt b/v0.3/stuff/debian-package.txt new file mode 100644 index 0000000..66cedeb --- /dev/null +++ b/v0.3/stuff/debian-package.txt @@ -0,0 +1,74 @@ +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) 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) + + +4) 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/stuff/known_problems b/v0.3/stuff/known_problems new file mode 100644 index 0000000..5c6a830 --- /dev/null +++ b/v0.3/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/stuff/pootle-updates.txt b/v0.3/stuff/pootle-updates.txt new file mode 100644 index 0000000..020edde --- /dev/null +++ b/v0.3/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/stuff/uml-howto.txt b/v0.3/stuff/uml-howto.txt new file mode 100644 index 0000000..908b499 --- /dev/null +++ b/v0.3/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/templates/access_denied.cs b/v0.3/templates/access_denied.cs new file mode 100644 index 0000000..2b1ec9d --- /dev/null +++ b/v0.3/templates/access_denied.cs @@ -0,0 +1,6 @@ +

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

+ + +
+ + +

+ + +

+ +

+ + + + + + + + + + + +MESSAGES WERE NOT HANDLED PROPERLY - PLEASE FIX THIS! + + + + diff --git a/v0.3/templates/header.cs b/v0.3/templates/header.cs new file mode 100644 index 0000000..552ef52 --- /dev/null +++ b/v0.3/templates/header.cs @@ -0,0 +1,91 @@ + + + + + + + + CryptoBox + + + + + + + + + + + +

+ + + +
+ + + + + + + + + + + + 0 + ?>
+ + +
+ diff --git a/v0.3/templates/language.hdf b/v0.3/templates/language.hdf new file mode 100644 index 0000000..6635146 --- /dev/null +++ b/v0.3/templates/language.hdf @@ -0,0 +1,109 @@ +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 = Disk is busy + Text = This disk 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 + } +} + + +EnvironmentWarning { + + ReadOnlyConfig { + Text = Read-only setup detected - probably you should create a configuration partition. + Link.Text = Initialize partition + Link.Rel = partition + } + + NoSSL { + Text = The connection is not encrypted - passwords can be easily intercepted. + Link.Text = Use encrypted connection + Link.Prot = https + } + } +} diff --git a/v0.3/templates/macros.cs b/v0.3/templates/macros.cs new file mode 100644 index 0000000..4b82f22 --- /dev/null +++ b/v0.3/templates/macros.cs @@ -0,0 +1,223 @@ + 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 + ?&= +
+ diff --git a/v0.3/templates/main.cs b/v0.3/templates/main.cs new file mode 100644 index 0000000..0c5e3d9 --- /dev/null +++ b/v0.3/templates/main.cs @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/v0.3/templates/show_volume_footer.cs b/v0.3/templates/show_volume_footer.cs new file mode 100644 index 0000000..301725b --- /dev/null +++ b/v0.3/templates/show_volume_footer.cs @@ -0,0 +1,3 @@ + + + diff --git a/v0.3/templates/show_volume_header.cs b/v0.3/templates/show_volume_header.cs new file mode 100644 index 0000000..90fb266 --- /dev/null +++ b/v0.3/templates/show_volume_header.cs @@ -0,0 +1,26 @@ + + +
+ "> + +

+
+ + + + + + + +
 
+ +
+ + + + diff --git a/v0.3/templates/volume_busy.cs b/v0.3/templates/volume_busy.cs new file mode 100644 index 0000000..0222bca --- /dev/null +++ b/v0.3/templates/volume_busy.cs @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/v0.3/templates/volume_plugins.cs b/v0.3/templates/volume_plugins.cs new file mode 100644 index 0000000..aef6ab1 --- /dev/null +++ b/v0.3/templates/volume_plugins.cs @@ -0,0 +1,36 @@ + + + + + + + + + 0 ?> + mark it + - the rest: mark 'volume_props' ?> + class="volume_plugin_active"class="volume_plugin_passive">" alt="icon: " />   + + diff --git a/v0.3/www-data/antlogo100px.png b/v0.3/www-data/antlogo100px.png new file mode 100644 index 0000000..454709d Binary files /dev/null and b/v0.3/www-data/antlogo100px.png differ diff --git a/v0.3/www-data/antlogo100px_green.png b/v0.3/www-data/antlogo100px_green.png new file mode 100644 index 0000000..fd1d2d9 Binary files /dev/null and b/v0.3/www-data/antlogo100px_green.png differ diff --git a/v0.3/www-data/antlogo100px_red.png b/v0.3/www-data/antlogo100px_red.png new file mode 100644 index 0000000..18e33d4 Binary files /dev/null and b/v0.3/www-data/antlogo100px_red.png differ diff --git a/v0.3/www-data/backg.gif b/v0.3/www-data/backg.gif new file mode 100644 index 0000000..8e37ccc Binary files /dev/null and b/v0.3/www-data/backg.gif differ diff --git a/v0.3/www-data/background_frame_corner.png b/v0.3/www-data/background_frame_corner.png new file mode 100644 index 0000000..2d0da07 Binary files /dev/null and b/v0.3/www-data/background_frame_corner.png differ diff --git a/v0.3/www-data/background_frame_top.png b/v0.3/www-data/background_frame_top.png new file mode 100644 index 0000000..a44d70b Binary files /dev/null and b/v0.3/www-data/background_frame_top.png differ diff --git a/v0.3/www-data/backpane_left.png b/v0.3/www-data/backpane_left.png new file mode 100644 index 0000000..2d7cc01 Binary files /dev/null and b/v0.3/www-data/backpane_left.png differ diff --git a/v0.3/www-data/backpane_left_top.gif b/v0.3/www-data/backpane_left_top.gif new file mode 100644 index 0000000..385fef0 Binary files /dev/null and b/v0.3/www-data/backpane_left_top.gif differ diff --git a/v0.3/www-data/backpane_left_top.png b/v0.3/www-data/backpane_left_top.png new file mode 100644 index 0000000..3611dc7 Binary files /dev/null and b/v0.3/www-data/backpane_left_top.png differ diff --git a/v0.3/www-data/backpane_right.png b/v0.3/www-data/backpane_right.png new file mode 100644 index 0000000..17b3337 Binary files /dev/null and b/v0.3/www-data/backpane_right.png differ diff --git a/v0.3/www-data/backpane_right_top.gif b/v0.3/www-data/backpane_right_top.gif new file mode 100644 index 0000000..8e7c5ca Binary files /dev/null and b/v0.3/www-data/backpane_right_top.gif differ diff --git a/v0.3/www-data/backpane_right_top.png b/v0.3/www-data/backpane_right_top.png new file mode 100644 index 0000000..0a5094e Binary files /dev/null and b/v0.3/www-data/backpane_right_top.png differ diff --git a/v0.3/www-data/backpane_top.png b/v0.3/www-data/backpane_top.png new file mode 100644 index 0000000..2d9446b Binary files /dev/null and b/v0.3/www-data/backpane_top.png differ diff --git a/v0.3/www-data/cbx-text-logo1.png b/v0.3/www-data/cbx-text-logo1.png new file mode 100644 index 0000000..84214ec Binary files /dev/null and b/v0.3/www-data/cbx-text-logo1.png differ diff --git a/v0.3/www-data/cbx-text-logo2.png b/v0.3/www-data/cbx-text-logo2.png new file mode 100644 index 0000000..1d1b9dc Binary files /dev/null and b/v0.3/www-data/cbx-text-logo2.png differ diff --git a/v0.3/www-data/cryptobox.css b/v0.3/www-data/cryptobox.css new file mode 100644 index 0000000..626d636 --- /dev/null +++ b/v0.3/www-data/cryptobox.css @@ -0,0 +1,499 @@ +body { + text-align: center; + 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; + } + +#main h1, h2, h3, legend { + font-family: sans-serif, arial; + font-weight: normal; + letter-spacing: 0.05em; + color: #acacac; + font-variant: small-caps; + 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); + } + +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 -=-=-=-------- */ + +#words div.message { + text-align: left; + margin: 20px; + padding: 0 10px 0 0; + border: 1px solid #bbb; + color: #5e5e5e; + font-size: 0.9em; + } + +#words div.message table { + /* without this width, the link will start immeadiately after + * the message - this would be quite ugly + * of course: IE breaks is a bit, as 100% are relative to the whole + * screen again - but the problem is just a missing right border of + * the environment warning box - hard to notice */ + width: 100%; +} + +#words div.message td.text h1 { + font-size: 1.5em; + padding: 0px; + margin: 2px 0 2px 0; + } + +#words div.message td.message_symbol img { + width: 32px; + height: 32px; + padding: 5px 20px 5px 10px; + border: none; + vertical-align: middle; + } + +#words div.message td.link { + text-align: right; +} + +#words div.message td.link a { + color: #87ae3c; + font-weight: 600; + font-style: italic; + text-decoration: none; +} + +#words div.message td.link a:hover { + text-decoration: underline; +} + +/* -------=-=-=- environmental messages -=-=-=-------- */ + +#EnvironmentWarning div.message { + text-align: left; + margin: 0 2px 8px 2px; + padding: 0 5px 0 0; + border: 1px solid #bbb; + color: #5e5e5e; + font-size: 0.9em; + background-color: #eea; + } + +#EnvironmentWarning div.message table { + /* without this width, the link will start immeadiately after + * the message - this would be quite ugly + * of course: IE breaks is a bit, as 100% are relative to the whole + * screen again - but the problem is just a missing right border of + * the environment warning box - hard to notice */ + width: 100%; +} + +#EnvironmentWarning div.message td.message_symbol img { + width: 16px; + height: 16px; + padding: 2px; + border: none; + vertical-align: middle; + } + +#EnvironmentWarning div.message td.link { + text-align: right; +} + +#EnvironmentWarning div.message td.link a { + color: #55b; + font-style: italic; + text-decoration: none; +} + +#EnvironmentWarning div.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 { + color: #5e5e5e; + background-color: #ACE149; + border: 1px solid #5e5e5e; + font-size: 0.8em; + font-weight: bold; + cursor: pointer; + margin: 2px 10px 2px 10px; + } + +button:hover { + color: #5e5e5e; + background-color: #D0F0A0; + border: 1px solid #ACE149; + font-size: 0.8em; + font-weight: bold; + cursor: pointer; + } + +#words form label { + min-width: 20em; + } + +#words form p { + text-align: center; + } + +/* -------------=-=-=- main menu -=-=-=-------------- */ + +div#main_menu { + position: absolute; + float: left; + right: 5px; + left: 5px; + width: 130px; + } + + +/* ------------=-=-=- documentation -=-=-=------------- */ + +#doc ol,ul li { + text-align: left; + margin-left: 20px; + } + +#doc dl dt { + text-align: left; + margin-left: 20px; + font-style: italic; + } + +#doc h1 { + padding-top: 25px; +} + +#doc h2 { + padding-top: 20px; +} + +#doc h3 { + padding-top: 10px; + } + + +/* -------------=-=-=- plugin icons -=-=-=--------------- */ + + +div.plugin_menu, div.plugin_system, div.plugin_volume, div.volume { + text-align: center; + margin: 10px 15px 10px 15px; + vertical-align: center; + padding: none; +} + +div.plugin_menu img, div.plugin_system img, div.plugin_volume 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_orange_100.png); +} + +div.plugin_menu img { + width: 64px; + height: 64px; +} + +div.plugin_system { + float: left; + width: 64px; + /* 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_volume { + width: 48px; +} + +div.plugin_volume img { + width: 32px; + height: 32px; +} + +div.volume { + /* FIXME: float-left breaks the background image in firefox */ + float: left; + width: 64px; +} + +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: #b8f0ff; + border-color: #2EB8BC; + border-width: 1px; + border-style: solid; + padding: 4px; + margin: 3px 0 3px 0; +} + + +/* --------------=-=-=- 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 { + margin: 10px 0 10px 0; + padding: 3%; +} + +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_active3.png); +} + +table#volume_area td.volume_plugin_passive { + background-image: url(register_passive2.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; +} + +table#pane { + border: none; + border-collapse: collapse; + /* mozilla interpretes this relatively to the content part of the page + * the internet explorer uses it as absolute within the whole page + * 80% should be a good compromise to avoid scrollbars for 1024x768 in ie + * and to get a constant page width - otherwise it would dynamically change */ + width: 80%; +} + +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 1% 1% 1%; +} + +td#pane_right { + width: 6px; + background-image: url(backpane_right.png); + background-position: right top; + background-repeat: no-repeat; +} + diff --git a/v0.3/www-data/dialog-error_tango.gif b/v0.3/www-data/dialog-error_tango.gif new file mode 100644 index 0000000..80be515 Binary files /dev/null and b/v0.3/www-data/dialog-error_tango.gif differ diff --git a/v0.3/www-data/dialog-error_tango.png b/v0.3/www-data/dialog-error_tango.png new file mode 100644 index 0000000..6de10d7 Binary files /dev/null and b/v0.3/www-data/dialog-error_tango.png differ diff --git a/v0.3/www-data/dialog-information_tango.gif b/v0.3/www-data/dialog-information_tango.gif new file mode 100644 index 0000000..1b99d1a Binary files /dev/null and b/v0.3/www-data/dialog-information_tango.gif differ diff --git a/v0.3/www-data/dialog-information_tango.png b/v0.3/www-data/dialog-information_tango.png new file mode 100644 index 0000000..63be7c3 Binary files /dev/null and b/v0.3/www-data/dialog-information_tango.png differ diff --git a/v0.3/www-data/dialog-warning_tango.gif b/v0.3/www-data/dialog-warning_tango.gif new file mode 100644 index 0000000..dc0d7fd Binary files /dev/null and b/v0.3/www-data/dialog-warning_tango.gif differ diff --git a/v0.3/www-data/dialog-warning_tango.png b/v0.3/www-data/dialog-warning_tango.png new file mode 100644 index 0000000..bac45dd Binary files /dev/null and b/v0.3/www-data/dialog-warning_tango.png differ diff --git a/v0.3/www-data/disc_gray.png b/v0.3/www-data/disc_gray.png new file mode 100644 index 0000000..93aae33 Binary files /dev/null and b/v0.3/www-data/disc_gray.png differ diff --git a/v0.3/www-data/disc_green.png b/v0.3/www-data/disc_green.png new file mode 100644 index 0000000..0d0c483 Binary files /dev/null and b/v0.3/www-data/disc_green.png differ diff --git a/v0.3/www-data/disc_red.png b/v0.3/www-data/disc_red.png new file mode 100644 index 0000000..699336a Binary files /dev/null and b/v0.3/www-data/disc_red.png differ diff --git a/v0.3/www-data/evil_stick.png b/v0.3/www-data/evil_stick.png new file mode 100644 index 0000000..dc4ffeb Binary files /dev/null and b/v0.3/www-data/evil_stick.png differ diff --git a/v0.3/www-data/favicon.ico b/v0.3/www-data/favicon.ico new file mode 100644 index 0000000..85660ef Binary files /dev/null and b/v0.3/www-data/favicon.ico differ diff --git a/v0.3/www-data/footer_line.png b/v0.3/www-data/footer_line.png new file mode 100644 index 0000000..9bb7dec Binary files /dev/null and b/v0.3/www-data/footer_line.png differ diff --git a/v0.3/www-data/icon_background_active.png b/v0.3/www-data/icon_background_active.png new file mode 100644 index 0000000..a930c0d Binary files /dev/null and b/v0.3/www-data/icon_background_active.png differ diff --git a/v0.3/www-data/icon_background_active_060.png b/v0.3/www-data/icon_background_active_060.png new file mode 100644 index 0000000..0b43fb1 Binary files /dev/null and b/v0.3/www-data/icon_background_active_060.png differ diff --git a/v0.3/www-data/icon_background_active_080.png b/v0.3/www-data/icon_background_active_080.png new file mode 100644 index 0000000..f5bb343 Binary files /dev/null and b/v0.3/www-data/icon_background_active_080.png differ diff --git a/v0.3/www-data/icon_background_active_100.png b/v0.3/www-data/icon_background_active_100.png new file mode 100644 index 0000000..a6d63dc Binary files /dev/null and b/v0.3/www-data/icon_background_active_100.png differ diff --git a/v0.3/www-data/icon_background_active_256.png b/v0.3/www-data/icon_background_active_256.png new file mode 100644 index 0000000..0203a07 Binary files /dev/null and b/v0.3/www-data/icon_background_active_256.png differ diff --git a/v0.3/www-data/icon_background_active_orange_100.png b/v0.3/www-data/icon_background_active_orange_100.png new file mode 100644 index 0000000..9e8b993 Binary files /dev/null and b/v0.3/www-data/icon_background_active_orange_100.png differ diff --git a/v0.3/www-data/icon_background_passive_060.png b/v0.3/www-data/icon_background_passive_060.png new file mode 100644 index 0000000..11aa83b Binary files /dev/null and b/v0.3/www-data/icon_background_passive_060.png differ diff --git a/v0.3/www-data/icon_background_passive_080.png b/v0.3/www-data/icon_background_passive_080.png new file mode 100644 index 0000000..9cee0c2 Binary files /dev/null and b/v0.3/www-data/icon_background_passive_080.png differ diff --git a/v0.3/www-data/icon_background_passive_100.png b/v0.3/www-data/icon_background_passive_100.png new file mode 100644 index 0000000..9c1326e Binary files /dev/null and b/v0.3/www-data/icon_background_passive_100.png differ diff --git a/v0.3/www-data/icon_background_passive_256.png b/v0.3/www-data/icon_background_passive_256.png new file mode 100644 index 0000000..64faed6 Binary files /dev/null and b/v0.3/www-data/icon_background_passive_256.png differ diff --git a/v0.3/www-data/icon_get_help.gif b/v0.3/www-data/icon_get_help.gif new file mode 100644 index 0000000..e5b5ab7 Binary files /dev/null and b/v0.3/www-data/icon_get_help.gif differ diff --git a/v0.3/www-data/icon_get_help.png b/v0.3/www-data/icon_get_help.png new file mode 100644 index 0000000..08e4b79 Binary files /dev/null and b/v0.3/www-data/icon_get_help.png differ diff --git a/v0.3/www-data/list.gif b/v0.3/www-data/list.gif new file mode 100644 index 0000000..fe15cc9 Binary files /dev/null and b/v0.3/www-data/list.gif differ diff --git a/v0.3/www-data/register_active2.gif b/v0.3/www-data/register_active2.gif new file mode 100644 index 0000000..7f69389 Binary files /dev/null and b/v0.3/www-data/register_active2.gif differ diff --git a/v0.3/www-data/register_active2.png b/v0.3/www-data/register_active2.png new file mode 100644 index 0000000..2025208 Binary files /dev/null and b/v0.3/www-data/register_active2.png differ diff --git a/v0.3/www-data/register_active3.gif b/v0.3/www-data/register_active3.gif new file mode 100644 index 0000000..b1fe1f5 Binary files /dev/null and b/v0.3/www-data/register_active3.gif differ diff --git a/v0.3/www-data/register_active3.png b/v0.3/www-data/register_active3.png new file mode 100644 index 0000000..3ddf0d8 Binary files /dev/null and b/v0.3/www-data/register_active3.png differ diff --git a/v0.3/www-data/register_passive2.gif b/v0.3/www-data/register_passive2.gif new file mode 100644 index 0000000..3a52181 Binary files /dev/null and b/v0.3/www-data/register_passive2.gif differ diff --git a/v0.3/www-data/register_passive2.png b/v0.3/www-data/register_passive2.png new file mode 100644 index 0000000..6381fe0 Binary files /dev/null and b/v0.3/www-data/register_passive2.png differ diff --git a/v0.3/www-data/screenshots/de_config.png b/v0.3/www-data/screenshots/de_config.png new file mode 100644 index 0000000..3dc3228 Binary files /dev/null and b/v0.3/www-data/screenshots/de_config.png differ diff --git a/v0.3/www-data/screenshots/de_init.png b/v0.3/www-data/screenshots/de_init.png new file mode 100644 index 0000000..abb7b2a Binary files /dev/null and b/v0.3/www-data/screenshots/de_init.png differ diff --git a/v0.3/www-data/screenshots/de_mount.png b/v0.3/www-data/screenshots/de_mount.png new file mode 100644 index 0000000..37920b2 Binary files /dev/null and b/v0.3/www-data/screenshots/de_mount.png differ diff --git a/v0.3/www-data/screenshots/de_w98_login.png b/v0.3/www-data/screenshots/de_w98_login.png new file mode 100644 index 0000000..f7cef41 Binary files /dev/null and b/v0.3/www-data/screenshots/de_w98_login.png differ diff --git a/v0.3/www-data/screenshots/de_w98_network_drive.png b/v0.3/www-data/screenshots/de_w98_network_drive.png new file mode 100644 index 0000000..da72c6f Binary files /dev/null and b/v0.3/www-data/screenshots/de_w98_network_drive.png differ diff --git a/v0.3/www-data/screenshots/de_w98_not_logged_in.png b/v0.3/www-data/screenshots/de_w98_not_logged_in.png new file mode 100644 index 0000000..33a6766 Binary files /dev/null and b/v0.3/www-data/screenshots/de_w98_not_logged_in.png differ diff --git a/v0.3/www-data/screenshots/en_config.png b/v0.3/www-data/screenshots/en_config.png new file mode 100644 index 0000000..e74b416 Binary files /dev/null and b/v0.3/www-data/screenshots/en_config.png differ diff --git a/v0.3/www-data/screenshots/en_mount.png b/v0.3/www-data/screenshots/en_mount.png new file mode 100644 index 0000000..eca7049 Binary files /dev/null and b/v0.3/www-data/screenshots/en_mount.png differ diff --git a/v0.3/www-data/screenshots/en_w98_login.png b/v0.3/www-data/screenshots/en_w98_login.png new file mode 100644 index 0000000..9ff45fb Binary files /dev/null and b/v0.3/www-data/screenshots/en_w98_login.png differ diff --git a/v0.3/www-data/screenshots/en_w98_network_drive.png b/v0.3/www-data/screenshots/en_w98_network_drive.png new file mode 100644 index 0000000..d1e89d7 Binary files /dev/null and b/v0.3/www-data/screenshots/en_w98_network_drive.png differ diff --git a/v0.3/www-data/screenshots/en_w98_not_logged_in.png b/v0.3/www-data/screenshots/en_w98_not_logged_in.png new file mode 100644 index 0000000..adb129a Binary files /dev/null and b/v0.3/www-data/screenshots/en_w98_not_logged_in.png differ diff --git a/v0.3/www-data/screenshots/v0.3/activate_volume.png b/v0.3/www-data/screenshots/v0.3/activate_volume.png new file mode 100644 index 0000000..d18fe90 Binary files /dev/null and b/v0.3/www-data/screenshots/v0.3/activate_volume.png differ diff --git a/v0.3/www-data/screenshots/v0.3/system_preferences.png b/v0.3/www-data/screenshots/v0.3/system_preferences.png new file mode 100644 index 0000000..60fbbb9 Binary files /dev/null and b/v0.3/www-data/screenshots/v0.3/system_preferences.png differ diff --git a/v0.3/www-data/smile.png b/v0.3/www-data/smile.png new file mode 100644 index 0000000..b51b3ff Binary files /dev/null and b/v0.3/www-data/smile.png differ diff --git a/v0.3/www-data/smile4.png b/v0.3/www-data/smile4.png new file mode 100644 index 0000000..f8f5b52 Binary files /dev/null and b/v0.3/www-data/smile4.png differ diff --git a/v0.3/www-data/somerights20.gif b/v0.3/www-data/somerights20.gif new file mode 100644 index 0000000..0860fa9 Binary files /dev/null and b/v0.3/www-data/somerights20.gif differ diff --git a/v0.3/www-data/volume_active_crypto.gif b/v0.3/www-data/volume_active_crypto.gif new file mode 100644 index 0000000..8b8bb09 Binary files /dev/null and b/v0.3/www-data/volume_active_crypto.gif differ diff --git a/v0.3/www-data/volume_active_crypto.png b/v0.3/www-data/volume_active_crypto.png new file mode 100644 index 0000000..faa1656 Binary files /dev/null and b/v0.3/www-data/volume_active_crypto.png differ diff --git a/v0.3/www-data/volume_active_crypto_busy.gif b/v0.3/www-data/volume_active_crypto_busy.gif new file mode 100644 index 0000000..488a84f Binary files /dev/null and b/v0.3/www-data/volume_active_crypto_busy.gif differ diff --git a/v0.3/www-data/volume_active_crypto_busy.png b/v0.3/www-data/volume_active_crypto_busy.png new file mode 100644 index 0000000..ed45257 Binary files /dev/null and b/v0.3/www-data/volume_active_crypto_busy.png differ diff --git a/v0.3/www-data/volume_active_plain.gif b/v0.3/www-data/volume_active_plain.gif new file mode 100644 index 0000000..e06958a Binary files /dev/null and b/v0.3/www-data/volume_active_plain.gif differ diff --git a/v0.3/www-data/volume_active_plain.png b/v0.3/www-data/volume_active_plain.png new file mode 100644 index 0000000..61b0d92 Binary files /dev/null and b/v0.3/www-data/volume_active_plain.png differ diff --git a/v0.3/www-data/volume_active_plain_busy.gif b/v0.3/www-data/volume_active_plain_busy.gif new file mode 100644 index 0000000..1c617fc Binary files /dev/null and b/v0.3/www-data/volume_active_plain_busy.gif differ diff --git a/v0.3/www-data/volume_active_plain_busy.png b/v0.3/www-data/volume_active_plain_busy.png new file mode 100644 index 0000000..92fc87e Binary files /dev/null and b/v0.3/www-data/volume_active_plain_busy.png differ diff --git a/v0.3/www-data/volume_passive_crypto.gif b/v0.3/www-data/volume_passive_crypto.gif new file mode 100644 index 0000000..55eac46 Binary files /dev/null and b/v0.3/www-data/volume_passive_crypto.gif differ diff --git a/v0.3/www-data/volume_passive_crypto.png b/v0.3/www-data/volume_passive_crypto.png new file mode 100644 index 0000000..de0da42 Binary files /dev/null and b/v0.3/www-data/volume_passive_crypto.png differ diff --git a/v0.3/www-data/volume_passive_crypto_busy.gif b/v0.3/www-data/volume_passive_crypto_busy.gif new file mode 100644 index 0000000..c1b8e15 Binary files /dev/null and b/v0.3/www-data/volume_passive_crypto_busy.gif differ diff --git a/v0.3/www-data/volume_passive_crypto_busy.png b/v0.3/www-data/volume_passive_crypto_busy.png new file mode 100644 index 0000000..2c5255a Binary files /dev/null and b/v0.3/www-data/volume_passive_crypto_busy.png differ diff --git a/v0.3/www-data/volume_passive_plain.gif b/v0.3/www-data/volume_passive_plain.gif new file mode 100644 index 0000000..575e517 Binary files /dev/null and b/v0.3/www-data/volume_passive_plain.gif differ diff --git a/v0.3/www-data/volume_passive_plain.png b/v0.3/www-data/volume_passive_plain.png new file mode 100644 index 0000000..02f2ce6 Binary files /dev/null and b/v0.3/www-data/volume_passive_plain.png differ diff --git a/v0.3/www-data/volume_passive_plain_busy.gif b/v0.3/www-data/volume_passive_plain_busy.gif new file mode 100644 index 0000000..6fc4be7 Binary files /dev/null and b/v0.3/www-data/volume_passive_plain_busy.gif differ diff --git a/v0.3/www-data/volume_passive_plain_busy.png b/v0.3/www-data/volume_passive_plain_busy.png new file mode 100644 index 0000000..d251040 Binary files /dev/null and b/v0.3/www-data/volume_passive_plain_busy.png differ diff --git a/v0.3/www-data/volume_property_frame.png b/v0.3/www-data/volume_property_frame.png new file mode 100644 index 0000000..50478b7 Binary files /dev/null and b/v0.3/www-data/volume_property_frame.png differ