new release is tagged
340
v0.3/LICENSE
Normal file
|
@ -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.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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.
|
||||
|
||||
<signature of Ty Coon>, 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.
|
15
v0.3/MANIFEST.in
Normal file
|
@ -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
|
177
v0.3/README
Normal file
|
@ -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/).
|
||||
|
47
v0.3/README.davfs
Normal file
|
@ -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"
|
||||
<Location "/cryptobox">
|
||||
Dav filesystem
|
||||
</Location>
|
||||
|
||||
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
|
||||
|
61
v0.3/README.proxy
Normal file
|
@ -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
|
||||
|
||||
<Proxy *>
|
||||
Order Deny,Allow
|
||||
Allow from all
|
||||
</Proxy>
|
||||
|
||||
<Location /cryptobox/>
|
||||
ProxyPass http://localhost:8080/
|
||||
ProxyPassReverse http://localhost:8080/
|
||||
RequestHeader set CryptoBox-Location /cryptobox
|
||||
</Location>
|
||||
|
||||
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"
|
||||
))
|
||||
)
|
||||
|
31
v0.3/README.samba
Normal file
|
@ -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
|
||||
|
57
v0.3/README.ssl
Normal file
|
@ -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 <NAMES>; a default CERT_CONF is shipped with the
|
||||
cryptobox-server package):
|
||||
|
||||
make-ssl-cert <CERT_CONF> <CERT_FILE_NAME>
|
||||
|
||||
In case, that you already have a certificate just run this command:
|
||||
|
||||
stunnel -p <CERT_FILE_NAME> -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
|
||||
|
37
v0.3/bin-perl-old/Makefile
Normal file
|
@ -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)
|
||||
|
474
v0.3/bin-perl-old/cbox-manage.sh
Executable file
|
@ -0,0 +1,474 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 02005 sense.lab <senselab@systemausfall.org>
|
||||
#
|
||||
# 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 </dev/null >>"$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
|
||||
|
341
v0.3/bin-perl-old/cbox-root-actions.sh
Executable file
|
@ -0,0 +1,341 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 02005 sense.lab <senselab@systemausfall.org>
|
||||
#
|
||||
# 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 >/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 >/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
|
||||
|
946
v0.3/bin-perl-old/cryptobox.pl
Executable file
|
@ -0,0 +1,946 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# Copyright (c) 02005 sense.lab <senselab@systemausfall.org>
|
||||
#
|
||||
# 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 "<html><head><title>CryptoBox</title></head>\n";
|
||||
print "<body>\n";
|
||||
print '<h1 align="center">' . $message . "</h1>\n";
|
||||
print "</body></html>\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/, <PROG_OUT>;
|
||||
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 ("<br/>", &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 (<LOGFILE>) { $output .= "$_<br/>" }
|
||||
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;
|
||||
|
21
v0.3/bin-perl-old/cryptobox_wrapper.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* $Id$ */
|
||||
|
||||
// define the location of your cryptobox.pl file in this header file
|
||||
#include "cryptobox_wrapper.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* 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);
|
||||
|
||||
}
|
191
v0.3/bin-perl-old/ro-system.sh
Normal file
|
@ -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
|
448
v0.3/bin/CryptoBoxRootActions
Executable file
|
@ -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)
|
||||
|
266
v0.3/bin/CryptoBoxWebserver
Executable file
|
@ -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)
|
||||
|
18
v0.3/bin/coding_guidelines.txt
Normal file
|
@ -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 ;) ))
|
||||
|
88
v0.3/bin/cryptobox-unittests.conf
Normal file
|
@ -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
|
||||
|
89
v0.3/bin/cryptobox.conf
Normal file
|
@ -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
|
||||
|
34
v0.3/bin/do_pylint.sh
Executable file
|
@ -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
|
||||
|
41
v0.3/bin/do_unittests.sh
Executable file
|
@ -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
|
||||
|
21
v0.3/bin/run_webserver.sh
Executable file
|
@ -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" "$@"
|
||||
|
32
v0.3/bin/uml-setup.sh
Executable file
|
@ -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
|
||||
|
33
v0.3/changelog
Normal file
|
@ -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
|
13
v0.3/conf-examples/apache2_dav.conf
Normal file
|
@ -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
|
||||
|
||||
<IfModule mod_dav_fs.c>
|
||||
# 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
|
||||
</IfModule>
|
25
v0.3/conf-examples/apache_proxypass.conf
Normal file
|
@ -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
|
||||
<Proxy *>
|
||||
Order Deny,Allow
|
||||
Allow from all
|
||||
</Proxy>
|
||||
|
||||
<Location /cryptobox/>
|
||||
ProxyPass http://localhost:8080/
|
||||
ProxyPassReverse http://localhost:8080/
|
||||
# this requestheader is necessary to allow proper redirection to https
|
||||
RequestHeader set CryptoBox-Location /cryptobox
|
||||
</Location>
|
||||
|
88
v0.3/conf-examples/cryptobox.conf
Normal file
|
@ -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
|
||||
|
65
v0.3/conf-examples/openssl.cnf
Normal file
|
@ -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
|
||||
|
||||
|
||||
|
42
v0.3/conf-examples/start_stunnel.sh
Executable file
|
@ -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}
|
||||
|
3
v0.3/conf-examples/super.tab-example
Normal file
|
@ -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
|
18
v0.3/copyright
Normal file
|
@ -0,0 +1,18 @@
|
|||
Copyright (c) 02005 sense.lab <senselab@systemausfall.org>
|
||||
|
||||
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$
|
32
v0.3/debian/README.Debian
Normal file
|
@ -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.
|
||||
|
79
v0.3/debian/changelog
Normal file
|
@ -0,0 +1,79 @@
|
|||
cryptobox (0.3.0-1) unstable; urgency=low
|
||||
|
||||
* first release of the CryptoBox as a seperate package
|
||||
|
||||
-- Lars Kruse <devel@sumpfralle.de> 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 <devel@sumpfralle.de> Thu, 14 Dec 2006 14:19:12 +0100
|
||||
|
||||
cryptobox (0.2.58-1) unstable; urgency=low
|
||||
|
||||
* fixed small layout bug
|
||||
|
||||
-- Lars Kruse <devel@sumpfralle.de> 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 <devel@sumpfralle.de> 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 <devel@sumpfralle.de> Wed, 13 Dec 2006 02:14:35 +0100
|
||||
|
||||
cryptobox (0.2.55-1) unstable; urgency=low
|
||||
|
||||
* more unittests
|
||||
* new help system
|
||||
|
||||
-- Lars Kruse <devel@sumpfralle.de> 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 <devel@sumpfralle.de> 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 <devel@sumpfralle.de> 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 <devel@sumpfralle.de> 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 <devel@sumpfralle.de> Thu, 05 December 2006 19:51:24 +0100
|
||||
|
||||
cryptobox (0.2.50-1) unstable; urgency=low
|
||||
* Initial release
|
||||
-- Lars Kruse <devel@sumpfralle.de> Wed, 30 November 2006 20:26:47 +0100
|
1
v0.3/debian/compat
Normal file
|
@ -0,0 +1 @@
|
|||
5
|
21
v0.3/debian/control
Normal file
|
@ -0,0 +1,21 @@
|
|||
Source: cryptobox
|
||||
Section: admin
|
||||
Priority: extra
|
||||
Maintainer: Lars Kruse <devel@sumpfralle.de>
|
||||
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.
|
||||
|
27
v0.3/debian/copyright
Normal file
|
@ -0,0 +1,27 @@
|
|||
This package was debianized by Lars Kruse <devel@sumpfralle.de> on
|
||||
Wed, May 10 21:23:16 CEST 2006
|
||||
|
||||
It was downloaded from http://cryptobox.org/
|
||||
|
||||
Upstream Authors:
|
||||
sense.lab development <devel@systemausfall.org>
|
||||
|
||||
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'.
|
||||
|
21
v0.3/debian/cryptobox-server.default
Normal file
|
@ -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
|
||||
|
4
v0.3/debian/cryptobox-server.dirs
Normal file
|
@ -0,0 +1,4 @@
|
|||
usr/sbin
|
||||
usr/share/cryptobox-server
|
||||
var/log/cryptobox-server
|
||||
var/run/cryptobox-server
|
9
v0.3/debian/cryptobox-server.docs
Normal file
|
@ -0,0 +1,9 @@
|
|||
README
|
||||
README.samba
|
||||
README.davfs
|
||||
README.ssl
|
||||
README.proxy
|
||||
copyright
|
||||
changelog
|
||||
doc/html
|
||||
event-scripts
|
1
v0.3/debian/cryptobox-server.examples
Normal file
|
@ -0,0 +1 @@
|
|||
conf-examples
|
107
v0.3/debian/cryptobox-server.init
Normal file
|
@ -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
|
||||
|
1
v0.3/debian/cryptobox-server.lintian
Normal file
|
@ -0,0 +1 @@
|
|||
cryptobox-server: package-has-a-duplicate-relation
|
6
v0.3/debian/cryptobox-server.logrotate
Normal file
|
@ -0,0 +1,6 @@
|
|||
/var/log/cryptobox-server/cryptobox.log /var/log/cryptobox-server/webserver.log {
|
||||
rotate 2
|
||||
size 100k
|
||||
copytruncate
|
||||
nocompress
|
||||
}
|
2
v0.3/debian/cryptobox-server.manpages
Normal file
|
@ -0,0 +1,2 @@
|
|||
man/CryptoBoxWebserver.8
|
||||
man/CryptoBoxRootActions.8
|
78
v0.3/debian/cryptobox-server.postinst
Normal file
|
@ -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
|
||||
|
64
v0.3/debian/cryptobox-server.postrm
Normal file
|
@ -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
|
4
v0.3/debian/cryptobox-server.preinst
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
#DEBHELPER#
|
||||
|
4
v0.3/debian/cryptobox-server.prerm
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
#DEBHELPER#
|
||||
|
0
v0.3/debian/patches/00list
Normal file
1
v0.3/debian/pycompat
Normal file
|
@ -0,0 +1 @@
|
|||
2
|
99
v0.3/debian/rules
Executable file
|
@ -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
|
659
v0.3/design/background_frame_corner.svg
Normal file
|
@ -0,0 +1,659 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
id="svg12523"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.44.1"
|
||||
sodipodi:docbase="/home/lars/subversion/cryptobox/trunk/design"
|
||||
sodipodi:docname="background_frame_corner.svg"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/background_frame_corner.png"
|
||||
inkscape:export-xdpi="76.669998"
|
||||
inkscape:export-ydpi="76.669998">
|
||||
<defs
|
||||
id="defs12525">
|
||||
<linearGradient
|
||||
id="linearGradient6418">
|
||||
<stop
|
||||
id="stop6420"
|
||||
offset="0"
|
||||
style="stop-color:#d2d2d2;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop6422"
|
||||
offset="0.5"
|
||||
style="stop-color:#e6e6e6;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop6424"
|
||||
offset="1"
|
||||
style="stop-color:white;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3751">
|
||||
<stop
|
||||
style="stop-color:#969696;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3753" />
|
||||
<stop
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop3755" />
|
||||
<stop
|
||||
style="stop-color:white;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3757" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2821">
|
||||
<stop
|
||||
id="stop2823"
|
||||
offset="0"
|
||||
style="stop-color:#bbb;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2825"
|
||||
offset="0.60000002"
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;"
|
||||
offset="0.85000002"
|
||||
id="stop2829" />
|
||||
<stop
|
||||
id="stop2827"
|
||||
offset="1"
|
||||
style="stop-color:white;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8122">
|
||||
<stop
|
||||
id="stop8124"
|
||||
offset="0"
|
||||
style="stop-color:#bbb;stop-opacity:0.65315318;" />
|
||||
<stop
|
||||
style="stop-color:#bbb;stop-opacity:0.509009;"
|
||||
offset="0.71241832"
|
||||
id="stop8126" />
|
||||
<stop
|
||||
id="stop8128"
|
||||
offset="1"
|
||||
style="stop-color:#bbb;stop-opacity:0.11711711;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4568">
|
||||
<stop
|
||||
style="stop-color:#bbb;stop-opacity:0.4099099;"
|
||||
offset="0"
|
||||
id="stop4570" />
|
||||
<stop
|
||||
id="stop4576"
|
||||
offset="0.71241832"
|
||||
style="stop-color:#bbb;stop-opacity:0.32432431;" />
|
||||
<stop
|
||||
style="stop-color:#bbb;stop-opacity:0.11711711;"
|
||||
offset="1"
|
||||
id="stop4572" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient18003">
|
||||
<stop
|
||||
id="stop18005"
|
||||
offset="0"
|
||||
style="stop-color:#bbb;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop18007"
|
||||
offset="0.89510489"
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop18009"
|
||||
offset="1"
|
||||
style="stop-color:white;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient6436">
|
||||
<stop
|
||||
id="stop6438"
|
||||
offset="0"
|
||||
style="stop-color:#bbb;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop6440"
|
||||
offset="0.79720283"
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop6442"
|
||||
offset="1"
|
||||
style="stop-color:white;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2840">
|
||||
<stop
|
||||
id="stop2842"
|
||||
offset="0"
|
||||
style="stop-color:#ececec;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#dfdfdf;stop-opacity:1;"
|
||||
offset="0.15000001"
|
||||
id="stop2844" />
|
||||
<stop
|
||||
id="stop2846"
|
||||
offset="0.5"
|
||||
style="stop-color:#bbb;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2848"
|
||||
offset="0.85000002"
|
||||
style="stop-color:#dfdfdf;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2850"
|
||||
offset="1"
|
||||
style="stop-color:#ececec;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient13418">
|
||||
<stop
|
||||
style="stop-color:#bbb;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19661" />
|
||||
<stop
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;"
|
||||
offset="0.60000002"
|
||||
id="stop19659" />
|
||||
<stop
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop13422" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient16109"
|
||||
x1="-698.64288"
|
||||
y1="480.93362"
|
||||
x2="-212.78571"
|
||||
y2="480.93362"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.205649,0,0,-1,330.5395,1089.951)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient4644"
|
||||
x1="-552.84717"
|
||||
y1="342.28833"
|
||||
x2="-538.43823"
|
||||
y2="747.75262"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000688,0,0,0.742585,0.284584,81.76713)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6436"
|
||||
id="linearGradient9992"
|
||||
x1="-579.13184"
|
||||
y1="815.78918"
|
||||
x2="-449.77423"
|
||||
y2="861.64172"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(906.9955,-141.7181)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient10889"
|
||||
x1="-458.1723"
|
||||
y1="815.36176"
|
||||
x2="-583.6474"
|
||||
y2="880.30389"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(906.9955,-141.7181)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6436"
|
||||
id="linearGradient11778"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-579.13184"
|
||||
y1="815.78918"
|
||||
x2="-449.77423"
|
||||
y2="861.64172"
|
||||
gradientTransform="translate(892.1621,-423.4749)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient11780"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-458.1723"
|
||||
y1="815.36176"
|
||||
x2="-583.6474"
|
||||
y2="880.30389"
|
||||
gradientTransform="translate(892.1621,-423.4749)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient15346"
|
||||
x1="249.74495"
|
||||
y1="-1333.7054"
|
||||
x2="277.02573"
|
||||
y2="-889.35199"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.851214,0,0,3.640976,580.6059,3368.984)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4568"
|
||||
id="linearGradient2796"
|
||||
x1="292.56543"
|
||||
y1="777.26331"
|
||||
x2="654.99719"
|
||||
y2="1371.1274"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.675159,0,0,1.473684,48.93705,-404.3746)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8122"
|
||||
id="linearGradient6350"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.675159,0,0,1.473684,562.0182,-400.008)"
|
||||
x1="292.56543"
|
||||
y1="777.26331"
|
||||
x2="654.99719"
|
||||
y2="1371.1274" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2821"
|
||||
id="linearGradient3726"
|
||||
x1="-1431.3523"
|
||||
y1="990.10388"
|
||||
x2="-1431.3523"
|
||||
y2="1759.4376"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.319943,945.2842,756.9896)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2821"
|
||||
id="linearGradient6407"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.26742,1285.892,810.6606)"
|
||||
x1="-1431.3523"
|
||||
y1="990.10388"
|
||||
x2="-1431.3523"
|
||||
y2="1759.4376" />
|
||||
<mask
|
||||
maskUnits="userSpaceOnUse"
|
||||
id="mask14422">
|
||||
<rect
|
||||
style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1.13523734;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect9951"
|
||||
width="54.151539"
|
||||
height="54.151539"
|
||||
x="-1564.8673"
|
||||
y="752.64825"
|
||||
rx="1.9999031"
|
||||
ry="1.7900367" />
|
||||
</mask>
|
||||
<mask
|
||||
maskUnits="userSpaceOnUse"
|
||||
id="mask14425">
|
||||
<rect
|
||||
ry="1.7900367"
|
||||
rx="1.9999031"
|
||||
y="839.48163"
|
||||
x="-1251.1466"
|
||||
height="54.151539"
|
||||
width="54.151539"
|
||||
id="rect14412"
|
||||
style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1.13523734;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</mask>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3751"
|
||||
id="linearGradient1975"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.355932,0,0,1.666667,1099.541,-716.0493)"
|
||||
x1="-579.13184"
|
||||
y1="815.78918"
|
||||
x2="-463.87494"
|
||||
y2="836.25873" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6418"
|
||||
id="linearGradient3761"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.355932,0,0,1.666667,1109.802,-991.7106)"
|
||||
x1="-579.13184"
|
||||
y1="815.78918"
|
||||
x2="-463.87494"
|
||||
y2="836.25873" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.38983435"
|
||||
inkscape:cx="843.76306"
|
||||
inkscape:cy="741.45354"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="693"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26" />
|
||||
<metadata
|
||||
id="metadata12528">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient16109);stroke-width:3.29406023;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1171.0489,609.0182 L 588.893,609.0182"
|
||||
id="path15208"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/footer_line.png"
|
||||
inkscape:export-xdpi="76"
|
||||
inkscape:export-ydpi="76" />
|
||||
<rect
|
||||
style="opacity:0.4;fill:url(#linearGradient15346);fill-opacity:1;stroke:none;stroke-width:5.09556913;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect12667"
|
||||
width="1800"
|
||||
height="1600"
|
||||
x="617.01599"
|
||||
y="-1513.9479"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/volume_property_frame.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
transform="scale(-1,-1)" />
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient2796);fill-opacity:1;stroke:none;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1901"
|
||||
width="462.86469"
|
||||
height="611.33075"
|
||||
x="150.64935"
|
||||
y="853.67969"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/icon_background_passive_060.png"
|
||||
inkscape:export-xdpi="11.666476"
|
||||
inkscape:export-ydpi="11.666476" />
|
||||
<rect
|
||||
inkscape:export-ydpi="11.67"
|
||||
inkscape:export-xdpi="11.67"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/icon_background_active_060.png"
|
||||
y="858.04633"
|
||||
x="663.73047"
|
||||
height="611.33075"
|
||||
width="462.86469"
|
||||
id="rect6348"
|
||||
style="opacity:1;fill:url(#linearGradient6350);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="716.13025"
|
||||
y="1545.7935"
|
||||
id="text9015"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan9017"
|
||||
x="716.13025"
|
||||
y="1545.7935"
|
||||
style="font-size:40px">icon_background_active</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="716.13025"
|
||||
y="1595.7935"
|
||||
style="font-size:40px"
|
||||
id="tspan1925">60x79</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="716.13025"
|
||||
y="1645.7935"
|
||||
style="font-size:40px"
|
||||
id="tspan1927">80x106</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="716.13025"
|
||||
y="1695.7935"
|
||||
style="font-size:40px"
|
||||
id="tspan1929">100x132</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="716.13025"
|
||||
y="1745.7935"
|
||||
style="font-size:40px"
|
||||
id="tspan1931">256x338</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="133.51015"
|
||||
y="1537.5961"
|
||||
id="text9019"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan9021"
|
||||
x="133.51015"
|
||||
y="1537.5961"
|
||||
style="font-size:40px">icon_background_passive</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="133.51015"
|
||||
y="1587.5961"
|
||||
style="font-size:40px"
|
||||
id="tspan1917">60x79</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="133.51015"
|
||||
y="1637.5961"
|
||||
style="font-size:40px"
|
||||
id="tspan1919">80x106</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="133.51015"
|
||||
y="1687.5961"
|
||||
style="font-size:40px"
|
||||
id="tspan1921">100x132</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="133.51015"
|
||||
y="1737.5961"
|
||||
style="font-size:40px"
|
||||
id="tspan1923">256x338</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="315.32266"
|
||||
y="768.92609"
|
||||
id="text1935"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1937"
|
||||
x="315.32266"
|
||||
y="768.92609">register_active2</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="315.32266"
|
||||
y="818.92609"
|
||||
id="tspan9966">160x80</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="311.77972"
|
||||
y="496.11884"
|
||||
id="text1941"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1943"
|
||||
x="311.77972"
|
||||
y="496.11884">register_passive2</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="311.77972"
|
||||
y="546.11884"
|
||||
id="tspan1945">160x80</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="775.90631"
|
||||
y="666.18048"
|
||||
id="text1947"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1949"
|
||||
x="775.90631"
|
||||
y="666.18048">footer_line</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="775.90631"
|
||||
y="716.18048"
|
||||
id="tspan1951">494x3</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient3726);stroke-width:3;stroke-linecap:square;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M -486.06799,1074.4153 L -486.06799,1322.6611 L -486.06799,1322.6611 L -486.06799,1322.6611"
|
||||
id="path2833"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/backpane_left.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="-2363.8096"
|
||||
y="1595.5544"
|
||||
id="text5498"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5500"
|
||||
x="-2363.8096"
|
||||
y="1595.5544">volume_property_frame</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-2363.8096"
|
||||
y="1645.5544"
|
||||
id="tspan5502">1800x1600</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="-560.56104"
|
||||
y="1405.2148"
|
||||
id="text5508"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5510"
|
||||
x="-560.56104"
|
||||
y="1405.2148">backpane_left</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-560.56104"
|
||||
y="1455.2148"
|
||||
id="tspan5512">250x3</tspan></text>
|
||||
<path
|
||||
id="path6399"
|
||||
d="M -145.4602,1075.9761 L -145.4602,1283.4685 L -145.4602,1283.4685 L -145.4602,1283.4685"
|
||||
style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient6407);stroke-width:3;stroke-linecap:square;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/backpane_right.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
id="text6401"
|
||||
y="1404.0442"
|
||||
x="-219.95311"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
xml:space="preserve"><tspan
|
||||
y="1404.0442"
|
||||
x="-219.95311"
|
||||
id="tspan6403"
|
||||
sodipodi:role="line">backpane_right</tspan><tspan
|
||||
id="tspan6405"
|
||||
y="1454.0442"
|
||||
x="-219.95311"
|
||||
sodipodi:role="line">250x3</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;stroke:#bbb;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect7294"
|
||||
width="40.810165"
|
||||
height="34.537643"
|
||||
x="-1517.9615"
|
||||
y="796.44244"
|
||||
rx="0.39249966"
|
||||
ry="0.55362082"
|
||||
mask="url(#mask14422)"
|
||||
transform="translate(1038.046,-30.48475)"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/backpane_left_top.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
ry="0.55362082"
|
||||
rx="0.39249966"
|
||||
y="884.20953"
|
||||
x="-1281.7373"
|
||||
height="34.537643"
|
||||
width="40.810165"
|
||||
id="rect14410"
|
||||
style="opacity:1;fill:none;fill-opacity:1;stroke:#bbb;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
mask="url(#mask14425)"
|
||||
transform="translate(766.035,-313.0591)"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/backpane_right_top.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="-498.94699"
|
||||
y="829.09302"
|
||||
id="text14428"><tspan
|
||||
sodipodi:role="line"
|
||||
x="-498.94699"
|
||||
y="829.09302"
|
||||
id="tspan14432">backpane_left_top</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-498.94699"
|
||||
y="879.09302"
|
||||
id="tspan14436">90dpi</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="-498.94699"
|
||||
y="654.79492"
|
||||
id="text14438"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan14440"
|
||||
x="-498.94699"
|
||||
y="654.79492">backpane_right_top</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-498.94699"
|
||||
y="704.79492"
|
||||
id="tspan14442">90dpi</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bbb;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M -477.52639,372.22063 C -472.55519,372.22063 -472.55519,372.22063 -472.55519,372.22063"
|
||||
id="path14444"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/backpane_top.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="-496.30612"
|
||||
y="432.96088"
|
||||
id="text17101"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan17103"
|
||||
x="-496.30612"
|
||||
y="432.96088">backpane_top</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-496.30612"
|
||||
y="482.96088"
|
||||
id="tspan17105">8x3</tspan></text>
|
||||
<rect
|
||||
style="fill:url(#linearGradient1975);fill-opacity:1;stroke:none;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1973"
|
||||
width="160"
|
||||
height="80"
|
||||
x="309.20251"
|
||||
y="637.7149"
|
||||
rx="13.559322"
|
||||
ry="16.666666"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/register_active2.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
ry="16.666666"
|
||||
rx="13.559322"
|
||||
y="362.05408"
|
||||
x="319.46329"
|
||||
height="80"
|
||||
width="160"
|
||||
id="rect3759"
|
||||
style="fill:url(#linearGradient3761);fill-opacity:1;stroke:none;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/trunk/www-data/register_passive2.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 24 KiB |
92
v0.3/design/icon_background_active.svg
Normal file
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.44.1"
|
||||
sodipodi:docbase="/home/lars/subversion/cryptobox/branches/pythonrewrite/design"
|
||||
sodipodi:docname="icon_background_active.svg"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/icon_background_passive_100.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
id="linearGradient2760">
|
||||
<stop
|
||||
style="stop-color:#9b9b9b;stop-opacity:0.22522523;"
|
||||
offset="0"
|
||||
id="stop2762" />
|
||||
<stop
|
||||
id="stop2768"
|
||||
offset="0.85314685"
|
||||
style="stop-color:#c8c8c8;stop-opacity:0.1891892;" />
|
||||
<stop
|
||||
style="stop-color:#e9e5e9;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2764" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2760"
|
||||
id="radialGradient2766"
|
||||
cx="308.57141"
|
||||
cy="383.79077"
|
||||
fx="308.57141"
|
||||
fy="383.79077"
|
||||
r="271.92856"
|
||||
gradientTransform="matrix(1.378293,-3.957684e-7,1.759598e-7,1.129975,-189.6586,-48.38559)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="350"
|
||||
inkscape:cy="524.28571"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="693"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:url(#radialGradient2766);fill-opacity:1;fill-rule:evenodd;stroke:#9c9c9c;stroke-width:2.55945635;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1872"
|
||||
width="397.44052"
|
||||
height="437.44055"
|
||||
x="36.922581"
|
||||
y="166.57048"
|
||||
rx="3.6606367"
|
||||
ry="4.9709153" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
245
v0.3/design/icons/applications-system_tango.svg
Normal file
|
@ -0,0 +1,245 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48.000000px"
|
||||
height="48.000000px"
|
||||
id="svg53383"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/categories"
|
||||
sodipodi:docname="applications-system.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient3264">
|
||||
<stop
|
||||
style="stop-color:#c9c9c9;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3266" />
|
||||
<stop
|
||||
id="stop3276"
|
||||
offset="0.25"
|
||||
style="stop-color:#f8f8f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3272"
|
||||
offset="0.5"
|
||||
style="stop-color:#e2e2e2;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#b0b0b0;stop-opacity:1;"
|
||||
offset="0.75"
|
||||
id="stop3274" />
|
||||
<stop
|
||||
style="stop-color:#c9c9c9;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3268" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3264"
|
||||
id="linearGradient3281"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="14.462892"
|
||||
y1="12.284524"
|
||||
x2="34.534348"
|
||||
y2="39.684914"
|
||||
gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)" />
|
||||
<linearGradient
|
||||
id="linearGradient2300">
|
||||
<stop
|
||||
id="stop2302"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#000000;stop-opacity:0.32673267;" />
|
||||
<stop
|
||||
id="stop2304"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="aigrd1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="99.7773"
|
||||
y1="15.4238"
|
||||
x2="153.0005"
|
||||
y2="248.6311">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#184375"
|
||||
id="stop53300" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#C8BDDC"
|
||||
id="stop53302" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient53551"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="99.7773"
|
||||
y1="15.4238"
|
||||
x2="153.0005"
|
||||
y2="248.6311"
|
||||
gradientTransform="matrix(0.200685,0.000000,0.000000,0.200685,-0.585758,-1.050787)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="11.689870"
|
||||
fy="72.568001"
|
||||
fx="14.287618"
|
||||
cy="68.872971"
|
||||
cx="14.287618"
|
||||
gradientTransform="matrix(1.399258,-2.234445e-7,8.196178e-8,0.513264,4.365074,4.839285)"
|
||||
id="radialGradient2308"
|
||||
xlink:href="#linearGradient2300"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3264"
|
||||
id="linearGradient3760"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)"
|
||||
x1="14.462892"
|
||||
y1="12.284524"
|
||||
x2="34.534348"
|
||||
y2="39.684914" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3773"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.200685,0,0,0.200685,-54.33576,-1.050787)"
|
||||
x1="99.7773"
|
||||
y1="15.4238"
|
||||
x2="153.0005"
|
||||
y2="248.6311" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:showpageshadow="false"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.11764706"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568542"
|
||||
inkscape:cx="43.652227"
|
||||
inkscape:cy="21.164787"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="872"
|
||||
inkscape:window-height="697"
|
||||
inkscape:window-x="2398"
|
||||
inkscape:window-y="249" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>System Applications</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz/</dc:source>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>system</rdf:li>
|
||||
<rdf:li>applications</rdf:li>
|
||||
<rdf:li>group</rdf:li>
|
||||
<rdf:li>category</rdf:li>
|
||||
<rdf:li>admin</rdf:li>
|
||||
<rdf:li>root</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="shadow"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
transform="matrix(1.186380,0.000000,0.000000,1.186380,-4.539687,-7.794678)"
|
||||
d="M 44.285715 38.714287 A 19.928572 9.8372450 0 1 1 4.4285717,38.714287 A 19.928572 9.8372450 0 1 1 44.285715 38.714287 z"
|
||||
sodipodi:ry="9.8372450"
|
||||
sodipodi:rx="19.928572"
|
||||
sodipodi:cy="38.714287"
|
||||
sodipodi:cx="24.357143"
|
||||
id="path1538"
|
||||
style="color:#000000;fill:url(#radialGradient2308);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient3773);fill-opacity:1;fill-rule:nonzero;stroke:#3f4561;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 22.699525,0.94746963 C 22.22635,0.97984519 21.766437,1.0531317 21.301673,1.1063165 L 21.269903,1.1063165 L 20.157975,7.1742671 C 18.345621,7.5870046 16.640562,8.2874574 15.106644,9.2392765 L 10.118853,5.6493371 C 8.770521,6.6961412 7.543552,7.9170049 6.465374,9.2392765 L 9.928236,14.290607 C 8.876814,15.89739 8.086153,17.732094 7.640841,19.659632 C 7.640765,19.668743 7.640779,19.689813 7.640841,19.691401 L 1.60466,20.644482 C 1.494303,21.545851 1.445813,22.477386 1.445813,23.408418 C 1.445813,24.170171 1.466846,24.921747 1.541121,25.664043 L 7.577303,26.744202 C 8.0066,28.840363 8.822112,30.797987 9.960006,32.526228 L 6.370066,37.450482 C 7.398201,38.726866 8.585171,39.888962 9.864698,40.913343 L 14.947798,37.418712 C 16.724273,38.551956 18.707343,39.346604 20.856901,39.737877 L 21.809983,45.742288 C 22.487237,45.803935 23.181758,45.805827 23.874992,45.805827 C 24.853677,45.805826 25.788512,45.768738 26.734236,45.64698 L 27.877933,39.515491 C 29.91886,39.007587 31.836112,38.126493 33.501113,36.942172 L 38.393596,40.500342 C 39.662366,39.420897 40.822583,38.180154 41.824689,36.846863 L 38.266519,31.700225 C 39.230125,30.036028 39.897817,28.199859 40.23622,26.235892 L 46.240632,25.282811 C 46.29329,24.656221 46.30417,24.048546 46.30417,23.408418 C 46.30417,22.296018 46.174875,21.205317 46.018246,20.136172 L 39.918526,19.024244 C 39.440518,17.259164 38.656214,15.612364 37.662901,14.13176 L 41.25284,9.2075071 C 40.140075,7.8466524 38.870718,6.5895264 37.472284,5.5222596 L 32.293876,9.0804296 C 30.805549,8.200202 29.203897,7.5248159 27.464931,7.1424978 L 26.51185,1.1063165 C 25.644369,1.0042729 24.769749,0.94746963 23.874992,0.94746963 C 23.633166,0.94746964 23.384286,0.93986063 23.144296,0.94746963 C 23.027301,0.95117908 22.911525,0.94066346 22.794833,0.94746963 C 22.763228,0.94931296 22.73107,0.94531125 22.699525,0.94746963 z M 23.525529,16.387386 C 23.641592,16.381497 23.757473,16.387386 23.874992,16.387386 C 27.635598,16.387386 30.705408,19.457196 30.705408,23.217802 C 30.705409,26.978407 27.635597,30.016448 23.874992,30.016448 C 20.114387,30.016449 17.076346,26.978407 17.076346,23.217802 C 17.076347,19.574716 19.927558,16.569963 23.525529,16.387386 z "
|
||||
id="path3243" />
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.64772728;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.62180054;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3283"
|
||||
sodipodi:cx="23.511301"
|
||||
sodipodi:cy="23.781593"
|
||||
sodipodi:rx="12.727922"
|
||||
sodipodi:ry="12.727922"
|
||||
d="M 36.239223 23.781593 A 12.727922 12.727922 0 1 1 10.783379,23.781593 A 12.727922 12.727922 0 1 1 36.239223 23.781593 z"
|
||||
transform="matrix(0.616598,0,0,0.616598,9.38202,8.539674)" />
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path3285"
|
||||
d="M 21.995808,2.1484671 L 21.103024,8.0235243 C 19.404254,8.4103946 16.279442,9.5936035 14.841657,10.485771 L 10.091975,6.9406268 C 8.828145,7.9218257 8.741474,7.9883656 7.730867,9.2277688 L 11.165063,14.320988 C 10.179537,15.827071 8.995796,18.510982 8.570778,20.42893 C 8.570778,20.42893 2.552988,21.443355 2.552988,21.443355 C 2.449547,22.288234 2.49926,24.096528 2.56888,24.792303 L 8.317097,25.82782 C 8.71949,27.79261 10.225324,30.955232 11.291904,32.575161 L 7.656902,37.377719 C 8.620601,38.57411 8.813474,38.683589 10.01281,39.64377 L 14.873441,36.082733 C 16.538581,37.144954 19.84373,38.437109 21.858571,38.80386 L 22.656299,44.604952 C 23.291109,44.662736 25.044829,44.824827 25.931283,44.710701 L 26.824066,38.671821 C 28.737084,38.195749 32.042539,36.838896 33.603191,35.728798 L 38.458624,39.236958 C 39.647878,38.225166 39.658533,38.072709 40.597835,36.822978 L 36.999815,31.708667 C 37.90303,30.148767 39.070902,27.098068 39.388097,25.257187 L 45.279046,24.279744 C 45.328399,23.692424 45.330802,22.054578 45.18399,21.052439 L 39.182092,20.016922 C 38.73404,18.362463 37.196418,15.381153 36.265359,13.993342 L 40.080075,9.1907857 C 39.037052,7.915218 38.64924,7.7402002 37.338448,6.7398212 L 32.313994,10.337839 C 30.918941,9.5127782 28.137095,8.2550417 26.507114,7.8966842 L 25.619528,2.1484671 C 24.806414,2.0528187 22.460488,2.0952921 21.995808,2.1484671 z "
|
||||
style="opacity:0.34659089;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999923;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccc" />
|
||||
<path
|
||||
style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 10.102903,6.2970655 C 8.7545689,7.3438694 8.1656464,7.9719226 7.0874684,9.2941942 L 10.489927,14.259153 C 9.4385072,15.857755 8.3316275,18.426114 8.1423859,19.987706 C 8.1423859,19.987706 2.0798859,21.0319 2.0798859,21.0319 C 2.0109129,21.595256 1.90625,22.884803 1.90625,22.884803 L 2.0830267,24.447303 C 2.5107567,24.535638 2.9231817,24.617818 3.3642767,24.666053 L 3.8642767,23.134803 C 4.2083177,23.163279 4.5439297,23.197303 4.8955267,23.197303 C 5.2467347,23.197303 5.6139847,23.163473 5.9580267,23.134803 L 6.4267767,24.666053 C 6.8680647,24.617818 7.3115487,24.535638 7.7392767,24.447303 L 7.7392767,22.884803 C 8.4250337,22.72518 9.0712777,22.497045 9.7080267,22.228553 L 10.645527,23.509803 C 11.047878,23.327709 11.421123,23.133984 11.801777,22.916053 L 11.301777,21.416053 C 11.89901,21.053803 12.463529,20.620706 12.989277,20.166053 L 14.270527,21.103553 C 14.596162,20.806973 14.91164,20.491691 15.208027,20.166053 L 14.270527,18.916053 C 14.725373,18.390305 15.127027,17.826171 15.489277,17.228553 L 16.989277,17.697303 C 17.207208,17.316456 17.432571,16.943209 17.614277,16.541053 L 16.333027,15.603553 C 16.601517,14.966804 16.798016,14.320561 16.958027,13.634803 L 18.551777,13.634803 C 18.640112,13.207076 18.691236,12.763591 18.739277,12.322303 L 17.239277,11.853553 C 17.268139,11.509705 17.301777,11.142456 17.301777,10.791053 C 17.301776,10.43965 17.267753,10.104039 17.239277,9.7598034 L 18.739277,9.2910534 C 18.69373,8.8711662 18.633686,8.4490548 18.551777,8.0410534 C 17.404349,8.4403544 15.999117,9.1941729 14.983265,9.8245243 L 10.102903,6.2970655 z "
|
||||
id="path3767"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true"
|
||||
sodipodi:nodetypes="cccccccccsccccccccccccccccccccsccccc" />
|
||||
<path
|
||||
style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 37.236641,17.217754 C 36.85286,17.39913 36.490003,17.603509 36.123236,17.813295 L 36.692886,19.548136 C 35.995792,19.970436 35.338156,20.467825 34.725008,20.998151 L 33.249099,19.910639 C 32.869013,20.256538 32.507327,20.618223 32.161588,20.998151 L 33.249099,22.474059 C 32.718773,23.087371 32.221547,23.745002 31.799084,24.441937 L 31.255328,24.260685 C 31.207646,24.960968 31.018949,25.62217 30.737466,26.228563 L 30.841038,26.306242 C 30.527881,27.048922 30.27649,27.83664 30.090137,28.636624 L 28.614229,28.636624 C 28.477946,28.722076 28.343676,28.821684 28.199938,28.895555 C 28.121568,29.310822 28.065026,29.712881 28.018687,30.138426 L 29.77942,30.708074 C 29.746033,31.10935 29.727633,31.515269 29.727633,31.925052 C 29.727631,32.334993 29.746034,32.740753 29.77942,33.142029 L 28.018687,33.711677 C 28.074705,34.226432 28.148678,34.740347 28.251725,35.239372 L 30.090137,35.213479 C 30.218255,35.763466 30.393202,36.320918 30.582107,36.844746 C 31.327023,36.557466 32.05594,36.214561 32.731236,35.809021 C 32.319649,34.59298 32.083908,33.279913 32.083908,31.925052 C 32.083909,26.727119 35.376289,22.288397 39.981313,20.583861 L 38.893802,20.402608 C 38.671014,19.579946 38.382478,18.774017 38.013435,18.020441 C 38.002581,17.998277 37.99851,17.96486 37.987542,17.942761 L 37.935756,17.890975 L 37.236641,17.217754 z "
|
||||
id="path3770"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 16 KiB |
738
v0.3/design/icons/computer_tango.svg
Normal file
|
@ -0,0 +1,738 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48.000000px"
|
||||
height="48.000000px"
|
||||
id="svg2327"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+devel"
|
||||
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/devices"
|
||||
sodipodi:docname="computer.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient2985"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2987"
|
||||
offset="0"
|
||||
style="stop-color:#d8dfd6;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2989"
|
||||
offset="1"
|
||||
style="stop-color:#d8dfd6;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2752">
|
||||
<stop
|
||||
id="stop2754"
|
||||
offset="0"
|
||||
style="stop-color:#9d9d9d;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2756"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#b9b9b9;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2711">
|
||||
<stop
|
||||
id="stop2713"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#909090;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2715"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bebebe;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2701">
|
||||
<stop
|
||||
id="stop2703"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#585956;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2705"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbeb8;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2691">
|
||||
<stop
|
||||
id="stop2693"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#868686;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2695"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#e9e9e9;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2683"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2685"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2687"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2675">
|
||||
<stop
|
||||
id="stop2677"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#5b5b97;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2679"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#1b1b43;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2667">
|
||||
<stop
|
||||
id="stop2669"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2671"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#fcfcff;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2635"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2637"
|
||||
offset="0"
|
||||
style="stop-color:#f9fff5;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2639"
|
||||
offset="1"
|
||||
style="stop-color:#f9fff5;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2623">
|
||||
<stop
|
||||
id="stop2625"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#dfdfde;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2627"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9d9f9a;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2454">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2456" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2458" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2415">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2417" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2419" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2379">
|
||||
<stop
|
||||
style="stop-color:#1a4876;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2381" />
|
||||
<stop
|
||||
style="stop-color:#3f54a3;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2383" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2328">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2330" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2332" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2307">
|
||||
<stop
|
||||
style="stop-color:#5a7aa4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2309" />
|
||||
<stop
|
||||
style="stop-color:#5a7aa4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2311" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2253">
|
||||
<stop
|
||||
style="stop-color:#8f8f8f;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2255" />
|
||||
<stop
|
||||
style="stop-color:#494949;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2257" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2245">
|
||||
<stop
|
||||
style="stop-color:#dde1d9;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2247" />
|
||||
<stop
|
||||
style="stop-color:#cacdc6;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2249" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2245"
|
||||
id="linearGradient2251"
|
||||
gradientTransform="matrix(1.129863,0.000000,0.000000,0.885063,-1.625000,-1.304372)"
|
||||
x1="8.6116238"
|
||||
y1="7.2293582"
|
||||
x2="34.784473"
|
||||
y2="33.339787"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2307"
|
||||
id="linearGradient2313"
|
||||
gradientTransform="matrix(1.208393,0.000000,0.000000,0.984410,-0.789284,-0.503380)"
|
||||
x1="16.851954"
|
||||
y1="9.3235140"
|
||||
x2="24.418941"
|
||||
y2="53.734985"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2328"
|
||||
id="linearGradient2334"
|
||||
gradientTransform="matrix(1.289166,0.000000,0.000000,0.922731,-0.789284,-0.503380)"
|
||||
x1="16.119127"
|
||||
y1="10.842293"
|
||||
x2="27.289009"
|
||||
y2="39.031910"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2415"
|
||||
id="linearGradient2421"
|
||||
gradientTransform="matrix(1.108069,0.000000,0.000000,0.902471,1.000000,1.000000)"
|
||||
x1="17.698339"
|
||||
y1="13.004725"
|
||||
x2="34.974548"
|
||||
y2="55.200756"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2379"
|
||||
id="linearGradient2445"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.027870,0.000000,0.000000,0.822296,1.523986,1.001198)"
|
||||
x1="21.356108"
|
||||
y1="30.078255"
|
||||
x2="19.994572"
|
||||
y2="-1.3221773" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2454"
|
||||
id="radialGradient2460"
|
||||
gradientTransform="scale(1.925808,0.519262)"
|
||||
cx="12.575710"
|
||||
cy="67.501709"
|
||||
fx="12.575710"
|
||||
fy="67.501709"
|
||||
r="8.7662794"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2454"
|
||||
id="radialGradient2464"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="scale(1.925808,0.519262)"
|
||||
cx="12.575710"
|
||||
cy="67.501709"
|
||||
fx="12.575710"
|
||||
fy="67.501709"
|
||||
r="8.7662794" />
|
||||
<linearGradient
|
||||
y2="92.570930"
|
||||
x2="10.728384"
|
||||
y1="84.029198"
|
||||
x1="10.728384"
|
||||
gradientTransform="scale(1.983556,0.504145)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2653"
|
||||
xlink:href="#linearGradient2623"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="74.098007"
|
||||
x2="8.6485014"
|
||||
y1="101.28460"
|
||||
x1="13.628710"
|
||||
gradientTransform="scale(2.143634,0.466498)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2655"
|
||||
xlink:href="#linearGradient2635"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="8.7662794"
|
||||
fy="67.501709"
|
||||
fx="12.575710"
|
||||
cy="67.501709"
|
||||
cx="12.575710"
|
||||
gradientTransform="scale(1.925808,0.519262)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2659"
|
||||
xlink:href="#linearGradient2454"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="26.729263"
|
||||
x2="17.199417"
|
||||
y1="1.6537577"
|
||||
x1="11.492236"
|
||||
gradientTransform="matrix(1.238977,0.000000,0.000000,0.895955,0.590553,-1.331524)"
|
||||
id="linearGradient2673"
|
||||
xlink:href="#linearGradient2667"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="8.8666229"
|
||||
x2="16.315819"
|
||||
y1="32.622238"
|
||||
x1="19.150396"
|
||||
gradientTransform="matrix(1.174139,0.000000,0.000000,0.945431,0.721825,-1.331524)"
|
||||
id="linearGradient2681"
|
||||
xlink:href="#linearGradient2675"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="162.45061"
|
||||
x2="3.7069974"
|
||||
y1="171.29134"
|
||||
x1="3.7069976"
|
||||
gradientTransform="matrix(5.705159,0.000000,0.000000,0.175280,1.000000,-0.679373)"
|
||||
id="linearGradient2689"
|
||||
xlink:href="#linearGradient2683"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="64.892525"
|
||||
x2="12.127711"
|
||||
y1="53.535141"
|
||||
x1="12.206709"
|
||||
gradientTransform="scale(1.816345,0.550556)"
|
||||
id="linearGradient2707"
|
||||
xlink:href="#linearGradient2701"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
id="linearGradient2717"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2721"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2725"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2729"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2733"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="74.098007"
|
||||
x2="8.6485014"
|
||||
y1="101.28460"
|
||||
x1="13.628710"
|
||||
gradientTransform="matrix(2.143634,0.000000,0.000000,0.466498,1.000000,-0.508826)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2741"
|
||||
xlink:href="#linearGradient2635"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="100.20015"
|
||||
x2="8.1134233"
|
||||
y1="88.509071"
|
||||
x1="8.1134243"
|
||||
gradientTransform="scale(2.309851,0.432928)"
|
||||
id="linearGradient2758"
|
||||
xlink:href="#linearGradient2752"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="31.246054"
|
||||
x2="32.536823"
|
||||
y1="5.3817744"
|
||||
x1="10.390738"
|
||||
gradientTransform="scale(1.104397,0.905471)"
|
||||
id="linearGradient2979"
|
||||
xlink:href="#linearGradient2253"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="52.536461"
|
||||
x2="18.176752"
|
||||
y1="48.643234"
|
||||
x1="18.316999"
|
||||
gradientTransform="scale(1.129863,0.885063)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2981"
|
||||
xlink:href="#linearGradient2245"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="44.878883"
|
||||
x2="-23.885700"
|
||||
y1="49.953003"
|
||||
x1="-23.885700"
|
||||
gradientTransform="scale(1.492875,0.669848)"
|
||||
id="linearGradient2991"
|
||||
xlink:href="#linearGradient2985"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="100.20015"
|
||||
x2="8.1134233"
|
||||
y1="88.509071"
|
||||
x1="8.1134243"
|
||||
gradientTransform="scale(2.309851,0.432928)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient1409"
|
||||
xlink:href="#linearGradient2752"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="100.20015"
|
||||
x2="8.1134233"
|
||||
y1="88.509071"
|
||||
x1="8.1134243"
|
||||
gradientTransform="scale(2.309851,0.432928)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient1411"
|
||||
xlink:href="#linearGradient2752"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="31.246054"
|
||||
x2="32.536823"
|
||||
y1="5.3817744"
|
||||
x1="10.390738"
|
||||
gradientTransform="scale(1.104397,0.905471)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient1413"
|
||||
xlink:href="#linearGradient2253"
|
||||
inkscape:collect="always" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.12156863"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="75.353821"
|
||||
inkscape:cy="12.176086"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="770"
|
||||
inkscape:window-height="576"
|
||||
inkscape:window-x="402"
|
||||
inkscape:window-y="25"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Computer</dc:title>
|
||||
<dc:date>2005-03-08</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>workstation</rdf:li>
|
||||
<rdf:li>computer</rdf:li>
|
||||
<rdf:li>node</rdf:li>
|
||||
<rdf:li>client</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:source>http://jimmac.musichall.cz/</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:url(#radialGradient2460);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2452"
|
||||
sodipodi:cx="24.218407"
|
||||
sodipodi:cy="35.051105"
|
||||
sodipodi:rx="16.882174"
|
||||
sodipodi:ry="4.5520000"
|
||||
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
|
||||
transform="matrix(1.000000,0.000000,0.000000,1.368932,-1.978553,-13.61713)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:#adb0aa;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#4b4d4a;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2407"
|
||||
sodipodi:cx="-35.658386"
|
||||
sodipodi:cy="29.716238"
|
||||
sodipodi:rx="9.3944187"
|
||||
sodipodi:ry="3.9395950"
|
||||
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
|
||||
transform="translate(57.53339,3.203427)" />
|
||||
<path
|
||||
transform="matrix(0.940273,0.000000,0.000000,0.940273,55.40361,4.271194)"
|
||||
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
|
||||
sodipodi:ry="3.9395950"
|
||||
sodipodi:rx="9.3944187"
|
||||
sodipodi:cy="29.716238"
|
||||
sodipodi:cx="-35.658386"
|
||||
id="path1825"
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#7b7f7a;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2991);stroke-width:0.68065339;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2983"
|
||||
sodipodi:cx="-35.658386"
|
||||
sodipodi:cy="29.716238"
|
||||
sodipodi:rx="9.3944187"
|
||||
sodipodi:ry="3.9395950"
|
||||
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
|
||||
transform="matrix(0.940273,0.000000,0.000000,0.940273,55.40361,3.521194)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccc"
|
||||
style="fill:#d0d0d0;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#979797;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||
d="M 25.687500,28.766243 L 25.625000,29.766243 C 25.625000,29.766243 29.949108,33.365409 34.625000,33.968750 C 36.962946,34.270420 39.378675,34.671162 41.375000,35.156250 C 43.371325,35.641338 44.963356,36.275856 45.500000,36.812500 C 45.810411,37.122911 45.951063,37.386139 46.000000,37.593750 C 46.048937,37.801361 46.038217,37.948565 45.906250,38.156250 C 45.642317,38.571620 44.826393,39.123902 43.437500,39.562500 C 40.659715,40.439695 35.717076,41.000000 28.875000,41.000000 L 28.875000,42.000000 C 35.770998,42.000000 40.738665,41.472329 43.718750,40.531250 C 45.208792,40.060710 46.243692,39.515563 46.750000,38.718750 C 47.003154,38.320344 47.107321,37.830301 47.000000,37.375000 C 46.892679,36.919699 46.615445,36.490445 46.218750,36.093750 C 45.341180,35.216180 43.681912,34.687310 41.625000,34.187500 C 39.568088,33.687690 37.109264,33.273171 34.750000,32.968750 C 30.031473,32.359908 25.687500,28.766243 25.687500,28.766243 z "
|
||||
id="path2411" />
|
||||
<path
|
||||
transform="matrix(1.000000,0.000000,0.000000,1.368932,-1.978553,-19.02126)"
|
||||
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
|
||||
sodipodi:ry="4.5520000"
|
||||
sodipodi:rx="16.882174"
|
||||
sodipodi:cy="35.051105"
|
||||
sodipodi:cx="24.218407"
|
||||
id="path2462"
|
||||
style="color:#000000;fill:url(#radialGradient2464);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<rect
|
||||
y="30.703611"
|
||||
x="17.472397"
|
||||
height="2.7400389"
|
||||
width="9.0396729"
|
||||
id="rect2699"
|
||||
style="color:#000000;fill:url(#linearGradient2707);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.60872948;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="color:#000000;fill:url(#linearGradient2251);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2979);stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 7.0809024,1.6956221 L 36.669097,1.6956221 C 37.580439,1.6956221 38.293244,2.2791039 38.335849,3.0972091 L 39.667893,28.675323 C 39.726102,29.793058 38.766837,30.695628 37.647588,30.695628 L 6.1024120,30.695628 C 4.9831629,30.695628 4.0238980,29.793058 4.0821068,28.675323 L 5.4141506,3.0972091 C 5.4544343,2.3236745 5.9616533,1.6956221 7.0809024,1.6956221 z "
|
||||
id="rect2404"
|
||||
sodipodi:nodetypes="cssssssss" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path2377"
|
||||
d="M 8.4105348,4.3058272 L 7.1683398,26.351144 L 34.818729,26.351144 L 33.483712,4.3992558 L 8.4105348,4.3058272 z "
|
||||
style="fill:url(#linearGradient2681);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000079;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:url(#linearGradient2689);stroke-width:0.99618119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.24840762"
|
||||
d="M 6.1774331,28.735789 L 37.605910,28.735789"
|
||||
id="path2393" />
|
||||
<path
|
||||
sodipodi:nodetypes="cssssssss"
|
||||
id="path2397"
|
||||
d="M 6.9145985,2.7063396 L 36.760101,2.6685383 C 37.043798,2.6681790 37.319403,2.9057881 37.342206,3.3210821 L 38.704098,28.124330 C 38.762137,29.181361 38.164349,29.910201 37.105727,29.910201 L 6.5817583,29.910201 C 5.5231355,29.910201 4.9887439,29.181410 5.0458869,28.124330 L 6.3699773,3.6301633 C 6.4086732,2.9143326 6.5363627,2.7068187 6.9145985,2.7063396 z "
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2421);stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="opacity:0.53142858;fill:url(#linearGradient2673);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 8.7115364,4.7463626 L 7.9090069,22.616693 C 18.953645,20.216063 19.330470,12.124494 33.063039,9.4699426 L 32.901567,4.8124267 L 8.7115364,4.7463626 z "
|
||||
id="path2443" />
|
||||
<path
|
||||
transform="matrix(1.264398,0.000000,0.000000,1.291262,-6.216332,-4.000423)"
|
||||
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
|
||||
sodipodi:ry="4.5520000"
|
||||
sodipodi:rx="16.882174"
|
||||
sodipodi:cy="35.051105"
|
||||
sodipodi:cx="24.218407"
|
||||
id="path2657"
|
||||
style="color:#000000;fill:url(#radialGradient2659);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cssssssss"
|
||||
id="path2409"
|
||||
d="M 6.4621839,36.817452 L 37.464590,36.817452 C 38.583839,36.817452 38.441945,37.088890 38.556817,37.430298 L 41.391463,45.855108 C 41.506335,46.196517 41.418485,46.467954 40.299236,46.467954 L 3.6275382,46.467954 C 2.5082891,46.467954 2.4204387,46.196517 2.5353107,45.855108 L 5.3699564,37.430298 C 5.4848284,37.088889 5.3429348,36.817452 6.4621839,36.817452 z "
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2981);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient1413);stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path2611"
|
||||
d="M 6.3916892,38.829113 L 4.6239223,43.955638 L 10.104000,43.955638 L 10.634330,41.922706 L 25.483572,41.922706 L 26.033251,43.997820 L 32.201086,43.997820 L 30.521708,38.829113 L 6.3916892,38.829113 z "
|
||||
style="fill:#7a7d77;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
id="path2613"
|
||||
d="M 11.076272,42.276260 L 10.634330,43.955639 L 25.395184,43.955639 L 24.953242,42.187872 L 11.076272,42.276260 z "
|
||||
style="fill:#777874;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="color:#000000;fill:#777a75;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 37.592776,38.829114 L 39.272155,43.867250 L 33.792077,43.778861 L 32.289475,38.917502 L 37.592776,38.829114 z "
|
||||
id="path2619" />
|
||||
<path
|
||||
id="path2615"
|
||||
d="M 37.592776,38.298786 L 39.272155,43.336922 L 33.792077,43.248533 L 32.289475,38.387174 L 37.592776,38.298786 z "
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2758);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="fill:url(#linearGradient1411);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 6.3916892,38.210397 L 4.6239223,43.336922 L 10.104000,43.336922 L 10.634330,41.303990 L 25.483572,41.303990 L 26.033251,43.379104 L 32.201086,43.379104 L 30.521708,38.210397 L 6.3916892,38.210397 z "
|
||||
id="path2617"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient1409);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 11.076272,41.745932 L 10.634330,43.425311 L 25.395184,43.425311 L 24.953242,41.657544 L 11.076272,41.745932 z "
|
||||
id="path2621" />
|
||||
<path
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2741);stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 6.1278189,37.578116 L 37.953634,37.578116 L 40.590813,45.670679 L 3.3297429,45.670679 L 6.1278189,37.578116 z "
|
||||
id="path2631"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.41933,2.853866)"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
sodipodi:ry="0.83968931"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:cx="34.780815"
|
||||
id="path2709"
|
||||
style="color:#000000;fill:url(#linearGradient2717);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:url(#linearGradient2721);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2719"
|
||||
sodipodi:cx="34.780815"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:ry="0.83968931"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.30573,4.959651)" />
|
||||
<path
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.19213,6.959651)"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
sodipodi:ry="0.83968931"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:cx="34.780815"
|
||||
id="path2723"
|
||||
style="color:#000000;fill:url(#linearGradient2725);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:url(#linearGradient2729);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2727"
|
||||
sodipodi:cx="34.780815"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:ry="0.83968931"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.07853,8.959651)" />
|
||||
<path
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-9.964930,10.95965)"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
sodipodi:ry="0.83968931"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:cx="34.780815"
|
||||
id="path2731"
|
||||
style="color:#000000;fill:url(#linearGradient2733);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
id="text2735"
|
||||
d="M 20.000000,27.317666 L 20.281716,27.317666 C 20.365481,27.317667 20.429701,27.336330 20.474376,27.373656 C 20.519345,27.410690 20.541829,27.463594 20.541830,27.532370 C 20.541829,27.601440 20.519345,27.654638 20.474376,27.691965 C 20.429701,27.728998 20.365481,27.747515 20.281716,27.747515 L 20.169735,27.747515 L 20.169735,27.975885 L 20.000000,27.975885 L 20.000000,27.317666 M 20.169735,27.440669 L 20.169735,27.624512 L 20.263640,27.624512 C 20.296558,27.624512 20.321982,27.616576 20.339911,27.600705 C 20.357839,27.584540 20.366804,27.561762 20.366804,27.532370 C 20.366804,27.502979 20.357839,27.480348 20.339911,27.464476 C 20.321982,27.448605 20.296558,27.440669 20.263640,27.440669 L 20.169735,27.440669 M 20.961979,27.428765 C 20.910250,27.428766 20.870131,27.447870 20.841621,27.486078 C 20.813112,27.524288 20.798857,27.578074 20.798857,27.647437 C 20.798857,27.716507 20.813112,27.770146 20.841621,27.808355 C 20.870131,27.846564 20.910250,27.865668 20.961979,27.865668 C 21.014001,27.865668 21.054267,27.846564 21.082778,27.808355 C 21.111287,27.770146 21.125541,27.716507 21.125542,27.647437 C 21.125541,27.578074 21.111287,27.524288 21.082778,27.486078 C 21.054267,27.447870 21.014001,27.428766 20.961979,27.428765 M 20.961979,27.305762 C 21.067787,27.305763 21.150671,27.336036 21.210630,27.396582 C 21.270588,27.457128 21.300567,27.540747 21.300568,27.647437 C 21.300567,27.753834 21.270588,27.837305 21.210630,27.897851 C 21.150671,27.958398 21.067787,27.988671 20.961979,27.988671 C 20.856464,27.988671 20.773580,27.958398 20.713328,27.897851 C 20.653370,27.837305 20.623391,27.753834 20.623391,27.647437 C 20.623391,27.540747 20.653370,27.457128 20.713328,27.396582 C 20.773580,27.336036 20.856464,27.305763 20.961979,27.305762 M 21.428420,27.317666 L 21.617994,27.317666 L 21.857387,27.769117 L 21.857387,27.317666 L 22.018305,27.317666 L 22.018305,27.975885 L 21.828730,27.975885 L 21.589338,27.524434 L 21.589338,27.975885 L 21.428420,27.975885 L 21.428420,27.317666 M 22.091489,27.317666 L 22.277095,27.317666 L 22.426991,27.552209 L 22.576887,27.317666 L 22.762935,27.317666 L 22.512079,27.698578 L 22.512079,27.975885 L 22.342344,27.975885 L 22.342344,27.698578 L 22.091489,27.317666"
|
||||
style="font-size:0.90290260;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;writing-mode:lr-tb;text-anchor:start;fill:#4a4a4a;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 36 KiB |
316
v0.3/design/icons/dialog-error_tango.svg
Normal file
|
@ -0,0 +1,316 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg1306"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/garrett/Source/tango-icon-theme/scalable/status"
|
||||
sodipodi:docname="dialog-error.svg">
|
||||
<defs
|
||||
id="defs1308">
|
||||
<linearGradient
|
||||
id="linearGradient3957">
|
||||
<stop
|
||||
style="stop-color:#fffeff;stop-opacity:0.33333334;"
|
||||
offset="0"
|
||||
id="stop3959" />
|
||||
<stop
|
||||
style="stop-color:#fffeff;stop-opacity:0.21568628;"
|
||||
offset="1"
|
||||
id="stop3961" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2536">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2538" />
|
||||
<stop
|
||||
style="stop-color:#ff1717;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2540" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2479">
|
||||
<stop
|
||||
style="stop-color:#ffe69b;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2481" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2483" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4126"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4128"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4130"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4126"
|
||||
id="radialGradient2169"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.500000,1.899196e-14,20.00000)"
|
||||
cx="23.857143"
|
||||
cy="40.000000"
|
||||
fx="23.857143"
|
||||
fy="40.000000"
|
||||
r="17.142857" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient2485"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient2542"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient3046"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient3048"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient3064"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient3066"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3957"
|
||||
id="linearGradient3963"
|
||||
x1="21.993773"
|
||||
y1="33.955299"
|
||||
x2="20.917078"
|
||||
y2="15.814602"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4126"
|
||||
id="radialGradient3976"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.5,1.893048e-14,20)"
|
||||
cx="23.857143"
|
||||
cy="40.000000"
|
||||
fx="23.857143"
|
||||
fy="40.000000"
|
||||
r="17.142857" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient3978"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient3980"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3957"
|
||||
id="linearGradient3982"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="21.993773"
|
||||
y1="33.955299"
|
||||
x2="20.917078"
|
||||
y2="15.814602" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.21568627"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="27.043297"
|
||||
inkscape:cy="20.463852"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="925"
|
||||
inkscape:window-height="846"
|
||||
inkscape:window-x="234"
|
||||
inkscape:window-y="52"
|
||||
inkscape:showpageshadow="false"
|
||||
fill="#ef2929"
|
||||
gridempspacing="4" />
|
||||
<metadata
|
||||
id="metadata1311">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Rodney Dawes</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner, Garrett LeSage</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Dialog Error</dc:title>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Shadow">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(1.070555,0,0,0.525,-0.892755,22.5)"
|
||||
d="M 41 40 A 17.142857 8.5714283 0 1 1 6.7142868,40 A 17.142857 8.5714283 0 1 1 41 40 z"
|
||||
sodipodi:ry="8.5714283"
|
||||
sodipodi:rx="17.142857"
|
||||
sodipodi:cy="40"
|
||||
sodipodi:cx="23.857143"
|
||||
id="path6548"
|
||||
style="opacity:0.6;color:#000000;fill:url(#radialGradient3976);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4006">
|
||||
<path
|
||||
transform="matrix(0.920488,0,0,0.920488,2.368532,0.97408)"
|
||||
d="M 46.857143 23.928572 A 23.357143 23.357143 0 1 1 0.1428566,23.928572 A 23.357143 23.357143 0 1 1 46.857143 23.928572 z"
|
||||
sodipodi:ry="23.357143"
|
||||
sodipodi:rx="23.357143"
|
||||
sodipodi:cy="23.928572"
|
||||
sodipodi:cx="23.5"
|
||||
id="path1314"
|
||||
style="fill:url(#linearGradient3978);fill-opacity:1;fill-rule:nonzero;stroke:#b20000;stroke-width:1.08638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:type="arc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="matrix(0.856093,0,0,0.856093,1.818275,0.197769)"
|
||||
d="M 49.901535 26.635273 A 23.991123 23.991123 0 1 1 1.9192886,26.635273 A 23.991123 23.991123 0 1 1 49.901535 26.635273 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="23.991123"
|
||||
sodipodi:cy="26.635273"
|
||||
sodipodi:cx="25.910412"
|
||||
id="path3560"
|
||||
style="opacity:0.34659089;fill:#cc0000;fill-opacity:0;stroke:url(#linearGradient3980);stroke-width:1.16809607;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:type="arc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Error Box">
|
||||
<rect
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
style="fill:#efefef;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73876643;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451"
|
||||
id="rect2070"
|
||||
width="27.836435"
|
||||
height="7.1735945"
|
||||
x="10.078821"
|
||||
y="19.164932"
|
||||
transform="matrix(1.005876,0,0,1.115201,-0.138045,-2.372708)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="Glossy Shine">
|
||||
<path
|
||||
transform="matrix(1.002994,0,0,1.002994,-7.185874e-2,1.968356e-2)"
|
||||
sodipodi:nodetypes="czssc"
|
||||
id="path3955"
|
||||
d="M 43.370686,21.715486 C 43.370686,32.546102 33.016357,15.449178 24.695948,22.101874 C 16.569626,28.599385 4.0989837,34.292422 4.0989837,23.461806 C 4.0989837,12.377753 12.79438,2.0948032 23.625,2.0948032 C 34.455619,2.0948032 43.370686,10.884868 43.370686,21.715486 z "
|
||||
style="fill:url(#linearGradient3982);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
1145
v0.3/design/icons/dialog-information_tango.svg
Normal file
After Width: | Height: | Size: 44 KiB |
290
v0.3/design/icons/dialog-warning_tango.svg
Normal file
|
@ -0,0 +1,290 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg1377"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/garrett/Source/tango-icon-theme/scalable/status"
|
||||
sodipodi:docname="dialog-warning.svg">
|
||||
<defs
|
||||
id="defs1379">
|
||||
<linearGradient
|
||||
y2="56.0523"
|
||||
x2="47.3197"
|
||||
y1="11.1133"
|
||||
x1="4.1914"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="aigrd1">
|
||||
<stop
|
||||
id="stop6490"
|
||||
style="stop-color:#D4D4D4"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop6492"
|
||||
style="stop-color:#E2E2E2"
|
||||
offset="0.3982" />
|
||||
<stop
|
||||
id="stop6494"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="56.0523"
|
||||
x2="47.3197"
|
||||
y1="11.1133"
|
||||
x1="4.1914"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient7451"
|
||||
xlink:href="#aigrd1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient4126"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4128"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4130"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="17.142857"
|
||||
fy="40.000000"
|
||||
fx="23.857143"
|
||||
cy="40.000000"
|
||||
cx="23.857143"
|
||||
gradientTransform="matrix(1,0,0,0.5,2.139286e-14,20)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient7449"
|
||||
xlink:href="#linearGradient4126"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient5250"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3922"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="4.1914"
|
||||
y1="11.1133"
|
||||
x2="47.3197"
|
||||
y2="56.0523" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient3924"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient3933"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3935"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="4.1914"
|
||||
y1="11.1133"
|
||||
x2="47.3197"
|
||||
y2="56.0523" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3946"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="4.1914"
|
||||
y1="11.1133"
|
||||
x2="47.3197"
|
||||
y2="56.0523" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient3948"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="14.757891"
|
||||
inkscape:cx="24"
|
||||
inkscape:cy="24"
|
||||
inkscape:current-layer="g7435"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1105"
|
||||
inkscape:window-height="1084"
|
||||
inkscape:window-x="157"
|
||||
inkscape:window-y="16"
|
||||
gridempspacing="4" />
|
||||
<metadata
|
||||
id="metadata1382">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Dialog Warning</dc:title>
|
||||
<dc:date>2005-10-14</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner, Garrett LeSage</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>dialog</rdf:li>
|
||||
<rdf:li>warning</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(1.566667,0.000000,0.000000,1.566667,-8.925566,-23.94764)"
|
||||
id="g7435">
|
||||
<path
|
||||
transform="matrix(0.817145,0,0,0.392908,1.555909,25.27761)"
|
||||
d="M 41 40 A 17.142857 8.5714283 0 1 1 6.7142868,40 A 17.142857 8.5714283 0 1 1 41 40 z"
|
||||
sodipodi:ry="8.5714283"
|
||||
sodipodi:rx="17.142857"
|
||||
sodipodi:cy="40"
|
||||
sodipodi:cx="23.857143"
|
||||
id="path6548"
|
||||
style="opacity:0.5;color:#000000;fill:url(#radialGradient7449);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
sodipodi:type="arc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<g
|
||||
id="g3937"
|
||||
transform="matrix(1,0,4.537846e-3,1,-0.138907,-1.394718e-15)"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(1,0,-8.726683e-3,1,0.328074,1.276596)"
|
||||
id="path6485"
|
||||
d="M 33.282781,38.644744 L 22.407791,18.394765 C 22.095292,17.832266 21.532792,17.519767 20.907793,17.519767 C 20.282793,17.519767 19.720294,17.894765 19.407795,18.457265 L 8.7828048,38.707245 C 8.5328048,39.207244 8.5328048,39.894744 8.8453048,40.394743 C 9.1578038,40.894743 9.6578038,41.144742 10.282804,41.144742 L 31.782782,41.144742 C 32.407781,41.144742 32.97028,40.832243 33.220281,40.332243 C 33.53278,39.832243 33.53278,39.207244 33.282781,38.644744 z "
|
||||
style="fill:#cc0000;fill-rule:nonzero;stroke:#9f0000;stroke-width:0.6382978;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="g6487"
|
||||
transform="matrix(0.625,0,-5.534934e-3,0.634254,6.164053,15.76055)"
|
||||
style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4">
|
||||
<linearGradient
|
||||
y2="56.052299"
|
||||
x2="47.319698"
|
||||
y1="11.1133"
|
||||
x1="4.1914001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6525">
|
||||
<stop
|
||||
id="stop6529"
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop6531"
|
||||
style="stop-color:#ffffff;stop-opacity:0.34020618;"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path6496"
|
||||
d="M 9.5,37.6 C 9.2,38.1 9.5,38.5 10,38.5 L 38.2,38.5 C 38.7,38.5 39,38.1 38.7,37.6 L 24.4,11 C 24.1,10.5 23.7,10.5 23.5,11 L 9.5,37.6 z "
|
||||
style="fill:url(#linearGradient3946);stroke:none" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(1,0,-8.726683e-3,1,0.318277,1.276596)"
|
||||
sodipodi:nodetypes="ccsccscccc"
|
||||
id="path1325"
|
||||
d="M 32.323106,38.183905 L 22.150271,19.265666 C 21.71698,18.45069 21.561698,18.189213 20.908406,18.189213 C 20.346525,18.189213 20.054127,18.57002 19.651305,19.339291 L 9.7489285,38.242296 C 9.1737649,39.303588 9.1128238,39.580228 9.3937644,40.047345 C 9.6747034,40.514462 10.032797,40.48902 11.356441,40.519491 L 30.974593,40.519491 C 32.206825,40.534726 32.483988,40.440837 32.70874,39.97372 C 32.989681,39.506602 32.867799,39.136 32.323106,38.183905 z "
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3948);stroke-width:0.63829792;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
|
||||
transform="matrix(0.555088,0,0,0.555052,7.749711,17.80196)"
|
||||
id="g6498"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true">
|
||||
<path
|
||||
style="stroke:none"
|
||||
d="M 23.9,36.5 C 22.6,36.5 21.6,35.5 21.6,34.2 C 21.6,32.8 22.5,31.9 23.9,31.9 C 25.3,31.9 26.1,32.8 26.2,34.2 C 26.2,35.5 25.3,36.5 23.9,36.5 L 23.9,36.5 z M 22.5,30.6 L 21.9,19.1 L 25.9,19.1 L 25.3,30.6 L 22.4,30.6 L 22.5,30.6 z "
|
||||
id="path6500"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
444
v0.3/design/icons/drive-cdrom_tango.svg
Normal file
|
@ -0,0 +1,444 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="drive-cdrom.svg"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/devices"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg2913"
|
||||
height="48px"
|
||||
width="48px"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient2351"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2353"
|
||||
offset="0"
|
||||
style="stop-color:#656565;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2355"
|
||||
offset="1"
|
||||
style="stop-color:#656565;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2345">
|
||||
<stop
|
||||
style="stop-color:#d9d9d9;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2347" />
|
||||
<stop
|
||||
style="stop-color:#eeeeee;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2349" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2329">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2331" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2333" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2315">
|
||||
<stop
|
||||
style="stop-color:#656565;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2317" />
|
||||
<stop
|
||||
style="stop-color:#656565;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2319" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2165">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2167" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2169" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="aigrd1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="14.9966"
|
||||
y1="11.1885"
|
||||
x2="32.511"
|
||||
y2="34.3075">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#EBEBEB"
|
||||
id="stop3034" />
|
||||
<stop
|
||||
offset="0.5"
|
||||
style="stop-color:#FFFFFF"
|
||||
id="stop3036" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#EBEBEB"
|
||||
id="stop3038" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6036">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6038" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6040" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4264"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4266"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4268"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4254"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4256"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4258"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4244">
|
||||
<stop
|
||||
id="stop4246"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4248"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4228">
|
||||
<stop
|
||||
id="stop4230"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4232"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="40.943935"
|
||||
x2="36.183067"
|
||||
y1="28.481176"
|
||||
x1="7.6046205"
|
||||
id="linearGradient4234"
|
||||
xlink:href="#linearGradient4228"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,-1.944537)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-6.821398)"
|
||||
r="20.935817"
|
||||
fy="2.9585190"
|
||||
fx="15.571491"
|
||||
cy="2.9585190"
|
||||
cx="15.571491"
|
||||
id="radialGradient4250"
|
||||
xlink:href="#linearGradient4244"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="47.620636"
|
||||
x2="44.096100"
|
||||
y1="4.4331360"
|
||||
x1="12.378357"
|
||||
id="linearGradient4260"
|
||||
xlink:href="#linearGradient4254"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,-1.944537)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-5.289283e-16,9.455693)"
|
||||
r="23.555494"
|
||||
fy="27.096155"
|
||||
fx="23.201941"
|
||||
cy="27.096155"
|
||||
cx="23.201941"
|
||||
id="radialGradient4270"
|
||||
xlink:href="#linearGradient4264"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient2155"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.952531,0.000000,0.000000,0.656725,1.345471,19.22026)"
|
||||
x1="14.9966"
|
||||
y1="11.1885"
|
||||
x2="32.511"
|
||||
y2="34.3075" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6036"
|
||||
id="linearGradient2161"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.738933,0.000000,0.000000,0.509459,6.215767,21.99197)"
|
||||
x1="10.501720"
|
||||
y1="3.6100161"
|
||||
x2="48.798885"
|
||||
y2="54.698483" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2165"
|
||||
id="radialGradient2171"
|
||||
cx="24.218407"
|
||||
cy="33.769478"
|
||||
fx="24.218407"
|
||||
fy="33.769478"
|
||||
r="17.677670"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.695000,0.000000,10.29969)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2351"
|
||||
id="linearGradient2321"
|
||||
x1="24.306797"
|
||||
y1="33.693432"
|
||||
x2="24.306797"
|
||||
y2="37.609333"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2329"
|
||||
id="linearGradient2335"
|
||||
x1="23.375000"
|
||||
y1="28.433596"
|
||||
x2="23.375000"
|
||||
y2="32.938416"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2329"
|
||||
id="linearGradient2337"
|
||||
x1="23.375000"
|
||||
y1="28.433596"
|
||||
x2="23.375000"
|
||||
y2="32.938416"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2315"
|
||||
id="linearGradient2341"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.799429,-9.653736e-16,6.604619)"
|
||||
x1="24.306797"
|
||||
y1="32.790924"
|
||||
x2="24.306797"
|
||||
y2="34.201233" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2345"
|
||||
id="linearGradient2343"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.800126,0.000000,0.000000,0.551649,4.725541,20.59938)"
|
||||
x1="26.332899"
|
||||
y1="34.172115"
|
||||
x2="26.193645"
|
||||
y2="21.987923" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="74"
|
||||
inkscape:window-x="294"
|
||||
inkscape:window-height="752"
|
||||
inkscape:window-width="810"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:cy="20.858772"
|
||||
inkscape:cx="24.951242"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.17254902"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Drive - CD-ROM</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>cdrom</rdf:li>
|
||||
<rdf:li>cd-rom</rdf:li>
|
||||
<rdf:li>optical</rdf:li>
|
||||
<rdf:li>drive</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:identifier />
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="pix"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
transform="matrix(1.052533,0.000000,0.000000,0.363113,-0.511757,24.92528)"
|
||||
d="M 46.757435 27.096155 A 23.555494 15.335379 0 1 1 -0.35355377,27.096155 A 23.555494 15.335379 0 1 1 46.757435 27.096155 z"
|
||||
sodipodi:ry="15.335379"
|
||||
sodipodi:rx="23.555494"
|
||||
sodipodi:cy="27.096155"
|
||||
sodipodi:cx="23.201941"
|
||||
id="path4262"
|
||||
style="opacity:0.56000000;color:#000000;fill:url(#radialGradient4270);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccsccccccccc"
|
||||
id="path4196"
|
||||
d="M 11.285690,6.0180852 C 10.660690,6.0180852 10.254441,6.3082654 10.004442,6.8618382 C 10.004441,6.8618382 3.5356915,23.965402 3.5356915,23.965402 C 3.5356915,23.965402 3.2856915,24.636961 3.2856915,25.746652 C 3.2856915,25.746652 3.2856915,35.396620 3.2856915,35.396620 C 3.2856915,36.479233 3.9434770,37.021622 4.9419415,37.021620 L 43.504440,37.021620 C 44.489293,37.021620 45.098190,36.303440 45.098190,35.177870 L 45.098190,25.527902 C 45.098190,25.527902 45.204153,24.757479 45.004440,24.215402 L 38.285690,7.0180888 C 38.101165,6.5061820 37.648785,6.0299905 37.160690,6.0180852 L 11.285690,6.0180852 z "
|
||||
style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.56571429;color:#000000;fill:url(#radialGradient2171);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2163"
|
||||
sodipodi:cx="24.218407"
|
||||
sodipodi:cy="33.769478"
|
||||
sodipodi:rx="17.677670"
|
||||
sodipodi:ry="12.285980"
|
||||
d="M 41.896076 33.769478 A 17.677670 12.285980 0 1 1 6.5407372,33.769478 A 17.677670 12.285980 0 1 1 41.896076 33.769478 z"
|
||||
transform="translate(0.883883,1.260942e-6)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path4170"
|
||||
d="M 3.2735915,25.052276 L 4.0381936,24.360061 L 41.647883,24.422561 L 45.110290,24.739859 L 45.110290,35.178391 C 45.110290,36.303960 44.503272,37.021722 43.518419,37.021722 L 4.9354314,37.021722 C 3.9369667,37.021722 3.2735915,36.479671 3.2735915,35.397058 L 3.2735915,25.052276 z "
|
||||
style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccccccs"
|
||||
id="path3093"
|
||||
d="M 3.5490842,23.969868 C 2.8347985,25.434154 3.5484686,26.362725 4.5847985,26.362725 C 4.5847985,26.362725 43.584797,26.362725 43.584797,26.362725 C 44.703844,26.338915 45.430035,25.350820 45.013368,24.219867 L 38.299082,7.0091618 C 38.114558,6.4972550 37.644320,6.0210632 37.156225,6.0091582 L 11.299083,6.0091582 C 10.674083,6.0091582 10.263369,6.3127314 10.013370,6.8663042 C 10.013370,6.8663042 3.5490842,23.969868 3.5490842,23.969868 z "
|
||||
style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path4201"
|
||||
d="M 44.796162,23.684152 C 44.859684,24.934126 44.382159,25.999992 43.474046,26.027902 C 43.474046,26.027902 5.3553296,26.027901 5.3553297,26.027902 C 4.0660978,26.027902 3.4875937,25.702955 3.2712790,25.159846 C 3.3630404,26.104178 4.0970964,26.809152 5.3553297,26.809152 C 5.3553296,26.809151 43.474046,26.809152 43.474046,26.809152 C 44.550053,26.776081 45.226851,25.385128 44.826210,23.814361 L 44.796162,23.684152 z "
|
||||
style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
|
||||
d="M 11.642515,6.4711801 C 11.040823,6.4711801 10.649724,6.7505387 10.409049,7.2834674 C 10.409048,7.2834674 3.9940341,23.874196 3.9940341,23.874196 C 3.9940341,23.874196 3.7533573,24.520711 3.7533573,25.589019 C 3.7533573,25.589019 3.7533573,34.879115 3.7533573,34.879115 C 3.7533573,36.233855 4.1974134,36.506014 5.3478414,36.506014 L 43.034746,36.506014 C 44.357872,36.506014 44.569062,36.189617 44.569062,34.668522 L 44.569062,25.378426 C 44.569062,25.378426 44.671072,24.636735 44.478807,24.114873 L 37.885616,7.3088910 C 37.707973,6.8160745 37.334964,6.4826414 36.865071,6.4711801 L 11.642515,6.4711801 z "
|
||||
id="path4252"
|
||||
sodipodi:nodetypes="cccsccccccccc" />
|
||||
<g
|
||||
id="g2142"
|
||||
transform="matrix(0.933652,0.000000,0.000000,0.933652,1.612716,-0.367774)">
|
||||
<rect
|
||||
y="32.363384"
|
||||
x="5.3414402"
|
||||
height="3.8650389"
|
||||
width="37.930714"
|
||||
id="rect2151"
|
||||
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:0.42372879;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:round;stroke-linecap:square;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2321);color:#000000;opacity:1.0000000" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2155);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
|
||||
d="M 7.9921136,31.810344 C 7.7171786,32.641366 7.5233636,33.513742 7.5233636,34.404094 C 7.5233626,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.517511 40.702291,32.638143 40.429614,31.810344 L 24.867113,31.810344 C 26.706930,32.055511 28.210863,33.069699 28.210863,34.404094 C 28.210863,35.914562 26.401684,37.154094 24.210863,37.154094 C 22.020041,37.154094 20.210863,35.914562 20.210863,34.404094 C 20.210864,33.069699 21.714796,32.055511 23.554613,31.810344 L 7.9921136,31.810344 z "
|
||||
id="path3040" />
|
||||
<path
|
||||
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:#808080;fill-rule:nonzero;fill:url(#linearGradient2343)"
|
||||
d="M 7.8358636,32.341594 C 7.6633096,33.007401 7.5233636,33.702881 7.5233636,34.404094 C 7.5233636,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.702881 40.727168,33.007401 40.554614,32.341594 L 7.8358636,32.341594 z "
|
||||
id="path3049"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="opacity:0.10999996;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
|
||||
d="M 16.572139,31.835312 C 15.798652,32.755289 15.247183,33.294631 15.247183,34.422908 C 15.247182,37.895941 19.357577,40.629280 24.277804,40.629280 C 29.315180,40.629279 33.308425,37.815173 33.308425,34.422908 C 33.308425,33.278057 32.722182,32.749858 31.948602,31.835312 L 26.571647,31.835312 C 28.249533,32.378741 29.194088,33.072249 29.194088,34.422908 C 29.194089,36.280577 26.972214,37.805032 24.277804,37.805032 C 21.583392,37.805032 19.361520,36.280577 19.361520,34.422908 C 19.361520,33.071466 20.280853,32.378317 21.960294,31.835312 L 16.572139,31.835312 z "
|
||||
id="path3051"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:none;fill-rule:nonzero;fill-opacity:0.41807911;fill:#ffffff"
|
||||
d="M 18.573984,44.742880 L 22.362784,37.212044 C 21.485635,36.996354 20.814201,36.572930 20.390359,36.015734 L 10.011877,39.604017 C 11.761798,41.989464 14.806535,43.844478 18.573984,44.742880 z "
|
||||
id="path4214" />
|
||||
<path
|
||||
style="opacity:0.54644811;fill:none;fill-rule:nonzero;stroke:url(#linearGradient2161);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||
d="M 8.9118137,32.267515 C 8.6630467,33.007387 8.5077732,33.947164 8.5077732,34.740917 C 8.5077732,40.331493 16.102156,44.813068 24.210871,44.813068 C 32.319587,44.813067 39.713147,40.331492 39.713147,34.740917 C 39.713146,33.946625 39.529342,33.007846 39.280247,32.267515 L 8.9118137,32.267515 z "
|
||||
id="path5264"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<rect
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2341);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||
id="rect4963"
|
||||
width="37.863773"
|
||||
height="1.1911809"
|
||||
x="5.3414402"
|
||||
y="31.627470" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2335)"
|
||||
d="M 26.312500,30.250000 L 40.062500,30.250000 C 40.062500,30.250000 40.603959,31.370993 40.000000,33.625000 C 40.000000,33.625000 26.687500,33.125000 26.687500,33.125000 C 28.537859,31.274641 26.312500,30.250000 26.312500,30.250000 z "
|
||||
id="path2325"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path2327"
|
||||
d="M 22.098146,30.250000 L 8.3481460,30.250000 C 8.3481460,30.250000 7.8066870,31.370993 8.4106460,33.625000 C 8.4106460,33.625000 21.723146,33.125000 21.723146,33.125000 C 19.872787,31.274641 22.098146,30.250000 22.098146,30.250000 z "
|
||||
style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2337)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 21 KiB |
469
v0.3/design/icons/drive-harddisk_tango.svg
Normal file
|
@ -0,0 +1,469 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="drive-harddisk.svg"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg2913"
|
||||
height="48px"
|
||||
width="48px">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient2555">
|
||||
<stop
|
||||
id="stop2557"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e6e6e6;stop-opacity:1.0000000;"
|
||||
offset="0.50000000"
|
||||
id="stop2561" />
|
||||
<stop
|
||||
id="stop2563"
|
||||
offset="0.75000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#e1e1e1;stop-opacity:1.0000000;"
|
||||
offset="0.84166664"
|
||||
id="stop2565" />
|
||||
<stop
|
||||
id="stop2559"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4274">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.25490198;"
|
||||
offset="0.0000000"
|
||||
id="stop4276" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop4278" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4264"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4266"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4268"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4254"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4256"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4258"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4244">
|
||||
<stop
|
||||
id="stop4246"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4248"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4236"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4238"
|
||||
offset="0"
|
||||
style="stop-color:#eeeeee;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4240"
|
||||
offset="1"
|
||||
style="stop-color:#eeeeee;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4228">
|
||||
<stop
|
||||
id="stop4230"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4232"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4184">
|
||||
<stop
|
||||
id="stop4186"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#838383;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4188"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(0.795493,-1.325821)"
|
||||
y2="35.281250"
|
||||
x2="24.687500"
|
||||
y1="35.281250"
|
||||
x1="7.0625000"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4209"
|
||||
xlink:href="#linearGradient4184"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="40.943935"
|
||||
x2="36.183067"
|
||||
y1="28.481176"
|
||||
x1="7.6046205"
|
||||
id="linearGradient4234"
|
||||
xlink:href="#linearGradient4228"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="33.758667"
|
||||
x2="12.221823"
|
||||
y1="37.205811"
|
||||
x1="12.277412"
|
||||
id="linearGradient4242"
|
||||
xlink:href="#linearGradient4236"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.876862)"
|
||||
r="20.935817"
|
||||
fy="2.9585190"
|
||||
fx="15.571491"
|
||||
cy="2.9585190"
|
||||
cx="15.571491"
|
||||
id="radialGradient4250"
|
||||
xlink:href="#linearGradient4244"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="47.620636"
|
||||
x2="44.096100"
|
||||
y1="4.4331360"
|
||||
x1="12.378357"
|
||||
id="linearGradient4260"
|
||||
xlink:href="#linearGradient4254"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,0.000000,9.455693)"
|
||||
r="23.555494"
|
||||
fy="27.096155"
|
||||
fx="23.201941"
|
||||
cy="27.096155"
|
||||
cx="23.201941"
|
||||
id="radialGradient4270"
|
||||
xlink:href="#linearGradient4264"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="26.357183"
|
||||
x2="23.688078"
|
||||
y1="11.318835"
|
||||
x1="23.688078"
|
||||
id="linearGradient4272"
|
||||
xlink:href="#linearGradient4274"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2555"
|
||||
id="linearGradient2553"
|
||||
x1="33.431175"
|
||||
y1="31.964777"
|
||||
x2="21.747974"
|
||||
y2="11.780679"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="178"
|
||||
inkscape:window-x="462"
|
||||
inkscape:window-height="907"
|
||||
inkscape:window-width="999"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:cy="16.661091"
|
||||
inkscape:cx="21.494618"
|
||||
inkscape:zoom="16"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Drive - Hard Disk</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>hdd</rdf:li>
|
||||
<rdf:li>hard drive</rdf:li>
|
||||
<rdf:li>fixed</rdf:li>
|
||||
<rdf:li>media</rdf:li>
|
||||
<rdf:li>solid</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:identifier />
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="pix"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="cccsccccccccc"
|
||||
id="path4196"
|
||||
d="M 11.285690,7.9626278 C 10.660690,7.9626278 10.254441,8.2528080 10.004442,8.8063808 C 10.004441,8.8063808 3.5356915,25.909938 3.5356915,25.909938 C 3.5356915,25.909938 3.2856915,26.581497 3.2856915,27.691188 C 3.2856915,27.691188 3.2856915,37.341156 3.2856915,37.341156 C 3.2856915,38.423769 3.9434770,38.966158 4.9419415,38.966156 L 43.504440,38.966156 C 44.489293,38.966156 45.098190,38.247976 45.098190,37.122406 L 45.098190,27.472438 C 45.098190,27.472438 45.204153,26.702015 45.004440,26.159938 L 38.285690,8.9626314 C 38.101165,8.4507246 37.648785,7.9745331 37.160690,7.9626278 L 11.285690,7.9626278 z "
|
||||
style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path4170"
|
||||
d="M 3.2735915,26.996812 L 4.0381936,26.304597 L 41.647883,26.367097 L 45.110290,26.684395 L 45.110290,37.122927 C 45.110290,38.248496 44.503272,38.966258 43.518419,38.966258 L 4.9354314,38.966258 C 3.9369667,38.966258 3.2735915,38.424207 3.2735915,37.341594 L 3.2735915,26.996812 z "
|
||||
style="fill:url(#linearGradient4234);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccccccs"
|
||||
id="path3093"
|
||||
d="M 3.5490842,25.914404 C 2.8347985,27.378690 3.5484686,28.307261 4.5847985,28.307261 C 4.5847985,28.307261 43.584797,28.307261 43.584797,28.307261 C 44.703844,28.283451 45.430035,27.295356 45.013368,26.164403 L 38.299082,8.9537044 C 38.114558,8.4417976 37.644320,7.9656058 37.156225,7.9537008 L 11.299083,7.9537008 C 10.674083,7.9537008 10.263369,8.2572740 10.013370,8.8108468 C 10.013370,8.8108468 3.5490842,25.914404 3.5490842,25.914404 z "
|
||||
style="fill:url(#radialGradient4250);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<rect
|
||||
y="31.174183"
|
||||
x="7.8579960"
|
||||
height="5.5625000"
|
||||
width="17.625000"
|
||||
id="rect4174"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient4209);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.4089999;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
id="path4194"
|
||||
d="M 7.8579947,36.736680 C 7.8579947,36.736680 7.8579947,32.725195 7.8579947,32.725195 C 9.6935221,35.904421 16.154485,36.736680 20.795492,36.736680 C 20.795492,36.736680 7.8579947,36.736680 7.8579947,36.736680 z "
|
||||
style="opacity:0.81142857;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient4242)" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path4201"
|
||||
d="M 44.796162,25.628688 C 44.859684,26.878662 44.382159,27.944528 43.474046,27.972438 C 43.474046,27.972438 5.3553296,27.972437 5.3553297,27.972438 C 4.0660978,27.972438 3.4875937,27.647491 3.2712790,27.104382 C 3.3630404,28.048714 4.0970964,28.753688 5.3553297,28.753688 C 5.3553296,28.753687 43.474046,28.753688 43.474046,28.753688 C 44.550053,28.720617 45.226851,27.329664 44.826210,25.758897 L 44.796162,25.628688 z "
|
||||
style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
id="path4211"
|
||||
d="M 10.968750 10.156250 C 10.922675 10.356571 10.781250 10.543047 10.781250 10.750000 C 10.781250 11.698605 11.372230 12.539474 12.125000 13.343750 C 12.365268 13.189675 12.490117 12.989342 12.750000 12.843750 C 11.809691 12.027746 11.196604 11.127168 10.968750 10.156250 z M 37.625000 10.156250 C 37.396273 11.125866 36.782988 12.028676 35.843750 12.843750 C 36.117894 12.997332 36.247738 13.211990 36.500000 13.375000 C 37.257262 12.568344 37.812500 11.701956 37.812500 10.750000 C 37.812500 10.543047 37.670906 10.356571 37.625000 10.156250 z M 39.812500 18.593750 C 39.198709 22.633861 32.513887 25.843750 24.281250 25.843750 C 16.068996 25.843751 9.4211001 22.650964 8.7812500 18.625000 C 8.7488928 18.822132 8.6562500 19.016882 8.6562500 19.218750 C 8.6562503 23.536697 15.645354 27.062501 24.281250 27.062500 C 32.917146 27.062500 39.937499 23.536698 39.937500 19.218750 C 39.937500 19.005826 39.848449 18.801394 39.812500 18.593750 z "
|
||||
style="opacity:0.69142857;color:#000000;fill:url(#linearGradient4272);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
transform="translate(8.838843e-2,0.176776)"
|
||||
d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z"
|
||||
sodipodi:ry="1.0164660"
|
||||
sodipodi:rx="1.3700194"
|
||||
sodipodi:cy="25.593554"
|
||||
sodipodi:cx="7.2036505"
|
||||
id="path4224"
|
||||
style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path4226"
|
||||
sodipodi:cx="7.2036505"
|
||||
sodipodi:cy="25.593554"
|
||||
sodipodi:rx="1.3700194"
|
||||
sodipodi:ry="1.0164660"
|
||||
d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z"
|
||||
transform="translate(33.96705,8.838804e-2)" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
|
||||
d="M 11.642515,8.4157227 C 11.040823,8.4157227 10.649724,8.6950813 10.409049,9.2280100 C 10.409048,9.2280100 3.9940341,25.818732 3.9940341,25.818732 C 3.9940341,25.818732 3.7533573,26.465247 3.7533573,27.533555 C 3.7533573,27.533555 3.7533573,36.823651 3.7533573,36.823651 C 3.7533573,38.178391 4.1974134,38.450550 5.3478414,38.450550 L 43.034746,38.450550 C 44.357872,38.450550 44.569062,38.134153 44.569062,36.613058 L 44.569062,27.322962 C 44.569062,27.322962 44.671072,26.581271 44.478807,26.059409 L 37.885616,9.2534336 C 37.707973,8.7606171 37.334964,8.4271840 36.865071,8.4157227 L 11.642515,8.4157227 z "
|
||||
id="path4252"
|
||||
sodipodi:nodetypes="cccsccccccccc" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
|
||||
d="M 40.500000,31.429166 L 40.500000,36.450101"
|
||||
id="path4282" />
|
||||
<path
|
||||
id="path4284"
|
||||
d="M 38.500000,31.488943 L 38.500000,36.509878"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
|
||||
d="M 36.500000,31.488943 L 36.500000,36.509878"
|
||||
id="path4286" />
|
||||
<path
|
||||
id="path4288"
|
||||
d="M 34.500000,31.488943 L 34.500000,36.509878"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
|
||||
d="M 32.500000,31.488943 L 32.500000,36.509878"
|
||||
id="path4290" />
|
||||
<path
|
||||
id="path4292"
|
||||
d="M 30.500000,31.488943 L 30.500000,36.509878"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
|
||||
<path
|
||||
id="path4294"
|
||||
d="M 39.500000,31.479065 L 39.500000,36.500000"
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 37.500000,31.538842 L 37.500000,36.559777"
|
||||
id="path4296" />
|
||||
<path
|
||||
id="path4298"
|
||||
d="M 35.500000,31.538842 L 35.500000,36.559777"
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 33.500000,31.538842 L 33.500000,36.559777"
|
||||
id="path4300" />
|
||||
<path
|
||||
id="path4302"
|
||||
d="M 31.500000,31.538842 L 31.500000,36.559777"
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
id="path4572"
|
||||
d="M 7.8750000,31.187500 L 7.8750000,36.718750 L 20.437500,36.718750 L 8.2187500,36.375000 L 7.8750000,31.187500 z "
|
||||
style="opacity:0.44000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.20571424;color:#000000;fill:url(#linearGradient2553);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.93365198;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2545"
|
||||
sodipodi:cx="25.000000"
|
||||
sodipodi:cy="19.562500"
|
||||
sodipodi:rx="14.875000"
|
||||
sodipodi:ry="6.6875000"
|
||||
d="M 39.875000 19.562500 A 14.875000 6.6875000 0 1 1 10.125000,19.562500 A 14.875000 6.6875000 0 1 1 39.875000 19.562500 z"
|
||||
transform="matrix(1.037815,0.000000,0.000000,1.060747,-1.632878,-2.094626)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 23 KiB |
390
v0.3/design/icons/drive-removable-media_tango.svg
Normal file
|
@ -0,0 +1,390 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="drive-removable-media.svg"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg2913"
|
||||
height="48px"
|
||||
width="48px">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient5699">
|
||||
<stop
|
||||
id="stop5701"
|
||||
offset="0"
|
||||
style="stop-color:#7a7a7a;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5703"
|
||||
offset="1"
|
||||
style="stop-color:#a5a5a5;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2681">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.47524753;"
|
||||
offset="0.0000000"
|
||||
id="stop2683" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2685" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2673">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2675" />
|
||||
<stop
|
||||
style="stop-color:#6f6f6f;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2677" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4264"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4266"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4268"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4254"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4256"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4258"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4244">
|
||||
<stop
|
||||
id="stop4246"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4248"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4228">
|
||||
<stop
|
||||
id="stop4230"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4232"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="40.943935"
|
||||
x2="36.183067"
|
||||
y1="28.481176"
|
||||
x1="7.6046205"
|
||||
id="linearGradient4234"
|
||||
xlink:href="#linearGradient4228"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,5.546300e-2)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.821398)"
|
||||
r="20.935817"
|
||||
fy="2.9585190"
|
||||
fx="15.571491"
|
||||
cy="2.9585190"
|
||||
cx="15.571491"
|
||||
id="radialGradient4250"
|
||||
xlink:href="#linearGradient4244"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="47.620636"
|
||||
x2="44.096100"
|
||||
y1="4.4331360"
|
||||
x1="12.378357"
|
||||
id="linearGradient4260"
|
||||
xlink:href="#linearGradient4254"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,5.546300e-2)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-6.731815e-16,9.455693)"
|
||||
r="23.555494"
|
||||
fy="27.096155"
|
||||
fx="23.201941"
|
||||
cy="27.096155"
|
||||
cx="23.201941"
|
||||
id="radialGradient4270"
|
||||
xlink:href="#linearGradient4264"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2673"
|
||||
id="radialGradient2679"
|
||||
cx="40.796875"
|
||||
cy="33.734375"
|
||||
fx="40.796875"
|
||||
fy="33.734375"
|
||||
r="0.98437500"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.253968,-7.218212e-15,7.218212e-15,1.253968,-10.36111,-8.567460)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2681"
|
||||
id="linearGradient2687"
|
||||
x1="25.785229"
|
||||
y1="32.363384"
|
||||
x2="25.785229"
|
||||
y2="35.670216"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2681"
|
||||
id="linearGradient2689"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="25.785229"
|
||||
y1="32.363384"
|
||||
x2="25.785229"
|
||||
y2="35.670216" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="10.596288"
|
||||
x2="16.127340"
|
||||
y1="22.705490"
|
||||
x1="34.420757"
|
||||
id="linearGradient5705"
|
||||
xlink:href="#linearGradient5699"
|
||||
inkscape:collect="always" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
fill="#f57900"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-y="163"
|
||||
inkscape:window-x="275"
|
||||
inkscape:window-height="683"
|
||||
inkscape:window-width="872"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:cy="10.253819"
|
||||
inkscape:cx="89.378036"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.36078431"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Drive - Removable</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>media</rdf:li>
|
||||
<rdf:li>removable</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:identifier />
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="pix"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="cccsccccccccc"
|
||||
id="path4196"
|
||||
d="M 11.285690,8.0180850 C 10.660690,8.0180850 10.254441,8.3082650 10.004442,8.8618380 C 10.004441,8.8618380 3.5356915,25.965402 3.5356915,25.965402 C 3.5356915,25.965402 3.2856915,26.636961 3.2856915,27.746652 C 3.2856915,27.746652 3.2856915,37.396620 3.2856915,37.396620 C 3.2856915,38.479233 3.9434770,39.021622 4.9419415,39.021620 L 43.504440,39.021620 C 44.489293,39.021620 45.098190,38.303440 45.098190,37.177870 L 45.098190,27.527902 C 45.098190,27.527902 45.204153,26.757479 45.004440,26.215402 L 38.285690,9.0180890 C 38.101165,8.5061820 37.648785,8.0299910 37.160690,8.0180850 L 11.285690,8.0180850 z "
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#535353;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path4170"
|
||||
d="M 3.2735915,27.052276 L 4.0381936,26.360061 L 41.647883,26.422561 L 45.110290,26.739859 L 45.110290,37.178391 C 45.110290,38.303960 44.503272,39.021722 43.518419,39.021722 L 4.9354314,39.021722 C 3.9369667,39.021722 3.2735915,38.479671 3.2735915,37.397058 L 3.2735915,27.052276 z "
|
||||
style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccccccs"
|
||||
id="path3093"
|
||||
d="M 3.5490842,25.969868 C 2.8347985,27.434154 3.5484686,28.362725 4.5847985,28.362725 C 4.5847985,28.362725 43.584797,28.362725 43.584797,28.362725 C 44.703844,28.338915 45.430035,27.350820 45.013368,26.219867 L 38.299082,9.0091620 C 38.114558,8.4972550 37.644320,8.0210630 37.156225,8.0091580 L 11.299083,8.0091580 C 10.674083,8.0091580 10.263369,8.3127310 10.013370,8.8663040 C 10.013370,8.8663040 3.5490842,25.969868 3.5490842,25.969868 z "
|
||||
style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
id="path4201"
|
||||
d="M 43.562434,27.674347 C 43.562434,27.674347 5.4437179,27.674346 5.4437180,27.674347 C 4.1544861,27.674347 3.5317878,27.437788 3.3154731,26.894679 C 3.4072345,27.839011 4.1854847,28.455597 5.4437180,28.455597 C 5.4437179,28.455596 43.562434,28.455597 43.562434,28.455597 C 44.638441,28.422526 45.301832,27.596846 45.047181,26.300495 C 44.913133,27.142077 44.470547,27.646437 43.562434,27.674347 z "
|
||||
style="opacity:1.0000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path5637"
|
||||
d="M 38.344670,9.2120874 C 38.344670,9.2120874 44.500000,24.750000 44.500000,24.750000 C 43.881282,24.352252 43.618718,24.036612 43.000000,24.125000 L 5.2500000,24.125000 C 4.5428932,24.125000 3.8383883,24.875000 3.8383883,24.875000 L 10.125000,8.8750000 C 10.258882,8.3753463 10.748699,8.0732233 11.411612,8.0732233 L 36.830806,7.9848350 C 38.156631,8.1616117 38.123699,8.5933690 38.344670,9.2120874 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient5705);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1;fill:#686868"
|
||||
d="M 44.707773,25.362009 C 44.373548,25.128501 44.072800,25.167489 43.518240,25.139579 C 43.518240,25.139579 4.7366112,24.874414 4.7366112,24.874414 C 4.1620870,24.918608 3.4957121,25.684093 3.4957121,25.684093 C 3.4957121,25.684093 4.0667741,24.284062 4.0667741,24.284062 C 4.0667741,24.284062 4.4064556,23.120892 5.6646889,23.120892 C 5.6646888,23.120893 42.855327,23.120892 42.855327,23.120892 C 43.577781,23.153963 44.022560,23.550547 44.207491,24.016460 L 44.707773,25.362009 z "
|
||||
id="path5697"
|
||||
sodipodi:nodetypes="cccsccccc" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
|
||||
d="M 11.642515,8.4711800 C 11.040823,8.4711800 10.649724,8.7505390 10.409049,9.2834670 C 10.409048,9.2834670 3.9940341,25.874196 3.9940341,25.874196 C 3.9940341,25.874196 3.7533573,26.520711 3.7533573,27.589019 C 3.7533573,27.589019 3.7533573,36.879115 3.7533573,36.879115 C 3.7533573,38.233855 4.1974134,38.506014 5.3478414,38.506014 L 43.034746,38.506014 C 44.357872,38.506014 44.569062,38.189617 44.569062,36.668522 L 44.569062,27.378426 C 44.569062,27.378426 44.671072,26.636735 44.478807,26.114873 L 37.885616,9.3088910 C 37.707973,8.8160750 37.334964,8.4826410 36.865071,8.4711800 L 11.642515,8.4711800 z "
|
||||
id="path4252"
|
||||
sodipodi:nodetypes="cccsccccccccc" />
|
||||
<g
|
||||
id="g2142"
|
||||
transform="matrix(0.828197,0.000000,0.000000,0.610240,4.176000,11.16143)"
|
||||
style="fill:url(#linearGradient2687);fill-opacity:1.0000000">
|
||||
<rect
|
||||
y="32.363384"
|
||||
x="5.3414402"
|
||||
height="3.8650389"
|
||||
width="37.930714"
|
||||
id="rect2151"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2689);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:0.71428573;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 8.6250000,33.250000 C 8.6250000,33.250000 9.0696486,34.066942 9.8651437,34.022748 C 9.8651437,34.022748 40.715385,34.000000 40.715385,34.000000 C 40.671191,31.569320 40.027885,30.881430 40.027885,30.881430 L 40.062500,33.312500 L 8.6250000,33.250000 z "
|
||||
id="path1899"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2679);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||
id="path2671"
|
||||
sodipodi:cx="41.015625"
|
||||
sodipodi:cy="33.984375"
|
||||
sodipodi:rx="0.98437500"
|
||||
sodipodi:ry="0.98437500"
|
||||
d="M 42.000000 33.984375 A 0.98437500 0.98437500 0 1 1 40.031250,33.984375 A 0.98437500 0.98437500 0 1 1 42.000000 33.984375 z"
|
||||
transform="matrix(1.380952,0.000000,0.000000,1.380952,-15.62500,-10.94643)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 18 KiB |
512
v0.3/design/icons/globe-lips.svg
Normal file
After Width: | Height: | Size: 28 KiB |
1004
v0.3/design/icons/gnome-dev-removable-usb_nuvola.svg
Normal file
After Width: | Height: | Size: 41 KiB |
1195
v0.3/design/icons/gnome-globe_nuvola.svg
Normal file
After Width: | Height: | Size: 72 KiB |
199
v0.3/design/icons/go-down_tango.svg
Normal file
|
@ -0,0 +1,199 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="go-down.svg"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg11300"
|
||||
height="48px"
|
||||
width="48px"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient1442">
|
||||
<stop
|
||||
id="stop1444"
|
||||
offset="0"
|
||||
style="stop-color:#73d216" />
|
||||
<stop
|
||||
id="stop1446"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4e9a06" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8662"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop8664"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop8666"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8650"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop8652"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop8654"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8662"
|
||||
id="radialGradient1444"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.614716e-15,16.87306)"
|
||||
cx="24.837126"
|
||||
cy="36.421127"
|
||||
fx="24.837126"
|
||||
fy="36.421127"
|
||||
r="15.644737" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1442"
|
||||
id="radialGradient1469"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.871885e-16,-0.843022,1.020168,2.265228e-16,0.606436,42.58614)"
|
||||
cx="35.292667"
|
||||
cy="20.494493"
|
||||
fx="35.292667"
|
||||
fy="20.494493"
|
||||
r="16.956199" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8650"
|
||||
id="radialGradient1471"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(3.749427e-16,-2.046729,-1.557610,-2.853404e-16,44.11559,66.93275)"
|
||||
cx="15.987216"
|
||||
cy="1.5350308"
|
||||
fx="15.987216"
|
||||
fy="1.5350308"
|
||||
r="17.171415" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="885"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:cy="23.239067"
|
||||
inkscape:cx="30.291728"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.25490196"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
fill="#4e9a06"
|
||||
stroke="#4e9a06" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Go Down</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>go</rdf:li>
|
||||
<rdf:li>lower</rdf:li>
|
||||
<rdf:li>down</rdf:li>
|
||||
<rdf:li>arrow</rdf:li>
|
||||
<rdf:li>pointer</rdf:li>
|
||||
<rdf:li>></rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
< |