first import

This commit is contained in:
wbaumann 2009-04-14 19:54:53 +00:00
commit d12d77382e
60 changed files with 28149 additions and 0 deletions

90
AUTHORS Normal file
View File

@ -0,0 +1,90 @@
davfs2 AUTHORS 2009-04-12
-------------------------

This package is based on davfs2 0.2.3 by
Sun Kim <hunkim@cs.ucsc.edu> and
Robert Spier <robrt@users.sourceforge.net>.
This version is a complete rewrite by Werner Baumann.
The kernel interface definitions are copyright by
Miklos Szeredi and Carnegie Mellon University, respectively.


Copyright:
==========

Copyright (c) 2005, 2006, 2007, 2008, 2009
Werner Baumann <werner.baumann@onlinehome.de>

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.

The complete text of the GNU General Public License can be found in `COPYING'.


Copyright for the interface to the Fuse kernel module (fuse_kernel.h):
======================================================================

Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.


Copyright for the interface to the Coda kernel module (coda.h):
===============================================================

Coda: an Experimental Distributed File System
Release 4.0

Copyright (c) 1987-1999 Carnegie Mellon University
All Rights Reserved

Permission to use, copy, modify and distribute this software and its
documentation is hereby granted, provided that both the copyright
notice and this permission notice appear in all copies of the
software, derivative works or modified versions, and any portions
thereof, and that both notices appear in supporting documentation, and
that credit is given to Carnegie Mellon University in all documents
and publicity pertaining to direct or indirect use of this code or its
derivatives.

CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS KNOWN TO HAVE BUGS,
SOME OF WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON ALLOWS
FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION. CARNEGIE MELLON
DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER
RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE OR OF
ANY DERIVATIVE WORK.

Carnegie Mellon encourages users of this software to return any
improvements or extensions that they make, and to grant Carnegie
Mellon the rights to redistribute these changes without encumbrance.

13
BUGS Normal file
View File

@ -0,0 +1,13 @@
davfs2 known bugs 2008-07-13
----------------------------

If a filename contains a "/"-character, it will be displayed, but it
cannot be accessed.

Report Bugs
-----------

Please report bugs at
http://savannah.nongnu.org/support/?func=additem&group=davfs2 or
http://savannah.nongnu.org/support/?func=additem&group=davfs2

675
COPYING Normal file
View File

@ -0,0 +1,675 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for
software and other kinds of works.

The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. 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
them 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 prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. 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.

Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS

0. Definitions.

"This License" refers to version 3 of the GNU General Public License.

"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.

To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

A "covered work" means either the unmodified Program or a work based
on the Program.

To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

1. Source Code.

The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.

A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

The Corresponding Source for a work in source code form is that
same work.

2. Basic Permissions.

All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

4. Conveying Verbatim Copies.

You may convey 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;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.

b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".

c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.

d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.

A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

6. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.

b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.

c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.

d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.

e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.

A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

7. Additional Terms.

"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or

b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or

c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or

d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or

e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or

f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.

All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

8. Termination.

You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

9. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.

An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

11. Patents.

A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".

A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

12. No Surrender of Others' Freedom.

If 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 convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

13. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

14. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of
the GNU 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 that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

15. Disclaimer of Warranty.

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.

16. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
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.

17. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

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
state 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 3 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, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

<program> Copyright (C) <year> <name of author>
This program 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, your program's commands
might be different; for a GUI interface, you would use an "about box".

You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

The GNU 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 Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

885
ChangeLog Normal file
View File

@ -0,0 +1,885 @@
ChangeLog for davfs2
--------------------

2009-04-14 Werner Baumann (werner.baumann@onlinehome.de)
* Reverted to fuse_kernel.h from 2.5.3 because of
different length of struct fuse_attr.

2009-04-13 Werner Baumann (werner.baumann@onlinehome.de)
* Updated fuse_kernel.h
* Removed unused licence documents.

2009-04-12 Werner Baumann (werner.baumann@onlinehome.de)
* Removed support for coda kernel version 2 and
fuse kernel version 5.
* Simplify coda.h and select alternative license.

2009-04-12 Werner Baumann (werner.baumann@onlinehome.de)
* bootstrap:
Inserted force options again. Restore COPYING
from COPYING.davfs2.

2009-04-06 Werner Baumann (werner.baumann@onlinehome.de)
* bootstrap:
Removed --force and --force-missing options.
* COPYING:
Added missing licenses.

2009-04-04 Werner Baumann (werner.baumann@onlinehome.de)
* cahe.c, dav_lookup:
If node not found update directory with file_refresh.

2009-03-29 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, mount.davfs.8:
Remove deprecated mount options (askauth, locks,
useproxy).
* defaults.h, davfs2.conf, davfs2.conf.5:
Option if_match_bug now defaults to 0.

2009-03-29 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, mount_davfs.h, webdav.c, defaults.h:
Remove support for WebDAV-property displayname.

2009-03-29 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c:
Changed handling of directory cache files to fix
bug in handling "rm -r".

2009-03-28 Werner Baumann (werner.baumann@onlinehome.de)
* Undo FUSE_ATOMIC_O_TRUNC.

2009-03-24 Werner Baumann (werner.baumann@onlinehome.de)
* fuse7_kernel.h:
New version from linux 2.6.26
* dav_fuse7.c, fuse_init:
Use flag FUSE_ATOMIC_O_TRUNC.

2009-03-22 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, dav_setattr:
Set upload-time if size is changed.
* cache.c:
Added function get_upload_time.
* cache.c, update_cache_file:
Only upload dirty files if upload-time is reached.
(Fix empty PUTs on setattr before open.)

2009-03-15 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, split_proxy:
Only set port if given in args.
* mount_davfs.c, read_secrets:
Only compare proxy-port if given in secrets file.
* mount_davfs.c new_args:
Fix getuid() (not getuid).

2009-01-27 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, delete_args:
Remove double free of args->p_passwd (fixes bug
2351083, Debian bug #512625).

2009-01-02 Werner Baumann (werner.baumann@onlinehome.de)
* Added copyright notices.
* Updated to GPL version 3.
* mount_davfs: replace petpass with user_input_hidden.

2008-11-23 Werner Baumann (werner.baumann@onlinehome.de)
* Default for use_expect100 is now 0

2008-11-23 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c:
Add function lock_by_path.
Remove global variable suri.

2008-10-26 Werner Baumann (werner.baumann@onlinehome.de)
* unifying coding style
* webdav.c, dav_init_connection:
Use %-encoded path.

2008-09-08 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, block_writer:
Add mode parameter in call of open(); remove
O_CREATE (thanks Marcin Zajączkowski)
* cache.c, open_file:
Add mode parameter in call of open().

2008-08-08 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_head:
Fix bug 2042177 (*length, not *mtime).

2008-07-12 Werner Baumann (werner.baumann@onlinehome.de)
* Released version 1.3.3

2008-06-30 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, get_options:
Missing break in first case.

2008-06-24 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, dav_setattr:
Set file times of the cache file too when they
are changed by setattr.

2008-06-17 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_put:
Only use etag in conditional PUT, even in second try.

2008-06-12 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, dav_tidy_cache:
Better debug messages, including neon-error.

2008-05-30 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, parse_index:
Finish parsing, before checking for parse error
(ne_xml_parse seems not allways to report
errors otherwise)
* cache.c, write_node:
Put path, name, cache_path, etag and mime_type
in CDATA-sections.

2008-05-23 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, mount_davfs.h, webdav.c, webdav.h:
Add ne_set_connect_timeout. (Thanks Martin Higham)

2008-05-17 Werner Baumann (werner.baumann@onlinehome.de)
* Released version 1.3.2 (really)

2008-05-16 Werner Baumann (werner.baumann@onlinehome.de)
* Not yet released 1.3.2
* cache.c, resize_cache:
Fixed another bug calculating cache_size.

2008-05-15 Werner Baumann (werner.baumann@onlinehome.de)
* Released version 1.3.2

2008-05-13 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, xml_..:
Concatenate subsequent cdata_callbacks. Fixes
growing-cache-bug when using libexpat.
* cache.c, clean_cache:
Fixed error parsing table.
* cache.c, update_cache_file:
Fixed error calculating cache_size.

2008-05-04 Werner Baumann (werner.baumann@onlinehome.de)
* Version 1.3.1 released.

2008-04-29 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_get_file:
Typo: If-Non-Match -> If-None-Match

2008-04-09 Werner Baumann (werner.baumann@onlinehome.de)
* dav_fuse7.c, fuse_init:
Reduce max_write according to bug in fuse.
* dav_fuse7.c, fuse_stat:
Increase bsize to as many pages as fit in max_write.

2008-04-05 Werner Baumann (werner.baumann@onlinehome.de)
* Improved debug output

2008-04-02 Werner Baumann (werner.baumann@onlinehome.de)
* configure.ac:
Add neon 0.28 (no API-changes)

2008-03-24 Werner Baumann (werner.baumann@onlinehome.de)
* man/davfs2.conf.5:
Clarified option servercert.

2008-03-24 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, change_persona:
Fixed bug in message: dav_user not dav_group
* man/davfs2.conf.5:
Options dav_user, dav_group: substitute USER
and GROUP, not PACKAGE.

2008-02-07 Werner Baumann (werner.baumann@onlinehome.de)
* Disable cookie support an conditional LOCK for Neon 0.25

2008-02-04 Werner Baumann (werner.baumann@onlinehome.de)
* Version 1.3.0 released.

2008-02-04 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, clean_cache:
Create backup-files for orphaned files in cache.

2008-02-04 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, cache.c:
Quick termination on SIGTERM; store flags dirty and
remote_exists of dirty files in index.

2008-02-03 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, termination_handler:
Don't call umount in termination handler.

2008-02-02 Werner Baumann (werner.baumann@onlinehome.de)
* dav_fuse7.c, dav_fuse5.c, dav_coda2.c, dav_coda3.c:
Only call dav_tidy_cache once every DAV_DELAY_UPLOAD
seconds as long as there are upcalls from kernel.

2008-02-02 Werner Baumann (werner.baumann@onlinehome.de)
*webdav.c, update_cookie:
Fixed bug: old cookie not removed.

2008-02-02 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_put:
No HEAD if !has_if_match_bug and !*exists.

2008-02-01 Werner Baumann (werner.baumann@onlinehome.de)
* Removed option idle_time.
Renamed option delay_uploads -> delay_upload.
Set delayed upload-time for node on close.

2008-01-31 Werner Baumann (werner.baumann@onlinehome.de)
*webdav.c, prop_result:
Add double quotes on Etag if missing.

2008-01-11 Werner Baumann (werner.baumann@onlinehome.de)
* umount_davfs.c:
Remove option -C from ps-command (BSC-option).

2008-01-05 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, prop_result:
ctime is in iso-8601 format (Bug 1863061).
* webdav.c, prop_result, dav_put:
Fixed bug in drop_weak_etags.
* webdav.c, dav_put:
Only use etag in conditional PUT.

2007-12-31 Werner Baumann (werner.baumann@onlinehome.de)
* Renamed option: misused_weak_etag -> drop_weak_etags

2007-12-27 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_get_file, dav_head, dav_put:
Honour misused_weak_etag

2007-12-27 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, webdav.h, mount_davfs.c, mount_davfs.h,
defaults.h;
New option: misused_weak_etag

2007-12-26 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_put:
Don't even use "if-match" with etag when has_if_match_bug.

2007-12-26 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, read_secrets:
Allow keyword "proxy" instead of DN in proxy line.
Fix bugs in certificate path names.

2007-12-25 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, read_secrets:
Allow mountpoint instead of url in secrets file.

2007-12-25 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, parse_line:
Allow none-ascii characters in config files.
* mount_davfs.h, mount_davfs.c, webdav.h, webdav.c,
defaults.h:
New options: precheck and ignore_dav_header

2007-12-23 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, mount_davfs.h, mount_davfs.c, defaults.h:
Added very simple cookie support.

2007-12-15 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, webdav.h, cache.c, cache.h:
Support dav-quota.
Change members of dav_stat to off_t.

2007-12-15 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, xml_cdata_date, write_node:
Use epoch and ISO-format for time. Human readable
string for information only.

2007-12-13 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, webdav.h, cache.c:
New functions for converting character encoding.
* cache.c, update_node:
Check for changed name before other checks.
* webdav.c, dav_move:
Remove prop displayname if used.

2007-12-11 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, prop_result, dav_init_webdav:
ne_propset_value always is in utf-8; don't decode
from utf-16.

2007-12-10 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c:
Add list of changed nodes. New dav_tidy_cache function.
Write times in readable format to index file.

2007-12-08 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c:
Change cache_size whenever a file changes (do not
calculate in dav_tidy_cache).

2007-12-01 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_lock:
create suri->path after HEAD-request

2007-11-30 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, cache.h, dav_fuse7.c:
Support getxattr for user.mime_type.

2007-11-25 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, log_writer:
Use Loglevel LOG_DEBUG.

2007-11-22 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.h, mount_davfs.c, webdab.h, webdav.c,
davfs2.conf.5:
Added option "add_header".

2007-11-22 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, webdav.c:
Use conditional LOCK if possible.

2007-11-17 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, move_dirty:
Don't try to delete none-existant file.

2007-11-17 Werner Baumann (werner.baumann@onlinehome.de)
* davfs2.conf.5, mount_davfs.h, mount_davfs.c, webdav.c:
Add option if_match_bug. Use conditional PUT if
possible.

2007-11-11 Werner Baumann (werner.baumann@onlinehome.de)
* configure.ac, cache.c, webdav.c:
Remove support for neon 0.24

2007-11-06 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, debug_opts_neon:
Remove NE_DBG_XML from debug most.

2007-11-05 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, put_file:
Added support for Neon 0.27

2007-11-03 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, dav_tidy_cache:
Don't check more than 100 nodes in one run.

2007-11-03 Werner Baumann (werner.baumann@onlinehome.de)
* defaults.h, mount_davfs.h, mount_davfs.c:
Added option delay_uploads
* cache.h, cache.c, dav_init_cache, dav_close:
Delay uploads only if !delay_uploads

2007-11-03 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, move_reg, dav_rename:
Send MOVE request for dirty files.
* webdav.c, dav_move:
Remove locks on source file.
* defaults.h:
use_displayname defaults to no

2007-11-02 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_head:
Check header Content-Length.
* webdav.c, dav_put:
If a file should not exist, allow for file with
length 0 (SVN-Bug 2896).

2007-08-31 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, get_error:
Return EIO on NE_LOOKUP, so mounting will fail with
appropriate error message.

2007-07-30 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, read_config:
Disabled 'porxy' option in user configuration file.
* mount_davfs.c, parse_config:
Read proxy environment variables only if the mounting
user is root.

2007-07-29 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, read_no_proxy_list:
Allow for '*', portnumber and spaces in no_proxy.

2007-07-28 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c:
Added function proxy_from_env to parse different kind
of xxx_proxy environment variables. (Bug 1762423)
Added function read_no_proxy_list.

2007-07-21 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, init_webdav, log_writer:
Splitt messages into chunks < 512 char.
Escape '%'-character in log-messages.

2007-07-07 Werner Baumann (werner.baumann@onlinehome.de)
* Use GNU Autoconf 2.61, GNU Automake 1.10,
GNU gettext-tools 0.16.1
* mount_davfs.c, parse_secrets:
Accept lines without terminating newline for username
and p_user.
* Version 1.2.2 released

2007-06-29 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: update_node
If a node changed remotely, only create a new node
when the existing node is dirty.
* kernel_interface.c, kernel_interface.h:
Make fuse the default kernel file system.

2007-06-10 Werner Baumann (werner.baumann@onlinehome.de)
* davfs2.m4, src/Makefile.am:
add variable ssbindir; create symbolic link only when
sbindir not equal to ssbindir

2007-06-08 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, main:
properly release tty (bug 1730992, patch by Tero Pelander)
* man/Makefile.am, man/de/Makefile.am, man/es/Makefile.am:
enable concurrent compilation (bug 1730979,
patch by Tero Pelander)

2007-05-29 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, dav_init_webdav, dav_init_connection:
register lock_store *after* checking server capabilities

2007-05-28 Werner Baumann (werner.baumann@onlinehome.de)
* Makefile.am: correct $(docdir)

2007-05-21 Werner Baumann (werner.baumann@onlinehome.de)
* rename INSTALL to INSTALL.davfs2 to avoid name clash
with generic INSTALL

2007-05-21 Werner Baumann (werner.baumann@onlinehome.de)
* made debug a runtime option

2007-05-17 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c:
add custom stream to redirect neon debug messages
to syslog
remove unnecessary code from dav_close_webdav

2007-04-26 Werner Baumann (werner.baumann@onlinehome.de)
* released version 1.2.1

2007-04-15 Werner Baumann (werner.baumann@onlinehome.de)
* corrected po4a.conf for partial translations
* added Spanish davfs2.conf.5 from Luciano
* webdav.c, prop_result:
replacement for / in file names depends from position
(slash-, -slash-, -slash)

2007-04-07 Werner Baumann (werner.baumann@onlinehome.de)
* Released version 1.2.0

2007-04-06 Werner Baumann (werner.baumann@onlinehome.de)
* etc/Makefile.am:
create backup of davfs2.conf and secrets on install
* src/Makefile.am: simplified

2007-04-03 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: add_node
don't reset x-bit if is_exec == -1

2007-04-01 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, webdav.c, cache.c:
mount even when OPTIONS request times out

2007-03-25 Werner Baumann (werner.baumann@onlinehome.de)
* use autopoint to add gettextize-files
* use LINGUAS variable to decide which man pages
to install

2007-03-10 Werner Baumann (werner.baumann@onlinehome.de)
* use po4a for translated man pages

2007-03-05 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, parse_commandline:
added dummy options -v and -w

2007-03-02 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: make ssl error messages more clear
* mount_davfs.c, read_config: clicert_pw not cliecert

2007-03-02 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: cache_dir is owned by mount.davfs process
backup_dir is owned by default_user

2007-03-02 Werner Baumann (werner.baumann@onlinehome.de)
* added option ignore_home
* added davfs2.conf man page

2007-02-28 Werner Baumann (werner.baumann@onlinehome.de)
* Added support for client certificates
* Added support for server certificates that are verified
by the user and can't be verified the normal way
* Added dav_user, when invoked by root change id to dav_user
* Changed default dav_group to 'davfs2'

2007-02-25 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, write_mtab_entry:
List options; no username if user is root.

2007-02-20 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, webdav.c: review charset conversion
* mount-davfs.c: added option _netdev

2007-02-14 Werner Baumann (werner.baumann@onlinehome.de)
* Added NLS.

2007-02-13 gettextize <bug-gnu-gettext@gnu.org>

* gettext.m4: New file, from gettext-0.14.4.
* iconv.m4: New file, from gettext-0.14.4.
* lib-ld.m4: New file, from gettext-0.14.4.
* lib-link.m4: New file, from gettext-0.14.4.
* lib-prefix.m4: New file, from gettext-0.14.4.
* progtest.m4: New file, from gettext-0.14.4.
* Makefile.am (EXTRA_DIST): Add the new files.
Add config/config.rpath.
(SUBDIRS): Add po.
* configure.ac (AC_CONFIG_FILES): Add po/Makefile.in.

2007-02-12 Werner Baumann (werner.baumann@onlinehome.de)
* Use automake.
Reorganize directory structure, trying to meet
GNU standards.

2007-02-03 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: dav_setattr
Check return value of getpwuid and getgrgid.

2006-12-28 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c, mount_davfs.h, webdav.c, webdav.h,
cache.c, davfs2.conf, davfs2.conf.template:
Experimental character conversion for file and
directory names.

2006-12-26 Werner Baumann (werner.baumann@onlinehome.de)
* Released version 1.1.4

2006-12-17 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: dav_tidy_cache
Don't save backups.
* cache.c: dav_getattr, dav_lookup
Use dir_refresh (not file_refresh).
* defaults.h:
Reduce default dir_refresh to 60 seconds.

2006-11-30 Werner Baumann (werner.baumann@onlinehome.de)
* kernel_interface:
Try modprobe coda. Use full path of modprobe.
Send messages from modprobe to /dev/null.

2006-11-29 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: update_directory
Make update interval depend from calling function.

2006-11-29 Werner Baumann (werner.baumann@onlinehome.de)
* kernel_interface.c: init_fuse
buf_size minimum is FUSE_MIN_READ_BUFFER + 4096
* dav_fuse5.c, dav_fuse7.c: dav_fuse7_loop, fuse_init,
fuse_read, fuse_stat, fuse_write
Adjust buffer size.
*cache.c: move_dirty
Unlock src if created, else delete.

2006-11-27 Werner Baumann (werner.baumann@onlinehome.de)
* dav_fuse7.c: fuse_create
Removed O_EXCL and O_CREAT flags in call to dav_open.
* mount_davfs: main
Use options -il in call of umount program.

2006-11-19 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: Flush coda on create and mkdir.
* cache.c: dav_init_cache
Fixed name clash of parameters and global variables.
* cache.c, cache.h, dav_coda2.c, dav_coda3.c, dav_fuse5.c,
dav_fuse7.c: dav_setattr
Ignore ctime.

2006-11-19 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: dav_init_webdav
Changed default lock owner to <username>.
* webdav.c, cache.c: dav_init_webdav, dav_init_cache
Check server capabilities. If connection fails,
print neon error.
* cache.c: move_reg
Do not change etag and smtime of source node. Do
not lock or set execute.
* Time stamps revisited.

2006-11-18 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: dav_put
Do not check mtime if etag is present.
* cache.c: update_node
For cached files (includes dirty and open_write)
do not check mtime if etag is present.
* cache.c: tidy_cache, update_cache_file
Do not change mtime after PUT.
* cache.c, webdav.c: update_cache_file, dav_get_file
Only change mtime if a new version is retrieved.
* cache.c: dav_getattr, dav_lookup
Call attr_from_cache_file only if the file is open.

2006-11-12 Werner Baumann (werner.baumann@onlinehome.de)
* umount_davfs:
If canonicalize_file_name returns NULL, try
argv[optind].

2006-11-07 Werner Baumann (werner.baumann@onlinehome.de)
* Makefile.in: Added missing entries for umount.
* Released version 1.1.3

2006-11-02 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: move_reg, move_dirty
Do not backup destination.
webdav.c: dav_head
Destroy request *after* retrieving information.
* cache.h, cache.c: dav_node
Added dirty flag (mtime not always indicates changes).
* cache.c, webdav.c, webdav.h:
On PUT set Execute property before HEAD (IIS
changes Etag on PROPPATCH).
* Set utime on creation of files and directories.

2006-10-28 Werner Baumann (werner.baumann@onlinehome.de)
* Added umount helper umount.davfs and man page.

2006-10-28 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: is_cached, clean_tree, update_cache_file
Removed access()-call.
* mount_davfs.h, mount_davfs.c, cache.h, cache.c,
davfs2.conf, davfs2.conf.template:
Added option gui_optimize, adjusted names and
semantics of cache times.

2006-10-28 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: update_node, dav_tidy_cache, move_dirty
Update node->utime for regular files.

2006-10-23 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, cache.h, dav_fuse5.c, dav_fuse7.c:
Removed O_FSYNC (Debian Bug report logs - #394845).
It is BSD feature and not necessary.

2006-10-18 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: dav_init_cache
If connections fails with EAGAIN, try a second time.
* webdav.c, webdav.h, mount_davfs.c, mount_davfs.h,
defaults.h, debug.h:
Make 'Expect: 100-Continue' header a configuration option.

2006-10-16 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: dav_init_webdav
Initialize lock_timeout.

2006-10-08 Werner Baumann (werner.baumann@onlinehome.de)
* Released version 1.1.2

2006-10-08 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: prop_result
Normalize result->path.

2006-10-07 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: prop_result
test length of href and log error if too short
* mount_davfs.c: read_secrets
Added patch to allow lines without password [ 1572771 ]

2006-10-07 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c:
Fixed bug in treating missing trailing slash in
collection urls.

2006-10-05 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.h, mount_davfs.c, webdav.h, webdav.c:
Add configuration option use_displayname, use_proxy,
ask_auth and locks to configuration file.
useproxy, askauth and locks deprecated on
command line and in fstab. They are no longer
check in check_fstab.

2006-10-05 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: dav_get_collection
Check path for trailing slash; ctx.path must always
have a trailing slash.

2006-10-05 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: dav_write
Check for write errors.
* dav_coda2.c, kernel_interface.c:
Disable coda2 interface if pointers are 64 bit.
* dav_fuse5.c, dav_fuse7.c: fuse_write
Properly cast size_t into 32-bit member out->size.

2006-10-04 Werner Baumann (werner.baumann@onlinehome.de)
* coda2.h, coda3.h:
Commented out include of linux/time.h

2006-10-03 Werner Baumann (werner.baumann@onlinehome.de)
* Makefile.in, mount_davfs.c, README:
Wrong directory for documentation fixed.
(now: $prefix/share/doc/davfs2)
* Fixed bug in uninstall target.

2006-10-03 Werner Baumann (werner.baumann@onlinehome.de)
* Makefile.in: missing mount.davfs.8.in
* Version 1.1.1 released

2006-10-03 Werner Baumann (werner.baumann@onlinehome.de)
* Version 1.1.0 released.

2006-09-30 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: is_created, is_dirty, backup_node
Test for existence of cache_path.
* cache.c, cache.h, dav_fuse5.c, dav_fuse7.c:
dav_read, dav_write: removed parameter pid.

2006-09-28 Werner Baumann (werner.baumann@onlinehome.de)
* kernel-interface.c, kernel-interface.h, dav_fuse5.c,
dav_fuse7.c, mount_davfs.c, mount_davfs.h:
Evaluate fuse version by trial mounts.
Call specific kernel_interface msg_loop from main.
* cache.c, cache.h, dav_coda2.c, dav_coda3.c, dav_fuse5.c,
dav_fuse7.c:
Added parameter off to dav_write_dir_entry_fn, to
satisfy fuse7.
* mount_davfs.h, mount_davfs.c, webdav.c:
Added option lock_owner.
Added sections to davfs2.conf to allow different
settings for each mountable file system.
* mount_davfs.c:
No more URL encoding of urls. Use octal escapes in
fstab, escapes or quoting on the shell and in the
config files.

2006-09-24 Werner Baumann (werner.baumann@onlinehome.de)
* Added support for fuse kernel fs.
* Added large file support.
* Added dav_fuse7.c, dav_fuse5.c, dav_coda2.c, dav_coda3.c,
kernel_interface.c, fuse5_kernel.h, fuse7_kernel.h, coda2.h,
coda3.h, kernel_interface.h.
* Removed dav_coda.c, dav_coda.h.
* Fixed some illegal pointer bugs.

2006-08-27 Werner Baumann (werner.baumann@onlinehome.de)
* dav_coda.c, coda_setattr()
Added atime.
* cache.c, dav_rename()
Adjust smtime after MOVE.
* cache.c:
Changed delete_cache() into clean_cache().
* dav_coda.c: coda_open_by_fd()
Ignore O_CREATE and O_EXCL flags.
* cache.c: update_cache_file()
Only PUT if not locked.
* cache.c, write_node(), clean_cache():
Fixed bugs in writing backup files and cleaning
cache.

2006-08-25 Werner Baumann (werner.baumann@onlinehome.de)
* dav_coda.h, dav_coda.c:
Fixed 64-bit alignment bug in struct Coda3Fid.
Clear padding before setting FID in response to
upcalls.

2006-08-23 Werner Baumann (werner.baumann@onlinehome.de)
* dav_coda.c: Fixed bug in run_messageloop().
* cache.c: update_node()
Test for change in smtime and flush if changed.

2006-08-22 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, dav_coda.c:
Replaced dav_coda_flush() call back by a pointer
to flush flag.

2006-08-21 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: Remove cache file of parent directory and
set utime = 0, whenever a node is removed or added.
Issue a flush() call when this changes are not
initiated by the kernel.

2006-08-20 Werner Baumann (werner.baumann@onlinehome.de)
* Added configuration options.
Updated config files.

2006-08-20 Werner Baumann (werner.baumann@onlinehome.de)
* Reviewed internal interfaces.
Removed circular dependencies from header files.
* Added support for neon-0.2.6.
* Removed bug in handling "displayname".

2006-07-23 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, cache.h: removed variable notify, cleaner
code for calling flush_nodes()

2006-07-11 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c: prop_result()
Only http-unescape href once.

2006-07-09 Werner Baumann (werner.baumann@onlinehome.de)
* Cleared up interfaces between dav_coda.c, cache.c and
mount_davfs.c to reduce dependencies and prepare
for integration of fuse module.
* Fixed path in lock_discover.
* Remove null resources from dav_props.
* Use CODA_FLUSH for downcall (zap and purge do not seem
to work as expected).

2006-06-17 Werner Baumann (werner.baumann@onlinehome.de)
* mount_davfs.c: check_mountpoint()
Fixed error when testing for foreign home directories.

2006-06-06 Werner Baumann (werner.baumann@onlinehome.de)
* dav_coda.c: fixed potential security risk
Ownership and mode of devices /dev/cfs0 to /dev/cfs4
will no longer be changed by mount.davfs if the
devices already exist. If mount.davfs has to create
them, they will be set "crw- --- --- root root".

2006-06-04 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: check_cache_dir()
Include host name in name of cache directory.

2006-06-03 Werner Baumann (werner.baumann@onlinehome.de)
* configure.in:
Clarified help string for option enable-debug.

2006-06-02 Werner Baumann (werner.baumann@onlinehome.de)
* dav_coda.c, cache.c, cache.h, configure.in:
Using size_t instead of int/uint as index into
table and when casting from pointer.
Removed AC_CHECK_SIZEOF([void *], [], []).
(Should now work on 32- and 64-bit systems without
compiler warnings.)

2006-05-31 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c: dav_idle() renamed dav_tidy_cache()
New algorithm for writing back and resizing cache.
* dav_coda.c: dav_run_messageloop()
Call dav_tidy_cache() recurrently until there is
nothing left to tidy or an upcall from coda.

2006-05-01 Werner Baumann (werner.baumann@onlinehome.de)
* dav_coda.c: offset[UID][0]
Use cr_euid for coda-kernel-version 2 instead of cr_uid.

2006-04-30 Werner Baumann (werner.baumann@onlinehome.de)
* Removed Large File Support on 32-bit systems because
of too many problems. There is probably not much need
to transfer files bigger than 20 GB.
* Fixed: Don't change node->size when 304 Not_modified.
Unlock when no more open for write and file
is unchanged.
* Released version 1.0.2 (still beta)

2006-04-29 Werner Baumann (werner.baumann@onlinehome.de)
* configure.in:
Added AC_SYS_LARGEFILE

2006-04-29 Werner Baumann (werner.baumann@onlinehome.de)
* fixed support for neon 0.25
* added dav_sync()

2006-04-01 Werner Baumann (werner.baumann@onlinehome.de)
* released version 1.0.1 (beta)

Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty provided the copyright notice
and this notice are preserved.

88
FAQ Normal file
View File

@ -0,0 +1,88 @@
davfs2 1.2.2 2008-01-24
-----------------------

# Copyright (C) 2006, 2007, 2008 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty.


FREQUENTLY ASKED QUESTIONS

Q: What are these files with size 0 and date of 1970-01-01?
A: WebDAV allows to lock files that do not exist, to protect the name
while you are preparing a file for upload. These "locked-null-resources"
will show as files with size 0. This is OK as long as the locks are
released some day.

Q: But the size-0-files don't disappear. How can I get rid of them?
Q: Some files cannot be accessed because they are locked. But I know for
sure that nobody uses them.
A: It can happen that locks are not released:
- An WebDAV client may crash.
- The network connection may get down before the locks are released.
- ...
How davfs2 tries to handle this:
- It sets a timeout for locks, when they should be released automatically.
- It sends a lock-owner property, so it can identify its own locks.
- Whenever it discovers that a file is locked, it tries to discover whether
it owns the lock. In this case it will reuse the lock and then release it.
But not all servers will support this.
Sometimes, only the administrator of the server may be able to free stale
locks. It would be a good idea if the server implements an administrative
timeout for locks, because it is impossible to make sure that all clients
will always release locks properly.

Q: When I try to save may backups to the WebDAV Server, davfs2 creates another
copy on disk, so I run out of disk space. Why does davfs2 do this?
A: davfs2 will always create a local copy of all files moved between the local
computer and the server. There are several reasons for this:
- The coda kernel file system needs this. It will only read and write to
local copies.
- davfs2 is not able to do incremental uploads. So davfs2 needs to get the
whole file from the application before it can send it to the server.
davfs2 really is not a replacement for network file systems like nfs.

Q: When I unmount a davfs2 file system, umount blocks and it sometimes takes
hours before it returns.
A: This is intentionally. umount should not return before all cached data is
saved to the media. The time needed depends on the amount of data and the
transfer rate. It is almost unnoticeable for a hard disk, some minutes for
a floppy, and for davfs2 it varies with the quality of the connection.
Note: You should always unmount davfs2 file systems before you shut down
your system. On shut down mount.davfs will usually be killed
regardless of the time needed to save data.

Q: Displaying large directories with nautilus or konqueror is very, very slow.
Is there a way to speed this up?
A: Reason is that this programs open every file in a directory to evaluate the
file type. mount.davfs has to download them all. Even if the files are
cached, it will have to ask the server whether there is a new version.
You may try the configuration option 'gui_optimize'. This will not help when
you visit the directory for the first time, but when the files are already
in the cache it will reduce response time.

O: When I mount a resource form Microsoft IIS, I can create new files, but when
I try to open them I get an error saying 'File does not exist'. This does not
happen when the file is named something.txt or something.doc, but it happens
for instance with files named something.odt.
A: Microsoft IIS only serves files with extensions and MIME-types that are
registered with IIS (or Windows). But when files are created it does not apply
this restriction. So you can create a new file with e.g. OpenOffice.org and
when you try to open it again, IIS will tell it can't find it. But it really
exists in the servers file system.
By default, only extensions used by Microsoft are registered (because you do
not want to use file formats that are not owned by Microsoft.). To change
this you have to register all file extensions you want to use. You may also
register a wildcard extension.
- Open the microsoft management console for IIS.
- Select the WebDAV folder within IIS you want to use.
- Right click and choose: Properties->HTTP-headers->MIME-types->new
- Edit '*' as extension and 'application/octet-stream' as MIME-type.
- Apply the changes.
- Select your IIS (the server as a whole, not just the WebDAV folder).
- From the menu choose actions->all tasks->save configuration on disk
- Restart IIS.
Please Note:
I had to retranslate the names of menu items from Microsoft's German. So the
exact naming in English might be different.

162
INSTALL Normal file
View File

@ -0,0 +1,162 @@
2009-04-12
----------

# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty.


DAVFS2 1.3.2 INSTALLATION
=========================

1 UPDATING FROM PREVIOUS VERSION
2 INSTALLATION
2.1 PREREQUISITE
2.2 INSTALLATION FROM CVS SOURCES
2.3 INSTALLATION FROM SOURCE PACKAGE
3 UNINSTALL

1 UPDATING FROM PREVIOUS VERSION
================================

'make install' copies new versions of davfs2.conf and secrets
into /usr/local/etc/davfs2 or /etc/davfs2 and creates a backup of the
existing files. You will have to merge your changes from the backup
into the new files.

When a user invokes the new version of mount.davfs the first time, it
will only copy new versions of davfs2.conf and secrets into ~/.davfs2,
if this files do not exist. The user should rename this files before
invoking mount.davfs. After the new configuration files have been
installed the user may merge the changes form the old files into
the new versions.


UPDATING FROM 1.0.x
-------------------

In davfs2 1.1.0 the organization of the permanent cache has changed
compared to the 1.0.x releases and the cache needs to be rebuild. Files
in the backup directory will be lost. So before installing the new version,
you should start your old version of mount.davfs a last time and save all
the files from the backup directory you may need some day.


2 INSTALLATION
==============

2.1 PREREQUISITE
----------------

davfs2 uses the neon libraries for communication with the server.
libneon (2.5, 2.6, 2.7 or 2.8) must be installed. Your distribution will most
likely provide a package.
You will also need the neon header files. Distributions usually provide
development packages for this.
If your distribution don't come with libneon or it does not support TLS and
large files, you may build your own neon library. You can get it from
http://www.webdav.org/neon/

Your kernel must include either the coda file system or the fuse file system
or both. They may be loadable modules. Almost all Linux 2.4 and 2.6 kernels
support at least one of them.


2.2 INSTALLATION FROM CVS SOURCES
---------------------------------

To build davfs2 from the CVS sources you need recent versions of the some
build tools:

- GNU Autoconf 2.61 or newer
- GNU Automake 1.10 or newer
- GNU gettext-tools 0.16.1 or newer
- po4a 0.29 or newer

Change into the top level source directory and run
$ ./bootstrap
This will add some necessary files, create the configure script and the
Makefile.in's, and build the translated man pages from the po-files.

Proceed with Installation from Source Package.


2.3 INSTALLATION FROM SOURCE PACKAGE
------------------------------------

From within the top level source directory:

- Run the configure script.
$ ./configure [options]
This will test your system and finally create the appropriate Makefiles.
You may add some options or set some variables, but hopefully will not
have to.

Options and variables:
----------------------

--prefix=<prefix>
Defines the directory where davfs2 will be installed. It defaults to
'/usr/local'. If your sources came with your distribution it may
be '/usr'.

--with-neon=<directory>
Directory where to find the neon library and the neon headers.
Default is to first try /usr/local and then /usr. If you just have
neon libraries in /usr/lib and headers in /usr/include, you don't
need this.

--disable-nls
Disable the support for national languages.

LINGUAS="ll ll ll"
A list of two-letter language codes. This will select which of the
available translations of messages and documentation will be installed.
ll must be in lower case.

dav_user=<davfs2>
A system user without shell. mount.davfs will run with this id when
invoked by root. Default dav_user is "davfs2".

dav_group=<davfs2>
A system group. mount.davfs will be member of this group. Normal users
must be member of this group in order to mount. Default dav_group is
"davfs2".
./configure --help will show all available options.
- Run make.
$ make
This will compile the program.

- Gain root permissions and run make install.
# make install
This will copy all the files in the appropriate directory.
Note: 'mount.davfs' will be setuid root!

- Create the system user 'davfs2' and group 'davfs2' if they not yet exist.
The system user should not have a shell. Proposed home directory is
'/var/cache/davfs2'.

- Get rid of the root permissions.


3 UNINSTALL
===========

To uninstall davfs2 the sources have to be configured just the same way
they were configured for installation.

From within the top level source directory run with root permissions
# make uninstall
This will remove all the installed files.

Note: The directories will not be removed.
Files and directories created by mount.davfs at run-time will *not* be
removed too.
This are: pid-files (in /var/run/mount.davfs), cache files and
directories (in /var/cache/davfs2) and all the files in the users
home directories in .davfs2.
This files have to be removed manually.

27
Makefile.am Normal file
View File

@ -0,0 +1,27 @@
## Makefile for the toplevel directory of davfs2.
## Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann
##
## This file is part of davfs2.
##
## davfs2 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 3 of the License, or
## (at your option) any later version.
##
## davfs2 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 davfs2; if not, write to the Free Software Foundation,
## Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */

## Process this file with automake to produce Makefile.in

EXTRA_DIST = bootstrap BUGS FAQ README.translators \
config/COPYING.davfs2 config/INSTALL.davfs2
SUBDIRS = po etc man src
ACLOCAL_AMFLAGS = -I config
doc_DATA = AUTHORS BUGS ChangeLog COPYING FAQ INSTALL NEWS README \
README.translators THANKS TODO

245
NEWS Normal file
View File

@ -0,0 +1,245 @@
# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty.


What is new in davfs2 1.4.0
===========================

FIXME


What is new in davfs2 1.3.X
===========================

- The format of entries in the secrets file is changed.
It now uses the mount point as key, instead of the URL.
The old format is still recognized by davfs2.

- When mount.davfs gets signal SIGTERM, it will not try to
upload dirty files to the server, but mark the cached files
as dirty to avoid too slow reaction (and get SIGKILL). The
files will be uploaded when mount.davfs runs the next time.

- Added support for Neon 0.27 and 0.28, removed support for
Neon 0.24.

- Scanning the cache for changed files and locks improved
to require less CPU-time.

- Support for dav-quota. davfs2 will get available and used
storage space from the server if the server supports
RFC 4331.

- Use conditional PUT and LOCK requests if possible. This is
still turned off by default, as the most widely used server
does not support it. But you should set "if_match_bug 0" for
Apache 2.2.8 and newer, as well as for many other servers.
This will save many unnecessary requests.
Conditional LOCKs will not work with neon 0.25. You should
update to neon 0.26, 0.27 or 0.28.

- Reads environment variables https_proxy, http_proxy and
all_proxy, if no proxy is configured in the config files.
Reads environment variable no_proxy for hosts to access
directly, not via proxy.
- MIME-type is accessible as extended attribute (read-only).

- Option to add custom headers.

- Added very simple Cookie-support.
Will not work with neon 0.25. You should update to neon 0.26,
0.27 or 0.28.

- New options: precheck, ignore_dav_header, if_match_bug,
delay_upload, drop_weak_etags and connect_timeout (1.3.3 only).
See 'man davfs2.conf' for details.

- Removed option idle_time.

- WebDAV-property displayname is no longer used by default
(it is defined to be *not* a name and mostly useless).

- Fixed all known bugs (except one; see BUGS).


What is new in davfs2 1.2.2
===========================

Debugging is not longer a compile time option but a run time
option. The amount of debugging output is controlled by the
davfs2.conf file.


What is new in davfs2 1.2.1
===========================

This is a bug fix release. No new features.


What is new in davfs2 1.2.0
===========================

- davfs2 now supports localized versions of messages and man pages
using GNU gettext and the po4a tools. Currently there is a German
translation, but other languages will follow. You are invited to
contribute.

- davfs2 needs a system user 'davfs2' and a system group 'davfs2'.
Normal users must be member of group 'davfs2' in order to mount
(no longer group 'users'). You may change the system user and
group at configuration time. You will have to create the system
user and group manually. The system user should not have a shell.
Proposed home directory is '/var/cache/davfs2', but this does not
matter.

- davfs2 supports client certificates.

- davfs2 can use server certificates, stored on disk, that can not
be verified the normal way, like self-made certificates.

- davfs can translate the encoding of file names.

- There are two new man pages: umount.davfs and davfs2.conf.

- File system is mounted, even when the first request times out.
When access to the file system is tried, an error is returned
until the connection comes up. (This feature had been removed
in the last release by mistake.)


What is new in davfs2 1.1.4
===========================

Please be sure to read section "0 UPDATING FROM PREVIOUS VERSION" of
the README file to avoid loss of data.

This version fixes bugs that have become known since the last release.

- The kernel interface module for fuse kernel version 7 crashed. Now
the fuse interface will work with kernel 2.6.14 and higher.

- The handling of file times has been adjusted. The modification time
will no longer change unexpectedly, thus confusing some applications
(bug 1596104).

- davfs2 will check server capabilities at start up to decide whether
locks may be used. As a side effect this also fixes interoperation
problems with the gmx-server (bug 1594808).

- The default time to refresh directory information is reduced to
60 s. Every time a directory is opened, the directory content is
newly retrieved from the server. Remote changes will get visible
earlier this way, but performance may decrease. Please send a bug
report if the performance decrease is unacceptable.


What is new in davfs2 1.1.3
===========================

Please be sure to read section "0 UPDATING FROM PREVIOUS VERSION" of
the README file to avoid loss of data.

- There is a umount helper umount.davfs. It will be called by umount
and make sure that umount will not return before mount.davfs has
saved back all data that changed in cache. So umount with davfs2
now shows the same behaviour as with local file systems.

- The new configuration option 'gui_optimize' will speed up the
display of large directories on graphical user interfaces (once
the files are cached).

- The configuration options 'expire' and 'get_wait' have been
renamed into 'dir_refresh' and 'file_refresh'.

- The use of the HTTP-Header 'Expect: 100-Continue' is now a
configuration option, as some servers don't understand it.

- Known bugs are fixed and some changes are done to improve
performance (see ChangeLog).


What is new in davfs2 1.1.0
===========================

Please be sure to read section "0 UPDATING FROM PREVIOUS VERSION" of
the README file to avoid loss of data.

- davfs2 can now use the fuse kernel file system besides coda.

- Neon library version 0.24, 0.25 and 0.26 are now supported. Version
0.26 allows to use gnutls instead of openssl.

- Support for large files (> 2 GiByte) added.

- davfs2 now uses time-outs on locks to reduce problems with stale
locks. But not all servers will honour this.

- No more URL-encoding of server URLs with spaces (see man-page).

- davfs2 allows to set configuration options differently for different
mount points.

- The name of the backup directory is changed to the well known
"lost+found". But you may configure something else.

The following bugs should have gone:

- [ 1519718 ] davfs2 fails to properly decode complex escape sequences
- [ 1522903 ] chokes on directory names containing ' _ % characters
- [ 1539444 ] mounting of webdav drive fails
- [ 1539445 ] unable to access files in mounted webdav drive
- [ 1558525 ] davfs2-1.0.2_p20060820 mount fails

These bugs were related to incorrect alignment of data structures on
64 bit systems, incorrect treatment of the WebDAV property "displayname"
and incorrect double URL-decoding of URLs.

Problems with notifying the kernel of changes on the server are solved too.


What is new in davfs2 1.0.0
===========================

davfs2 1.0.0 is an almost complete rewrite of davfs2. it introduces the
following features into davfs2:

- The same binary now supports different versions of the coda kernel
module (CODA_KERNEL_VERSION 2 and 3). The version is evaluated at
run time.

- Extended caching: davfs2 now caches information about all visited
files and directories at runtime in memory. This will speed up
operation and it is necessary to enable operations like chmod or
chown, as the WebDAV-servers usually do not know about this.
- Persistent cache: davfs2 will save all downloaded files in a cache
directory. This cache will persist when the file system is unmounted
and will be reused, when mounted again. This should save a lot of
network traffic, as files that did not change on the server will not
be downloaded again. Especially when working with graphical user
interfaces this will make a big difference, since some of them will
open almost every file in a directory, though they just need a
directory listing.

- Unix Permissions: davfs2 now implements standard Unix permissions.
Options uid, gid, file_mode and dir_mode are enabled again. This
allows the mounting user to share the file system with other local
users.
Note: The WebDAV server still does not know about this. On the server
side there is still only one user (the user who's credentials are
used). Except the execute bit, mode, uid and gid are maintained
locally only. But they are saved in the persistent cache.

- Configuration: There are a lot of new configuration options in
/etc/davfs2/davfs2.conf and ~/.davfs2/davfs2.conf. But usually
the defaults will do.

As the code of davfs2 1.0.0 is quite different from davfs 0.2.x, bug
fixes that were done between davfs 0.2.4 and 0.2.8 could not be
ported automatically to davfs2 1.0.0. So some of the old bugs may
reappear together with the new ones I introduced.


240
README Normal file
View File

@ -0,0 +1,240 @@
2009-04-12
----------

# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty.


DAVFS2 1.4.0 README
===================

1 INTRODUCTION
1.1 WHAT DAVFS2 IS INTENDED FOR
1.2 WHAT DAVFS2 IS NOT INTENDED FOR
2 SECURITY CONSIDERATIONS
3 MOUNTING
4 TLS / SSL
5 CACHE
6 TROUBLE SHOOTING
7 KNOWN ISSUES
8 CONTACT

1 INTRODUCTION
==============

davfs2 is a Linux file system driver that allows you to mount a WebDAV
resource into your Unix file system tree. So - and that is what makes
davfs2 different - applications can use it without knowing about WebDAV.
You may edit WebDAV resources using standard applications that interact
with the file system as usual.

davfs2 supports SSL and proxy, HTTP authentication (basic and digest)
and client certificates.

1.1 WHAT DAVFS2 IS INTENDED FOR
-------------------------------

- If you have documents you want to access from different locations, store
them on a WebDAV server accessible via Internet. Mount them with davfs2
from wherever you want.
- Use a WebDAV server as workspace for a geographically distributed work group.

- A web site may be made accessible to the developers via WebDAV. So they
can mount with davfs2 and edit in place.

1.2 WHAT DAVFS2 IS NOT INTENDED FOR
-----------------------------------

davfs2 is not intended as a replacement for distributed file systems like
nfs, coda, cifs and similar.

When davfs2 mounts a resource, it authenticates with the server using the
user-name and password it got from the mounting user. All requests to the
server are done on behalf of this WebDAV user. davfs2 does not handle different
WebDAV users within one mount. But this would be required for a distributed
file system.

davfs2 is not a generic WebDAV client. davfs2 maps a WebDAV resource to a file
system. But as the file system interface and the WebDAV protocol are quite
different, this is not possible without losses. As a file system davfs2 cannot
use all the possibilities of WebDAV, and most WebDAV servers do not provide all
the information a file system usually requires.

A specialised application with built-in WebDAV capabilities should be able to
make better use of the WebDAV protocol. Whether it really does, depends on the
implementation. But if a free WebDAV enabled application is available, you
might try it first.


2 SECURITY CONSIDERATIONS
=========================

To allow non-root users mounting of WebDAV resources, mount.davfs is run
setuid root. To prevent inexperienced (or even malicious) users from introducing
dangerous content into system directories or other users home directory,
the administrator must have control over user mounts.

- Non-root users can only mount using the normal mount program. There must
also be an entry in /etc/fstab. This can only be done by root.

- To mount a WebDAV resource users must be member of dav_group (default is
group 'davfs2'). The administrator may use group membership to allow or
disallow mounting of WebDAV resources.

mount.davfs starts with effective user-id 'root' to be able to mount. After
mounting it changes its id permanently to that of the mounting user. When
the mounting user is root, the mount.davfs daemon will run as user 'davfs2'.


3 MOUNTING
==========

davfs2 comes with three manuals: mount.davfs, umount.davfs and davfs2.conf.

When a normal user mounts a davfs2 file system for the first time, there
is not yet a user configuration file and a secrets file. So you will be asked
for the credentials. mount.davfs will create a hidden directory .davfs2 in
the users home directory, that holds configuration files, the cache and
certificates. You will want to edit this files afterwards.

If you update from an older version, these files already exist and davfs2
will not touch them. To allow mount.davfs installation of newer versions,
you might rename davfs2.conf and secrets and merge your changes into the
new versions.

GUIs like Gnome and KDE provide means to mount file systems listed in
fstab. But at the moment there is no means to ask the user for credentials
etc. You must configure your davfs2 mounts, using davfs2.conf and secrets,
to allow mounting without user interaction for this to work.

davfs2 needs a network connection to mount and also to unmount cleanly. So
automatic mounting at boot time and unmounting at shut down may not work
reliably. By default davfs2 mounts with option '_netdev' to inform the
operating system about this and allow correct handling. Whether this really
works depends on the details of the start-up and shut-down process and will
be different on different systems. So please test before you rely on this.


4 TLS / SSL
===========

The key question when using TLS/SSL is whether you can trust in the certificate
the server presents. There is no gain in security when you use strong
encryption for your communication with an attacker. There are also different
opinions on whether you can really trust in certificates issued by the well
known certificate 'authorities'.

Nevertheless davfs2 insists on verification of server certificates. There
are three ways to do this:

- davfs2 will use the CA-certificates of your system to verify the server
certificate.

- You may store the server certificate in the certs directory and add a
configuration option to davfs2.conf. You will have to verify this certificate
by your own, as davfs2 will trust this certificate without further
verification. This should be useful with self-made server certificates.
If the server certificate is not self-signed, but signed by an unknown
CA, the certificate file must contain the server certificate and the
certificate of all the involved CA's.

- The host-name of the server must match the subject-alt-name or the common
name of the certificate.

- If a certificate can not be verified, mount.davfs will print information
about the certificate and ask the user. This will only be done, before
mount.davfs changes into daemon mode.


5 CACHE
=======

There are two reasons for caching:

- The coda kernel file system expects a local copy of the file to act on.

- Many applications, especially those with graphical user interfaces, think
of file system calls as cheap and quick, which is not true when using a slow
connection to the Internet. Some graphical interfaces for file handling even
open every file in every directory they list, forcing davfs2 to download them
from the server.

To avoid excessive network traffic, davfs2 now saves all downloaded files in a
cache directory and will hold the files, even when the file system is
unmounted. When the same file system is mounted again, it will reuse this
cached files.

To avoid inconsistencies, davfs2 will do a conditional GET whenever a file is
opened (it will ask the server if there is a newer version, and download only
if there is).

Many application use temporary files that will be deleted just after they have
been closed. So whenever a file is newly created or changed, davfs2 will wait
until it is closed and then wait another short period (configurable, default
is 10 seconds) before it will upload the changed version to server. This saves
a lot of unnecessary traffic, but the strategy still has to be enhanced. If
there are many files to be uploaded (e.g. after copying a directory)
mount.davfs may block quite some time, as it has to upload all the files.


6 TROUBLESHOOTING
=================

In case davfs2 does not behave as you expect, there is some very useful free
software, to search for the reason:

- Use any browser, telnet and 'openssl s_client' to test whether you can
connect to the server at all.

- Cadaver is a WebDAV-client with an FTP-like interface. Besides the usual
FTP-commands it allows you to display and manipulate WebDAV-properties, e.g.
you can remove stale locks. (http://www.webdav.org/cadaver/)

- You may set option 'debug most" in the davfs2.conf file. This will print a
lot of debug messages in one of your log files.

- Wireshark (former Ethereal) will log and analyse the traffic between davfs2
and the server. (http://www.wireshark.org/)

- If you have access to the server's log files, they contain valuable
information.

When sending a bug report, please include

- the exact version of davfs2 and the source where you got it from.

- a complete description of the bug and the actions that lead to the buggy
behaviour (please note: I usually do not know the acronyms of your favourite
applications, operating system and server. In many cases I never used them).
The exact commands you issued on the command line and the messages you got
from davfs2 are necessary to understand what's going on.
Please always send the original error and debug messages in full. Don't
replace them by your interpretation.

- if possible, output from the above mentioned tools.


7 KNOWN ISSUES
==============

- If the server does not support RFC 4331 (most servers don't), davfs2 cannot
calculate the free disk space on the server. But some applications
(e.g. nautilus) insist on this. So davfs can't help but lie. I tried to
make the numbers look funny, so you will notice they are faked.


8 CONTACT
=========

davfs2 is an Free Software project hostet at
http://savannah.nongnu.org/projects/davfs2 or
http://savannah.nongnu.org/projects/davfs2

You can submit a bug-report or support-request at
http://savannah.nongnu.org/support/?func=additem&group=davfs2 or
http://savannah.nongnu.org/support/?func=additem&group=davfs2

85
README.translators Normal file
View File

@ -0,0 +1,85 @@
2008-07-12
----------

#Copyright (C) 2006, 2007, 2008 Werner Baumann

#Copying and distribution of this file, with or without modification, are
#permitted in any medium without royalty.


davfs2 uses the GNU gettext utilities to support localized messages.
Information about GNU gettext may be found at
http://www.gnu.org/software/gettext/manual/

For the man pages (and probably other documentation in future), it makes use
of the po4a tools in order to keep translations of documentation maintainable.
po4a (http://po4a.alioth.debian.org/) applies the gettext tools to arbitrary
documentation.


Messages
--------
All messages that need translation are in the file po/davfs2.pot. The
translated messages will be in po/ll.po, where ll is the two-letter country
code.
If you start a translation into a language not yet supported, you may just
take a copy of po/davfs2.pot for your ll.po file.


Man Pages
---------
The .pot files of the man pages are in the man/ subdirectory together with
a configuration file for po4a to automatically build all the translated man
pages from the .po files.
There is a subdirectory for each language, named after the country code, that
holds the .po files and the addendum files. As usual the initial .po file can
be a copy of the .pot file.


Replacement Text in Man Pages
-----------------------------
davfs2 uses all uppercase strings enclosed in @-characters for strings that may
change with every version or at compile time (like @PACKAGE_STRING@ or
@SYS_CACHE_DIR@). They will be replaced at compile time by the correct value.
Please use them in your translation unaltered. To allow correct integration
into the translated text, here are the most probable values:

@PACKAGE@ davfs2
@PACKAGE_STRING@ davfs2 1.2.0
@PROGRAM_NAME@ mount.davfs
@CONFIGFILE@ davfs2.conf
@SECRETSFILE@ secrets
@CERTS_DIR@ certs
@CLICERTS_DIR@ certs/private
@SYS_CONF_DIR@ /usr/local/etc/davfs2 or
/etc/davfs2
@SYS_RUN@ /var/run/mount.davfs
@SYS_CACHE_DIR@ /var/cache/davfs2
@USER@ davfs2
@GROUP@ davfs2


Additional Text
---------------
At least you want to add a paragraph about the translators into the localized
man page. But maybe you feel the need for some more additions that are
not present in the English man page.
Unfortunately, these additions cannot be inserted directly into the .po file,
as the document structure must not differ from the original. So these
additions have to go into separate files, called addendum.
You can use the template man/template.translator to add a paragraph about
the translators. If you need more than this, you have to create additional
addendum files. Please see the po4a documentation for the syntax of the
PO4A-HEADER to mark the position where to add the text.
Please use the same character encoding as in the .po file.


Character Encoding
------------------
** This issue seems to be fixed today and man pages are allowed to be
utf-8. But I am not really sure. **
At the moment, the "man" tool, or at least one of its helper programs, do not
seem capable of handling UTF-8 encoding. Luckily, gettext can convert the
encoding when the translated man page is created. So you may use UTF-8 in the
.po file or any other encoding. But please tell me which character encoding
should be used when the man page is built.

77
THANKS Normal file
View File

@ -0,0 +1,77 @@
davfs2 THANKS 2009-04-12
------------------------

Thanks to all the people that contributed by sending patches
and bug reports, patiently testing and hunting bugs,
and giving good advise.
============================================================

Reto Bachmann-Gmuer <rebach@users.sourceforge.net>
Adrian Bridgett
Anthony Baxter <anthonybaxter@users.sourceforge.net>
Luciano Bello <lbello@users.sourceforge.net>
Vladimir Bormotov <bormotov@users.sourceforge.net>
butchie55 <butchie55@users.sourceforge.net>
Grahame Bowland <grahame@fugro-fsi.com.au>
Ross Campbell <ross@users.sourceforge.net>
Laurent Cottereau <lcottereau@users.sourceforge.net>
Stephen Coursen <scoursen@users.sourceforge.net>
DeltaPiSF <deltapisf@users.sourceforge.net>
Daniel Drucker <placain@users.sourceforge.net>
Paul eater <eater@users.sourceforge.net>
Andrei Emeltchenko andrei.emeltchenko.news@gmail.com
Jan Engelhardt <jengelh@users.sourceforge.net>
Joe Feise <jfeise@users.sourceforge.net>
Toralf Förster <toralf_foerster@users.sourceforge.net>
Justin Gombos <jgombos@users.sourceforge.net>
Bob Glickstein <bglickstein@users.sourceforge.net>
Joao Gouveia <jgouveia@users.sourceforge.net>
Yeon Gyoung <mips942@users.sourceforge.net>
Jason Haar <jhaar@users.sourceforge.net>
Philipp Hahn <pmhahn@users.sourceforge.net>
Jan Harkes <jaharkes@cs.cmu.edu>
Martin Higham <martin@ocasta.co.uk>
Lauri Kaila <laurikaila@users.sourceforge.net>
Hyunsop Kim <hskim@taegu.ac.kr>
Vítězslav Kotrla <vitko@post.cz>
Alexander Jenisch <enti@users.sourceforge.net>
joe <josephb@users.sourceforge.net>
Thomas Kemmer <tkemmer@users.sourceforge.net>
SungHun Kim <hunkim@users.sourceforge.net>
Alan Knowles <alan_k@users.sourceforge.net>
Moriyoshi Koizumi <moriyoshi@users.sourceforge.net>
Martin F. Krafft <madduck@debian.org>
Masar <masarlabs@users.sourceforge.net>
monstruooo <monstruooo@users.sourceforge.net>
Muthu Kumar <kmkumar@users.sourceforge.net>
Scott Lamb <slamb@users.sourceforge.net>
Andreas Lauser <andlaus@users.sourceforge.net>
Reddy T. Mahesh <tmahesh@users.sourceforge.net>
Juergen P. Messerer <messi@users.sourceforge.net>
Arkadiusz Miskiewicz <arekm@users.sourceforge.net>
Maik Nijhuis <manyac@users.sourceforge.net>
Joseph Wayne Norton <natsukashi@users.sourceforge.net>
Tim Olsen <tim@brooklynpenguin.com>
Joe Orton <joe@manyfish.co.uk>
Panu Outinen <poutinen@users.sourceforge.net>
Tero Pelander <tpeland2@users.sourceforge.net>
David Popeck <dpopeck@users.sourceforge.net>
Sean Reifschneider <jafo@users.sourceforge.net>
Sebastian Reitenbach <buzzdee@users.sourceforge.net>
Daniel Roche <danroche@users.sourceforge.net>
Carl D. Roth <carlroth@users.sourceforge.net>
James Russell <russej@users.sourceforge.net>
Martin Samuelsson <cosis@users.sourceforge.net>
Enrico Scelsa <enrichicco@users.sourceforge.net>
Patrick Schipper <pqschipper@users.sourceforge.net>
Tim Skirvin <tim_skirvin@users.sourceforge.net>
Ville Skyttä <scop@users.sourceforge.net>
Robert Spier <robrt@users.sourceforge.net>
Steven Stanek <sstanek@covariable.com>
Geoffroy Stévenne <geoffroys@users.sourceforge.net>
Greg Stein <gstein@lyra.org>
Lars Uffmann <lu@cachescrubber.org>
Björn Voigt <bjoernv@users.sourceforge.net>
Dag Wieers <dag@wieers.com>
Jim Whitehead <ejw@cse.ucsc.edu>
Marcin Zajączkowski <mszpak@wp.pl>

6
TODO Normal file
View File

@ -0,0 +1,6 @@
davfs2 TODO 2009-03-29
----------------------

- object oriented redisign of cache

- multithreading for HTTP-requests and cache maintainance

20
bootstrap Executable file
View File

@ -0,0 +1,20 @@
#!/bin/sh

# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved.

set -ex
autopoint --force
cd man; po4a po4a.conf; cd ..
aclocal -I config
autoheader
automake --add-missing --force-missing
autoconf
rm COPYING
rm INSTALL
cp -p config/COPYING.davfs2 COPYING
cp -p config/INSTALL.davfs2 INSTALL

675
config/COPYING.davfs2 Normal file
View File

@ -0,0 +1,675 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for
software and other kinds of works.

The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. 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
them 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 prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. 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.

Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS

0. Definitions.

"This License" refers to version 3 of the GNU General Public License.

"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.

To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

A "covered work" means either the unmodified Program or a work based
on the Program.

To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

1. Source Code.

The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.

A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

The Corresponding Source for a work in source code form is that
same work.

2. Basic Permissions.

All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

4. Conveying Verbatim Copies.

You may convey 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;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.

b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".

c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.

d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.

A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

6. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.

b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.

c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.

d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.

e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.

A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

7. Additional Terms.

"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or

b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or

c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or

d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or

e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or

f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.

All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

8. Termination.

You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

9. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.

An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

11. Patents.

A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".

A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

12. No Surrender of Others' Freedom.

If 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 convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

13. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

14. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of
the GNU 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 that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

15. Disclaimer of Warranty.

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.

16. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
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.

17. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

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
state 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 3 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, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

<program> Copyright (C) <year> <name of author>
This program 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, your program's commands
might be different; for a GUI interface, you would use an "about box".

You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

The GNU 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 Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

162
config/INSTALL.davfs2 Normal file
View File

@ -0,0 +1,162 @@
2009-04-12
----------

# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty.


DAVFS2 1.3.2 INSTALLATION
=========================

1 UPDATING FROM PREVIOUS VERSION
2 INSTALLATION
2.1 PREREQUISITE
2.2 INSTALLATION FROM CVS SOURCES
2.3 INSTALLATION FROM SOURCE PACKAGE
3 UNINSTALL

1 UPDATING FROM PREVIOUS VERSION
================================

'make install' copies new versions of davfs2.conf and secrets
into /usr/local/etc/davfs2 or /etc/davfs2 and creates a backup of the
existing files. You will have to merge your changes from the backup
into the new files.

When a user invokes the new version of mount.davfs the first time, it
will only copy new versions of davfs2.conf and secrets into ~/.davfs2,
if this files do not exist. The user should rename this files before
invoking mount.davfs. After the new configuration files have been
installed the user may merge the changes form the old files into
the new versions.


UPDATING FROM 1.0.x
-------------------

In davfs2 1.1.0 the organization of the permanent cache has changed
compared to the 1.0.x releases and the cache needs to be rebuild. Files
in the backup directory will be lost. So before installing the new version,
you should start your old version of mount.davfs a last time and save all
the files from the backup directory you may need some day.


2 INSTALLATION
==============

2.1 PREREQUISITE
----------------

davfs2 uses the neon libraries for communication with the server.
libneon (2.5, 2.6, 2.7 or 2.8) must be installed. Your distribution will most
likely provide a package.
You will also need the neon header files. Distributions usually provide
development packages for this.
If your distribution don't come with libneon or it does not support TLS and
large files, you may build your own neon library. You can get it from
http://www.webdav.org/neon/

Your kernel must include either the coda file system or the fuse file system
or both. They may be loadable modules. Almost all Linux 2.4 and 2.6 kernels
support at least one of them.


2.2 INSTALLATION FROM CVS SOURCES
---------------------------------

To build davfs2 from the CVS sources you need recent versions of the some
build tools:

- GNU Autoconf 2.61 or newer
- GNU Automake 1.10 or newer
- GNU gettext-tools 0.16.1 or newer
- po4a 0.29 or newer

Change into the top level source directory and run
$ ./bootstrap
This will add some necessary files, create the configure script and the
Makefile.in's, and build the translated man pages from the po-files.

Proceed with Installation from Source Package.


2.3 INSTALLATION FROM SOURCE PACKAGE
------------------------------------

From within the top level source directory:

- Run the configure script.
$ ./configure [options]
This will test your system and finally create the appropriate Makefiles.
You may add some options or set some variables, but hopefully will not
have to.

Options and variables:
----------------------

--prefix=<prefix>
Defines the directory where davfs2 will be installed. It defaults to
'/usr/local'. If your sources came with your distribution it may
be '/usr'.

--with-neon=<directory>
Directory where to find the neon library and the neon headers.
Default is to first try /usr/local and then /usr. If you just have
neon libraries in /usr/lib and headers in /usr/include, you don't
need this.

--disable-nls
Disable the support for national languages.

LINGUAS="ll ll ll"
A list of two-letter language codes. This will select which of the
available translations of messages and documentation will be installed.
ll must be in lower case.

dav_user=<davfs2>
A system user without shell. mount.davfs will run with this id when
invoked by root. Default dav_user is "davfs2".

dav_group=<davfs2>
A system group. mount.davfs will be member of this group. Normal users
must be member of this group in order to mount. Default dav_group is
"davfs2".
./configure --help will show all available options.
- Run make.
$ make
This will compile the program.

- Gain root permissions and run make install.
# make install
This will copy all the files in the appropriate directory.
Note: 'mount.davfs' will be setuid root!

- Create the system user 'davfs2' and group 'davfs2' if they not yet exist.
The system user should not have a shell. Proposed home directory is
'/var/cache/davfs2'.

- Get rid of the root permissions.


3 UNINSTALL
===========

To uninstall davfs2 the sources have to be configured just the same way
they were configured for installation.

From within the top level source directory run with root permissions
# make uninstall
This will remove all the installed files.

Note: The directories will not be removed.
Files and directories created by mount.davfs at run-time will *not* be
removed too.
This are: pid-files (in /var/run/mount.davfs), cache files and
directories (in /var/cache/davfs2) and all the files in the users
home directories in .davfs2.
This files have to be removed manually.

170
config/davfs2.m4 Normal file
View File

@ -0,0 +1,170 @@
# davfs2 macros
# Copyright (C) 2006, 2007, 2008 Werner Baumann
#
# This file is part of davfs2.
#
# davfs2 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 3 of the License, or
# (at your option) any later version.
#
# davfs2 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 davfs2; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


# Check for an external Neon library
# Looks for the binary 'neon-config'. If a directory is given with
# --with-neon=, it looks in the bin-subdirectory of this, else it uses
# AC_PATH_PROG to find 'neon-config'.
# If found, it sets variable NRON_CONFIG and calls NEON_USE_EXTERNAL.
# if not found, or if NEON_USE_EXTERNAL does not set neon_got_library
# to yes, configration is stopped with an error message.

AC_DEFUN([DAV_CHECK_NEON],[

AC_ARG_WITH(neon,
[ --with-neon[[=DIR]] specify location of neon library],
[case $withval in
yes|no) neon_ext_path= ;;
*) neon_ext_path=$withval ;;
esac;],
[neon_ext_path=]
)

neon_got_library=no
if test "x$neon_ext_path" = "x"; then
AC_PATH_PROG([NEON_CONFIG], neon-config, none)
if test "x${NEON_CONFIG}" = "xnone"; then
AC_MSG_NOTICE([no external neon library found])
elif test -x "${NEON_CONFIG}"; then
NEON_USE_EXTERNAL
else
AC_MSG_NOTICE([ignoring non-executable ${NEON_CONFIG}])
fi
else
AC_MSG_CHECKING([for neon library in $neon_ext_path])
NEON_CONFIG="$neon_ext_path/bin/neon-config"
if test -x ${NEON_CONFIG}; then
AC_MSG_RESULT([found])
NEON_USE_EXTERNAL
else
AC_MSG_RESULT([not found])
fi
fi

if test "$neon_got_library" = "no"; then
AC_MSG_ERROR(could not find neon)
fi

AC_SUBST(NEON_LIBS)
])


# Setting uid and gid, mount.davfs will run as, and some pathes.

AC_DEFUN([DAV_DEFAULTS],[

AC_ARG_VAR([dav_user],
[if invoked by root, mount.davfs runs as this user [davfs2]])
if test -z "$dav_user"; then dav_user="davfs2"; fi

AC_ARG_VAR([dav_group],
[the group, the mount.davfs daemon belongs to [davfs2]])
if test -z "$dav_group"; then dav_group="davfs2"; fi

AC_ARG_VAR([ssbindir],
[where mount will search for mount-helpers [/sbin]])
if test -z "$ssbindir"; then ssbindir="/sbin"; fi

AC_ARG_VAR([dav_localstatedir],
[directory to store pid-files in [/var/run]])
if test -z "$dav_localstatedir"; then dav_localstatedir="/var/run"; fi

AC_ARG_VAR([dav_syscachedir],
[cache directory [/var/cache]])
if test -z "$dav_syscachedir"; then dav_syscachedir="/var/cache"; fi
])


# Select the languages for documentation and messages
# The langusges available for documentation ar taken from man/po4a.conf.
# If variable LINGUAS is set, only languages that are available and
# mentioned in LINGUAS are selected, otherwise all available languages
# are selected. Substitutes $dav_linguas in output files with this value.
# The languages for messages are selected by po.m4 macros, that use the
# same variable LINGUAS.

AC_DEFUN([DAV_LINGUAS],[

AC_ARG_VAR([LINGUAS],
[select languages for messages and documentation])
dav_desired_linguas="${LINGUAS-%UNSET%}"

dav_all_linguas=
if test -f "man/po4a.conf"; then
dav_all_linguas="`cat 'man/po4a.conf' | grep '[po4a_langs]' | sed 's/.po4a_langs.//'`"
fi

dav_linguas=
if test "$dav_desired_linguas" == "%UNSET%"; then
dav_linguas="$dav_all_linguas"
else
for dav_lingua in $dav_desired_linguas; do
case "$dav_all_linguas" in
*"$dav_lingua"*) dav_linguas="$dav_linguas $dav_lingua";;
esac
done
fi

AC_SUBST([dav_linguas])
])


# If Neon supports large files, it calls AC_SYS_LARGEFILE.
# dav_lfs is set to yes, if neon and the system support large files.

AC_DEFUN([DAV_LFS],[

AC_REQUIRE([DAV_CHECK_NEON])dnl

if test "$ne_LFS_message" = "LFS is supported by neon"; then
AC_SYS_LARGEFILE
fi

if test "$ac_cv_sys_file_offset_bits" = "64"; then
dav_lfs=yes
else
dav_lfs=no
fi
])


# Output summary

AC_DEFUN([DAV_MESSAGE],[

if test "$USE_NLS" = "yes"; then
dav_nls=${gt_source}
else
dav_nls=no
fi

cat<<EOF

Configuration for building davfs2 AC_PACKAGE_VERSION:

Install Prefix: ${prefix}
Compiler: ${CC}
Large File Support: ${dav_lfs}
Neon Library: ${neon_library_message}
${ne_SSL_message}
National Language Support: ${dav_nls}

EOF
])

1113
config/neon.m4 Normal file

File diff suppressed because it is too large Load Diff

96
configure.ac Normal file
View File

@ -0,0 +1,96 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann
#
# This file is part of davfs2.
#
# davfs2 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 3 of the License, or
# (at your option) any later version.
#
# davfs2 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 davfs2; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


AC_PREREQ(2.59)
AC_INIT(davfs2, 1.4.0)
AC_CONFIG_SRCDIR([src/cache.c])
AC_CONFIG_AUX_DIR([config])
AM_INIT_AUTOMAKE

AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S

# Checks for libraries.
AM_GNU_GETTEXT_VERSION(0.14.4)
AM_GNU_GETTEXT([external])
NE_REQUIRE_VERSIONS([0], [25 26 27 28])
DAV_CHECK_NEON

# Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS([argz.h fcntl.h libintl.h langinfo.h limits.h locale.h mntent.h stddef.h stdint.h stdlib.h string.h sys/mount.h sys/time.h syslog.h termios.h unistd.h utime.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_UID_T
AC_C_INLINE
AC_TYPE_INT16_T
AC_TYPE_INT32_T
AC_TYPE_INT8_T
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_CHECK_MEMBERS([struct stat.st_blksize])
AC_HEADER_TIME
AC_STRUCT_TM
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_C_VOLATILE
AC_CHECK_SIZEOF([void *])

# Checks for library functions.
AC_FUNC_CHOWN
AC_FUNC_CLOSEDIR_VOID
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_FUNC_GETMNTENT
AC_PROG_GCC_TRADITIONAL
AC_HEADER_MAJOR
AC_FUNC_MALLOC
AC_FUNC_SELECT_ARGTYPES
AC_FUNC_STRFTIME
AC_FUNC_STAT
AC_FUNC_UTIME_NULL
AC_CHECK_FUNCS([endpwent getmntent memset mkdir nl_langinfo rpmatch select setlocale strcasecmp strchr strdup strerror strpbrk strrchr strstr strtol utime])

# Misc.
DAV_DEFAULTS
DAV_LFS
DAV_LINGUAS([de])
AC_DEFINE([_GNU_SOURCE], 1, [Define to enable GNU extensions])

AC_CONFIG_FILES([Makefile
po/Makefile.in
etc/Makefile
man/Makefile
man/de/Makefile
man/es/Makefile
src/Makefile])
AC_OUTPUT
DAV_MESSAGE

40
etc/Makefile.am Normal file
View File

@ -0,0 +1,40 @@
## Makefile for etc directory in davfs.
## Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann
##
## This file is part of davfs2.
##
## davfs2 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 3 of the License, or
## (at your option) any later version.
##
## davfs2 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 davfs2; if not, write to the Free Software Foundation,
## Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */

## Process this file with automake to produce Makefile.in

dist_pkgdata_DATA = davfs2.conf secrets
pkgsysconfdir = $(sysconfdir)/@PACKAGE@

install-data-local: $(dist_pkgdata_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)
$(INSTALL_DATA) -b davfs2.conf $(DESTDIR)$(pkgsysconfdir)/davfs2.conf
$(INSTALL_DATA) -b -m 600 secrets $(DESTDIR)$(pkgsysconfdir)/secrets
$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs
$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs/private
chmod 700 $(DESTDIR)$(pkgsysconfdir)/certs/private

uninstall-local:
@$(NORMAL_UNINSTALL)
@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(pkgsysconfdir)/$$f"; \
rm -f $(DESTDIR)$(pkgsysconfdir)/$$f; \
done

72
etc/davfs2.conf Normal file
View File

@ -0,0 +1,72 @@
# davfs2 configuration file 2009-04-12
# version 9
# ------------------------------------

# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved.


# Please read the davfs2.conf (5) man page for a description of the
# configuration options and syntax rules.


# Available options and default values
# ====================================

# General Options
# ---------------

# dav_user davfs2 # system wide config file only
# dav_group davfs2 # system wide config file only
# ignore_home # system wide config file only
# kernel_fs fuse
# buf_size 16 # KiByte

# WebDAV Related Options
# ----------------------

# use_proxy 1 # system wide config file only
# proxy # system wide config file only
# servercert
# clientcert
# secrets ~/.davfs2/secrets # user config file only
# ask_auth 1
# use_locks 1
# lock_owner <user-name>
# lock_timeout 1800 # seconds
# lock_refresh 60 # seconds
# use_expect100 0
# if_match_bug 0
# drop_weak_etags 0
# allow_cookie 0
# precheck 1
# ignore_dav_header 0
# server_charset
# connect_timeout 10 # seconds
# read_timeout 30 # seconds
# retry 30 # seconds
# max_retry 300 # seconds
# add_header

# Cache Related Options
# ---------------------

# backup_dir lost+found
# cache_dir /var/cache/davfs2 # system wide cache
# ~/.davfs2/cache # per user cache
# cache_size 50 # MiByte
# table_size 1024
# dir_refresh 60 # seconds
# file_refresh 1 # second
# delay_upload 10
# gui_optimize 0

# Debugging Options
# -----------------

# debug # possible values: config, kernel, cache, http, xml,
# httpauth, locks, ssl, httpbody, secrets, most

68
etc/secrets Normal file
View File

@ -0,0 +1,68 @@
# davfs2 secrets file 2009-04-12
# version 4
# -------------------------------

# Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved.


# # This file must be readable and writeable by the owner only (mode 0600).

# This file contains user-name and password for the proxy, the
# WebDAV resources and decryption passwords for client certificates.

# Comments are indicated by a '#' character and the rest of the line
# is ignored. Empty lines are ignored too.

# Each line consists of two or three items separated by spaces or tabs.
# If an item contains one of the characters space, tab, #, \ or ", this
# character must be escaped by a preceding \. Alternatively, the item
# may be enclosed in double quotes.


# Proxy Line
# ----------
# A proxy line consists of the fully qualified domain name of the proxy,
# the user-name and the password. The proxy name must not contain a scheme
# or path segment, but a port number should be added, separated by a colon.
# The password my be omitted.
# Instead of the name of the proxy, the keyword "proxy" may be used.

# Examples
# foo.bar:3245 otto my\ secret
# foo.bar otto "my secret"
# proxy otto "my secret"


# Credential Line
# ---------------
# A credential line consists of the mount-point, the user-name and
# the password. The mount-point must be an absolute path, starting
# with /. The password may be omitted.
# For compatibility with older versions, instead of the mount-point
# the URL may be given. The URL must contain scheme, fully qualified
# domain name and path. If the path segment is missing, / is assumed.

# Examples
# /home/otto/foo otto g3H\"x\ 7z\\
# /media/dav/bar otto geheim
# Old style
# "http://foo.bar/my documents" otto "geh # heim"
# https://foo.bar:333/dav otto geh\ \#\ heim


# Password for Client Certificate
# -------------------------------
# It must contain the name of the certificate file and the encryption
# password. The name must be either absolute (starting with /) or the
# file-name only. If it is not absolute, it is assumed to be in the
# standard directory for client certificates.

# Examples
# /home/otto/.davfs2/certs/private/otto.crt geheim
# otto_private.crt "this is extraordinary secret"
# "otto private.crt" this\ is\ secret,\ too.

54
man/Makefile.am Normal file
View File

@ -0,0 +1,54 @@
## Makefile for man directory in davfs.
## Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann
##
## This file is part of davfs2.
##
## davfs2 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 3 of the License, or
## (at your option) any later version.
##
## davfs2 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 davfs2; if not, write to the Free Software Foundation,
## Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */

## Process this file with automake to produce Makefile.in

pkgsysconfdir = $(sysconfdir)/@PACKAGE@
pkglocalstatedir = $(dav_localstatedir)/mount.davfs
pkgsyscachedir = $(dav_syscachedir)/@PACKAGE@
mandir = $(datadir)/man
manual5dir = $(mandir)/man5
manual8dir = $(mandir)/man8
SUBDIRS = @dav_linguas@
DIST_SUBDIRS = de es

edit = sed \
-e 's|@PACKAGE[@]|$(PACKAGE)|g' \
-e 's|@PACKAGE_STRING[@]|$(PACKAGE_STRING)|g' \
-e 's|@PROGRAM_NAME[@]|mount.davfs|g' \
-e 's|@SYS_CONF_DIR[@]|$(pkgsysconfdir)|g' \
-e 's|@SYS_RUN[@]|$(pkglocalstatedir)|g' \
-e 's|@SYS_CACHE_DIR[@]|$(pkgsyscachedir)|g' \
-e 's|@SECRETSFILE[@]|secrets|g' \
-e 's|@CONFIGFILE[@]|$(PACKAGE).conf|g' \
-e 's|@CERTS_DIR[@]|certs|g' \
-e 's|@CLICERTS_DIR[@]|private|g' \
-e 's|@USER[@]|$(dav_user)|g' \
-e 's|@GROUP[@]|$(dav_group)|g'

manual5_DATA = davfs2.conf.5.gz
manual8_DATA = mount.davfs.8.gz umount.davfs.8.gz

EXTRA_DIST = davfs2.conf.5 mount.davfs.8 umount.davfs.8 \
davfs2.conf.5.pot mount.davfs.8.pot umount.davfs.8.pot \
po4a.conf template.translator
CLEANFILES = $(manual5_DATA) $(manual8_DATA)

%.gz: %
$(edit) $< | gzip -9 > $@

518
man/davfs2.conf.5 Normal file
View File

@ -0,0 +1,518 @@
.TH @CONFIGFILE@ 5 2009\-04\-13 @PACKAGE_STRING@


.SH NAME

\fB@CONFIGFILE@\fR \- Configuration file for \fB@PROGRAM_NAME@\fR


.SH DESCRIPTION

There is a system wide configuration file \fI@SYS_CONF_DIR@/@CONFIGFILE@\fR
and user configuration files \fI~/.@PACKAGE@/@CONFIGFILE@\fR. When
\fB@PROGRAM_NAME@\fR is invoked by root, only the system wide configuration
file is read. When invoked by an ordinary user, the user configuration file
is read in addition. Settings from the user configuration file will take
precedence over the system wide configuration.

.PP
The configuration file consists of lines where each line contains a keyword
value pair. Keyword and value are seperated by spaces and/or tabs.

.PP
The file may contain sections that are for one specific mount point only.
Such a section starts with a line, that contains the full path of the mount
point enclosed in square brackets. The section ends at the start of the next
section or the end of file. Options that shall apply to all mounted file
system must come before the first sections. Options given in a mount specific
section will have precedence.


.SH EXAMPLE

kernel_fs coda
.br
proxy foo.bar:8080
.br
use_locks 0
.br
.br
[/media/dav]
.br
use_locks 1
.br
.br
[/home/otto/mywebspace]
.br
gui_optimize 1

.PP
All mounted @PACKAGE@ file systems will use the coda kernel file system and the
proxy foo.bar. All @PACKAGE@ file systems expect /media/dav will disable the
use of the locks. /home/otto/mywebspace will use the gui_optimize option.

.SH GENERAL SYNTAX RULES

Lines that only contain spaces and tabs (empty lines) are ignored.

.PP
# indicates a comment. The rest of the line is ignored.

.PP
\(rs is the escape character.

.PP
\(dq" is used for quotation.

.PP
If a value contains one of the special characters space, tab, #, \(rs, or \(dq,
this character must be escaped by a preceding \(rs. Use \(cq\(rs\ \(cq instead
of \(cq\ \(cq, \(cq\(rs#\(cq instead of \(cq#\(cq, \(cq\(rs\(rs\(cq instead of
\(cq\(rs\(cq and \(cq\(rs\(dq\(cq instead of \(cq\(dq\(cq.

.PP
Values containing spaces, tabs or # may instead be enclosed in double quotes.
But \(dq and \(cq must be escaped even within double quotes. If the starting line
of a section is enclosed in double quotes, the square brakets must be within
the quotes (like \(dq[/home/otto/with space]\(dq).

.PP
Boolean option values (yes/no) must be given as numerical value.
0 for no, 1 for yes.


.SH AVAILABLE CONFIGURATION OPTIONS

.SH General Options

.TP
.B dav_user
When invoked by root the \fB@PROGRAM_NAME@\fR daemon will run as this user.
Value must be given as \fIname\fP, \fBnot\fR as numerical id.
.br
Default: @USER@
.br
\fBOnly allowed in the system wide configuration file.\fR

.TP
.B dav_group
The group of the running \fB@PROGRAM_NAME@\fR daemon. Ordinary users must
be member of this group in order to mount a @PACKAGE@ file system.
Value must be given as \fIname\fP, \fBnot\fR as numerical id.
.br
Default: @GROUP@
.br
\fBOnly allowed in the system wide configuration file.\fR

.TP
.B ignore_home
An ordinary user is not allowed to mount within the home directory of another
user. But sometimes system users (like \fInobody\fP) get assigned home
directories (like /), that include common mount points. This option allows to
give a comma seperated list of system users that will be excluded from this
check.
.br
\fBOnly allowed in the system wide configuration file.\fR

.TP
.B kernel_fs
Which kernel file system to use, to integrate into the virtual file system.
Possible values are \fIfuse\fP and \fIcoda\fP.
.br
Default: fuse

.TP
.B buf_size
Size in KiByte of the buffer used to communicate with the kernel file system.
Only usefull with \fIfuse\fP, where read and write operations may profit
from a larger buffer.
.br
Default: 16


.SH WebDAV Related Options

.TP
.B use_proxy
Whether to use a proxy to connect to the WebDAV server. 0 = no, 1 = yes.
If no proxy is defined in the configration file or the environment variables
\fBhttps_proxy\fR, \fBhttp_proxy\fR and \fBall_proxy\fR, this option has no
effect.
.br
Default: 1
.br
\fBOnly allowed in the system wide configuration file.\fR

.TP
.B proxy
Name of the proxy. The name must be the fully qualified domain name
(no scheme). If the proxy port differs from the default of 8080, it
must be appended, seperated by a colon. Examples: \fIfoo.bar:1704\fP or
\fIfoo.bar\fP
.br
\fBOnly allowed in the system wide configuration file.\fR

.TP
.B servercert
Name of a certificate file in PEM format. The name of the file may be
given as absolute path or as file name only. In the latter case the
directories \fI~/.@PACKAGE@/@CERTS_DIR@\fP and
\fI@SYS_CONF_DIR@/@CERTS_DIR@\fP will be searched.
.br
This option is intended for self-signed server certificates. Self-signed
means issuer and subject are the same. Common name (CN) must be the
domain name of the server.
.br
In case the server certificate is not self-singed, this file must contain
the certificate of the certificate authority (CA) that signed the server
certificate, not the the server certificate itself. If an hirarchy of
CA's is involved (the CA that signed the server certificate is not the
root CA), the file must contain all the certificates from the chain of
CAs involved, beginning with the CA that signed the server certificate,
up to the self-signed certificate of the root CA. (The option name
\fBservertcert\fR is a misnomer in this case. Sorry.) You can create the
file by concatenating all the CA-certificates involved.
.br
\fBNote:\fR Even if the certificate is trusted, that does not mean it
is accepted. There is the additional constraint, that the certificate
presented by the server must belong to the server. The CN in the
server certificate must be the domain name of the server. There is
currently no way to automatically accept certificates that don't
belong to the server.

.TP
.B clientcert
Name of a certificate in PKCS#12 format that will be used to authenticate
with the server. The name of the file may be given as absolute path or as
file name only. In the latter case the directories
\fI~/.@PACKAGE@/@CERTS_DIR@/@CLICERTS_DIR@\fP and
\fI@SYS_CONF_DIR@/@CERTS_DIR@/@CLICERTS_DIR@\fP will be searched.

.TP
.B secrets
Name of a file that holds the credentials for servers and the proxy, and
passwords to decrypt the client certificate. The name must be an absolute
path. The file must be read and writable by the owner only (mode 600).
.br
Default: ~/.@PACKAGE@/@SECRETSFILE@
.br
\fBOnly allowed in the user configuration file.\fR The system wide
secrets file is allways \fI@SYS_CONF_DIR@/@SECRETSFILE@\fP.

.TP
.B ask_auth
Ask the user interactively for credentials and passwords if not found in the
secretsfile. 0 = no, 1 = yes.
.br
Default: 1

.TP
.B use_locks
Whether to lock files on the server when they are opened for writing.
0 = no, 1 = yes.
.br
Default: 1

.TP
.B lock_owner
A string send to the server to identify the owner of a lock. If a WebDAV
resource is used at the same time by different clients using the same
credentials, different values for lock_owner should be choosen.
.br
Default: the username from the credentials

.TP
.B lock_timeout
How long in seconds locks should be valid, before the server removes them.
The server may ignore this and set its own timeout value.
.br
Default: 1800

.TP
.B lock_refresh
That many seconds before the lock times out, \fB@PROGRAM_NAME@\fR will try to
refresh the lock. The value should be substantially greater than
\fBdelay_upload\fR.
.br
Default: 60

.TP
.B use_expect100
To avoid uploading big files that will be refused by the server,
\fB@PROGRAM_NAME@\fR uses the header \fIexpect: 100\-continue\fP to get the o.k.
from the server before uploading. Not all servers understand this.
0 = no, 1 = yes.
.br
Default: 0

.TP
.B if_match_bug
Some servers do not handle If-Match and If-None-Match-headers correctly.
This otion tells \fB@PROGRAM_NAME@\fR to use HEAD instead of thes headers.
0 = no, 1 = yes.
.br
Default: 0

.TP
.B drop_weak_etags
Popular servers send a weak etag whenever they are not able to calculate
a strong one. This weak etag will never be valid, but after one second it
is silently turned into a strong, valid etag. With this flag set to 1,
\fB@PROGRAM_NAME@\fR will never use this weak etags. If the flas is 0,
the weakness indicator will be removed and the etag is assumed to be
strong. There is some danger of the Lost-Update-Problem with
this. But it is minimized when using locks.
.br
You should turn this on, when you can't use locks and there is the
danger of concurrent access to the same resource. In this case the
etag is not used at all and the resource cannot be cached.
.br
0 = no, 1 = yes.
.br
Default: 0

.TP
.B allow_cookie
Some servers will only work when they are allowed to set a cookie and this
cookie is returned in subsequent requests. This option adds very simple
cookie support. It supports just one cookie which should usually be
a session ID.
0 = no, 1 = yes.
.br
Default: 0

.TP
.B precheck
If option \fBif_match_bug\fR is set: use HEAD-requests to check for existence
or modification of a file to avoid unintended overwriting what somebody
else changed. Has no effect if option \fBif_match_bug\fR is 0. You should only
set it 0, if there is no concurrent access to the server.
0 = no, 1 = yes.
.br
Default: 1

.TP
.B ignore_dav_header
Some servers send wrong information about their capabilities in the DAV-header.
In this case the header should be ignored.
.br
Default: 0

.TP
.B server_charset
When extracting file names from the path component of the URL,
\fB@PROGRAM_NAME@\fR will assume they are encoded using this character set
and translate file names to the local character set. This is \fBnot\fR
about encoding of file contents and \fBnot\fR about HTTP escaping rules.
.br
There is no means in HTTP to know the character encoding of the path
component. There may be even different encodings within the same path, as
the encoding of file names is often defined by the clients that created them.
Nowadays it is best to use only UTF\-8 encoding and to do no conversion. If
you are not sure that all clients understand UTF\-8, restrict file names to
pure us\-ascii. Never use characters in file names, that may have a special
function on some operating systems (like /, : and \(rs).
.br
Default: no character set conversion

.TP
.B connect_timeout
When creating a TCP connection to the server \fB@PROGRAM_NAME@\fR will
wait that many seconds for an answer before assuming an error. If a value
of '0' is used then no explicit timeout handling is set and the connect call
will only timeout as dictated by the TCP stack.
.br
This parameter only takes effect if the version of neon in use
(neon version > 0.26) and the OS support non-blocking I/O.
.br
Default: 10

.TP
.B read_timeout
How long in seconds \fB@PROGRAM_NAME@\fR will wait for an answer from the
server before assuming an error.
.br
Default: 30

.TP
.B retry
When \fB@PROGRAM_NAME@\fR can not reach the server it will try again after
\fBretry\fR seconds. For subsequent retries the interval will be increased
up to \fBmax_retry\fR seconds.
.br
Default: 30

.TP
.B max_retry
Maximum value of the retry interval.
.br
Default: 300

.TP
.B add_header
Your server might expect special headers to do what you want. Different from
other options, this one takes two values: the name of the header and its value.
Example:
.br
add_header Translate F
.br
\fB@PROGRAM_NAME@\fR will add header "Translate: F" on all requests.
.br
This option is cumulative. You can enter more than one add_header option
and all of them will be added. Also add_header options from
@SYS_CONF_DIR@/@CONFIGFILE@ and ~/.@PACKAGE@/@CONFIGFILE@ are merged.


.SH Cache Related Options

.TP
.B backup_dir
Each mounted @PACKAGE@ file system has a directory to store backups of files
that could not be stored back to the server. This sets the name of this
directory. You should regularly check this directory.
.br
Default: lost+found

.TP
.B cache_dir
The directory where \fB@PROGRAM_NAME@\fR will store cached files. For every
mount point a subdirectory will be created.
.br
In the systemwide configuration file this will set the system wide cache,
used by root. In a users configuration file it will set the cache used by
this user.
.br
Defaults: @SYS_CACHE_DIR@ and ~/.@PACKAGE@/cache

.TP
.B cache_size
The amount of disk space in MiByte that may be used. \fB@PROGRAM_NAME@\fR
will always take enough space to cache open files, ignoring this value if
necessary.
.br
Default: 50

.TP
.B table_size
\fB@PROGRAM_NAME@\fR maintains a hash table with an entry for each known file
or directory. This gives the number of entries in this table. For large
file systems (more than some hundreds of files) increasing this number may
speed up file operations. The value should be a power of 2.
.br
Default: 1024

.TP
.B dir_refresh
After \fB@PROGRAM_NAME@\fR has got information about files in a directory it
considers it valid for this time in seconds. Note: This does not affect
opening of files and reading a directory by an application.
.br
Default: 60

.TP
.B file_refresh
When a file or directory is opened by an application, \fB@PROGRAM_NAME@\fR
will first check the server for a newer version. But some applications do
open calls on the same file in short sequence. To avoid unecessary traffic
\fB@PROGRAM_NAME@\fR will wait that many seconds before it send a new request
for the same information.
.br
Default: 1

.TP
.B delay_upload
When a file that has been changed is closed, \fB@PROGRAM_NAME@\fR will wait
that many seconds before it will upload it to the server. This will avoid
uploading of temporary files that will be removed immediately after closing.
If you need the files to appear on the server immediately after closing,
set this option to 0.
.br
Default: 10

.TP
.B gui_optimize
When a file is opened, \fB@PROGRAM_NAME@\fR will have to check the server
whether there is a newer version. Graphical User Interfaces tend to open
just any file, slowing down things dramatically for large directories.
With this option \fB@PROGRAM_NAME@\fR will try to get this information
from all files in a directory with one PROPFIND request. 0 = no, 1 = yes.
.br
Default: 0


.SH Debugging Options

.TP
.B debug
Send debug messages to the syslog daemon. The value tells what kind of
information shall be logged. The messages are send with facility LOG_DAEMON
and priority LOG_DEBUG. It depends from the configuration of the syslog daemon
where the messages will go (propably /var/log/messages, /var/log/syslog or
/var/log/daemon.log). Whether HTTP related debug messages are available
depends on your neon library.
.br
Unlike other options, this option is cumulative. If there are several debug
entries with different values, all of them will be applied. Also debug options
from @SYS_CONF_DIR@/@CONFIGFILE@ and ~/.@PACKAGE@/@CONFIGFILE@ are merged.
.br
\fBNote:\fR Debug messages let the log-files grow quickly. Never use this
option in normal operation of mount.davfs.
.br
Default: no debugging messages
.RS
.TP
.B Recognized values:
.TP
.B config
Command line and configuration options.
.TP
.B kernel
Upcalls from the kernel file system.
.TP
.B cache
Cache operations like adding and removing nodes.
.TP
.B http
HTTP headers.
.TP
.B xml
Parsing of the XML-body of WebDAV-requests.
.TP
.B httpauth
Negotiation of authentication.
.TP
.B locks
Information about locks.
.TP
.B ssl
TLS/SSL related stuff like certificates.
.TP
.B httpbody
Complete body of HTTP-responses.
.TP
.B secrets
Also print confidential information, which is usually omitted or obscured.
.TP
.B most
Includes config, kernel, cache and http.
.RE


.SH AUTHORS

This man page was written by by Werner Baumann
<werner.baumann@onlinehome.de>.


.SH DAVFS2 HOME

http://savannah.nongnu.org/projects/davfs2


.SH SEE ALSO

.BR @PROGRAM_NAME@ (8),
.BR u@PROGRAM_NAME@ (8),
.BR mount (8),
.BR umount (8),
.BR fstab (5)

1103
man/davfs2.conf.5.pot Normal file

File diff suppressed because it is too large Load Diff

53
man/de/Makefile.am Normal file
View File

@ -0,0 +1,53 @@
## Makefile for man/de directory in davfs.
## Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann
##
## This file is part of davfs2.
##
## davfs2 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 3 of the License, or
## (at your option) any later version.
##
## davfs2 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 davfs2; if not, write to the Free Software Foundation,
## Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */

## Process this file with automake to produce Makefile.in

pkgsysconfdir = $(sysconfdir)/@PACKAGE@
pkglocalstatedir = $(dav_localstatedir)/mount.davfs
pkgsyscachedir = $(dav_syscachedir)/@PACKAGE@
mandir = $(datadir)/man
manual5dir = $(mandir)/de/man5
manual8dir = $(mandir)/de/man8

edit = sed \
-e 's|@PACKAGE[@]|$(PACKAGE)|g' \
-e 's|@PACKAGE_STRING[@]|$(PACKAGE_STRING)|g' \
-e 's|@PROGRAM_NAME[@]|mount.davfs|g' \
-e 's|@SYS_CONF_DIR[@]|$(pkgsysconfdir)|g' \
-e 's|@SYS_RUN[@]|$(pkglocalstatedir)|g' \
-e 's|@SYS_CACHE_DIR[@]|$(pkgsyscachedir)|g' \
-e 's|@SECRETSFILE[@]|secrets|g' \
-e 's|@CONFIGFILE[@]|$(PACKAGE).conf|g' \
-e 's|@CERTS_DIR[@]|certs|g' \
-e 's|@CLICERTS_DIR[@]|private|g' \
-e 's|@USER[@]|$(dav_user)|g' \
-e 's|@GROUP[@]|$(dav_group)|g'

manual5_DATA = davfs2.conf.5.gz
manual8_DATA = mount.davfs.8.gz umount.davfs.8.gz

EXTRA_DIST = davfs2.conf.5 mount.davfs.8 umount.davfs.8 \
davfs2.conf.5.po mount.davfs.8.po umount.davfs.8.po \
davfs2.conf.5.translator mount.davfs.8.translator \
umount.davfs.8.translator
CLEANFILES = $(manual5_DATA) $(manual8_DATA)

%.gz: %
$(edit) $< | gzip -9 > $@

1326
man/de/davfs2.conf.5.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
PO4A-HEADER:mode=after;position=^\.SH AUTOREN;beginboundary=^\.SH
.SH ÜBERSETZER
Das Handbuch wurde von Werner Baumann <werner.baumann@onlinehome.de>
übersetzt. 2008-01-02

1322
man/de/mount.davfs.8.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
PO4A-HEADER:mode=after;position=^\.SH AUTOREN;beginboundary=^\.SH
.SH ÜBERSETZER
Das Handbuch wurde von Werner Baumann <werner.baumann@onlinehome.de>
übersetzt. 2008-01-02

249
man/de/umount.davfs.8.po Normal file
View File

@ -0,0 +1,249 @@
# #-#-#-#-# umount.davfs.8.po (davfs2 1.4.0) #-#-#-#-#
# German translation of umount.davfs(8) man page.
# Copyright (C) 2007 Werner Baumann
# Werner Baumann <werner.baumann@onlinehome.de>, 2007.
#
msgid ""
msgstr ""
"Project-Id-Version: davfs2 1.4.0\n"
"POT-Creation-Date: 2009-04-13 21:30+0300\n"
"PO-Revision-Date: 2009-04-13 21:49+0200\n"
"Last-Translator: Werner Baumann <werner.baumann@onlinehome.de>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

# type: TH
#: davfs2.conf.5:1 mount.davfs.8:1 umount.davfs.8:1
#, no-wrap
msgid "2009-04-13"
msgstr "2009-04-13"

# type: TH
#: davfs2.conf.5:1 mount.davfs.8:1 umount.davfs.8:1
#, no-wrap
msgid "@PACKAGE_STRING@"
msgstr "@PACKAGE_STRING@"

# type: SH
#: davfs2.conf.5:4 mount.davfs.8:3 umount.davfs.8:3
#, no-wrap
msgid "NAME"
msgstr "BEZEICHNUNG"

# type: SH
#: davfs2.conf.5:9 mount.davfs.8:22 umount.davfs.8:20
#, no-wrap
msgid "DESCRIPTION"
msgstr "BESCHREIBUNG"

# type: SH
#: davfs2.conf.5:501 mount.davfs.8:514 umount.davfs.8:79
#, no-wrap
msgid "AUTHORS"
msgstr "AUTOREN"

# type: SH
#: davfs2.conf.5:507 mount.davfs.8:531 umount.davfs.8:84
#, no-wrap
msgid "DAVFS2 HOME"
msgstr "DAVFS2 HOME"

# type: Plain text
#: davfs2.conf.5:510 mount.davfs.8:534 umount.davfs.8:87
msgid "http://savannah.nongnu.org/projects/davfs2"
msgstr "http://savannah.nongnu.org/projects/davfs2"

# type: SH
#: davfs2.conf.5:512 mount.davfs.8:536 umount.davfs.8:89
#, no-wrap
msgid "SEE ALSO"
msgstr "SIEHE AUCH"

# type: SH
#: mount.davfs.8:8 umount.davfs.8:8
#, no-wrap
msgid "SYNOPSIS"
msgstr "ÜBERSICHT"

# type: SH
#: mount.davfs.8:15 umount.davfs.8:15
#, no-wrap
msgid "SYNOPSIS (root only)"
msgstr "ÜBERSICHT (nur für root)"

# type: Plain text
#: mount.davfs.8:61 umount.davfs.8:30
msgid ""
"I<dir> is the mountpoint where the WebDAV resource is mounted on. It may be "
"an absolute or relative path."
msgstr ""
"I<dir> ist der Einhängepunkt. Es kann eine absolute oder relative Pfadangabe "
"sein."

# type: SH
#: mount.davfs.8:68 umount.davfs.8:51
#, no-wrap
msgid "OPTIONS"
msgstr "OPTIONEN"

# type: TP
#: mount.davfs.8:70 umount.davfs.8:53
#, no-wrap
msgid "B<-V --version>"
msgstr "B<-V --version>"

# type: Plain text
#: mount.davfs.8:73 umount.davfs.8:56
msgid "Output version."
msgstr "Zeige die Version an."

# type: TP
#: mount.davfs.8:74 umount.davfs.8:57
#, no-wrap
msgid "B<-h --help>"
msgstr "B<-h --help>"

# type: Plain text
#: mount.davfs.8:77 umount.davfs.8:60
msgid "Print a help message."
msgstr "Zeige einen Hilfe-Text an."

# type: SH
#: mount.davfs.8:345 umount.davfs.8:67
#, no-wrap
msgid "FILES"
msgstr "DATEIEN"

# type: TP
#: mount.davfs.8:406 umount.davfs.8:69
#, no-wrap
msgid "I<@SYS_RUN@>"
msgstr "I<@SYS_RUN@>"

# type: SH
#: mount.davfs.8:509 umount.davfs.8:74
#, no-wrap
msgid "BUGS"
msgstr "FEHLER"

# type: TH
#: umount.davfs.8:1
#, no-wrap
msgid "u@PROGRAM_NAME@"
msgstr "u@PROGRAM_NAME@"

# type: Plain text
#: umount.davfs.8:6
msgid "u@PROGRAM_NAME@ - Umount-helper to unmount a @PACKAGE@ file system"
msgstr "u@PROGRAM_NAME@ - Umount-Hilfsprogramm für @PACKAGE@ Dateisysteme"

# type: Plain text
#: umount.davfs.8:11
msgid "B<u@PROGRAM_NAME@ [-h | --help] [-V | --version]>"
msgstr "B<u@PROGRAM_NAME@ [-h | --help] [-V | --version]>"

# type: Plain text
#: umount.davfs.8:13
msgid "B<umount >I<dir>"
msgstr "B<umount >I<dir>"

# type: Plain text
#: umount.davfs.8:18
msgid "B<u@PROGRAM_NAME@ >I<dir>"
msgstr "B<u@PROGRAM_NAME@ >I<dir>"

# type: Plain text
#: umount.davfs.8:26
msgid ""
"B<u@PROGRAM_NAME@> is a umount helper program. It is called by the B<umount>"
"(8) command. Its purpose is to prevent the umount command from returning "
"unless B<@PROGRAM_NAME@> has synchronized all its cached files with the "
"webdav server."
msgstr ""
"B<u@PROGRAM_NAME@> ist ein Hilfsprogramm, das von B<umount>(8) aufgerufen "
"wird. Es soll verhindern, dass das umount-Kommando zurück kehrt, bevor "
"B<@PROGRAM_NAME@> alle geänderten Dateien aus dem Cache auf den WebDAV-"
"Server zurück sichern konnte."

# type: Plain text
#: umount.davfs.8:39
msgid ""
"While for local file systems B<umount>(8) will only return when all cached "
"data have been written to disk, this is not automatically true for a mounted "
"B<@PACKAGE@> file system. With this umount helper the user can rely on the "
"familiar behaviour of B<umount>(8). To inform the operating system that the "
"file system uses a network connection, you should always use the B<_netdev> "
"option, when mounting as B<@PACKAGE@> file system."
msgstr ""
"Bei lokalen Dateisystemen kehrt B<umount>(8) erst zurück, wenn alle Daten "
"aus dem Cache auf die Festplatte geschrieben sind. Dies funkioniert bei "
"einem B<@PACKAGE@>-Dateisystem nicht automatisch. Mit diesem Hilfsprogramm "
"kann sich der Benutzer auf das bekannte Verhalten von B<umount>(8) "
"verlassen. Es sollte auch immer mit der Option B<_netdev> eingehängt werden, "
"damit das Betriebssystem darüber informiert wird, dass das B<@PACKAGE@>-"
"Dateisystem eine Netzwerkverbindung braucht."

# type: Plain text
#: umount.davfs.8:43
msgid ""
"Depending on the amount of data and the quality of the connection, "
"unmounting a B<@PACKAGE@> file system may take some seconds up to some hours."
msgstr ""
"Abhängig von der Datenmenge und der Qualität der Netzwerkverbindung kann das "
"Aushängen ein paar Sekunden, aber auch einige Stunden dauern."

# type: Plain text
#: umount.davfs.8:49
msgid ""
"If the B<@PROGRAM_NAME@> daemon encountered serious errors, "
"B<u@PROGRAM_NAME@> may return an error instead of unmounting the file "
"system. In this case try B<umount -i>. The B<-i> option will prevent "
"B<umount>(8) from calling B<u@PROGRAM_NAME@>."
msgstr ""
"Wenn der B<@PROGRAM_NAME@>-Hintergrundprozess ernste Probleme hat, kann "
"B<u@PROGRAM_NAME@> möglicherweise das Dateisystem nicht aushängen, sondern "
"meldet einen Fehler. Versuche es in diesem Fall mit B<umount -i>. Die Option "
"B<-i> hindert B<umount>(8) daran, B<u@PROGRAM_NAME@> aufzurufen."

# type: TP
#: umount.davfs.8:61
#, no-wrap
msgid "B<-f -l -n -r -v>"
msgstr "B<-f -l -n -r -v>"

# type: Plain text
#: umount.davfs.8:65
msgid ""
"This options are B<ignored>. They are only recognized for compatibility with "
"B<umount>(8)."
msgstr ""
"Dies Optionen dienen nur der Kompatibilität mit B<umount>(8) und werden "
"ignoriert."

# type: Plain text
#: umount.davfs.8:72
msgid "PID-files of running B<u@PROGRAM_NAME@> processes are looked up here."
msgstr ""
"Die PID-Dateien der laufenden B<@PROGRAM_NAME@>-Hintergrundprozesse werden "
"in diesem Verzeichnis gesucht."

# type: Plain text
#: umount.davfs.8:77
msgid "No known bugs."
msgstr "Derzeit keine bekannten."

# type: Plain text
#: umount.davfs.8:82
msgid ""
"This man page was written by Werner Baumann E<lt>werner.baumann@onlinehome."
"deE<gt>."
msgstr ""
"Diese Handbuch hat Werner Baumann E<lt>werner.baumann@onlinehome.deE<gt> "
"geschrieben."

# type: Plain text
#: umount.davfs.8:94
msgid "B<@PROGRAM_NAME@>(8), B<umount>(8), B<@CONFIGFILE@>(5), B<fstab>(5)"
msgstr "B<@PROGRAM_NAME@>(8), B<umount>(8), B<@CONFIGFILE@>(5), B<fstab>(5)"

View File

@ -0,0 +1,4 @@
PO4A-HEADER:mode=after;position=^\.SH AUTOREN;beginboundary=^\.SH
.SH ÜBERSETZER
Das Handbuch wurde von Werner Baumann <werner.baumann@onlinehome.de>
übersetzt. 2008-01-02

54
man/es/Makefile.am Normal file
View File

@ -0,0 +1,54 @@
## Makefile for man/es directory in davfs.
## Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann
##
## This file is part of davfs2.
##
## davfs2 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 3 of the License, or
## (at your option) any later version.
##
## davfs2 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 davfs2; if not, write to the Free Software Foundation,
## Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */

## Process this file with automake to produce Makefile.in

pkgsysconfdir = $(sysconfdir)/@PACKAGE@
pkglocalstatedir = $(dav_localstatedir)/mount.davfs
pkgsyscachedir = $(dav_syscachedir)/@PACKAGE@
mandir = $(datadir)/man
manual5dir = $(mandir)/es/man5
#manual8dir = $(mandir)/es/man8

edit = sed \
-e 's|@PACKAGE[@]|$(PACKAGE)|g' \
-e 's|@PACKAGE_STRING[@]|$(PACKAGE_STRING)|g' \
-e 's|@PROGRAM_NAME[@]|mount.davfs|g' \
-e 's|@SYS_CONF_DIR[@]|$(pkgsysconfdir)|g' \
-e 's|@SYS_RUN[@]|$(pkglocalstatedir)|g' \
-e 's|@SYS_CACHE_DIR[@]|$(pkgsyscachedir)|g' \
-e 's|@SECRETSFILE[@]|secrets|g' \
-e 's|@CONFIGFILE[@]|$(PACKAGE).conf|g' \
-e 's|@CERTS_DIR[@]|certs|g' \
-e 's|@CLICERTS_DIR[@]|private|g' \
-e 's|@USER[@]|$(dav_user)|g' \
-e 's|@GROUP[@]|$(dav_group)|g'

manual5_DATA = davfs2.conf.5.gz
#manual8_DATA = mount.davfs.8.gz umount.davfs.8.gz

#EXTRA_DIST = davfs2.conf.5 mount.davfs.8 umount.davfs.8 \
# davfs2.conf.5.po mount.davfs.8.po umount.davfs.8.po \
# davfs2.conf.5.translator mount.davfs.8.translator \
# umount.davfs.8.translator
EXTRA_DIST = davfs2.conf.5 davfs2.conf.5.po
CLEANFILES = $(manual5_DATA) $(manual8_DATA)

%.gz: %
$(edit) $< | gzip -9 > $@

1255
man/es/davfs2.conf.5.po Normal file

File diff suppressed because it is too large Load Diff

542
man/mount.davfs.8 Normal file
View File

@ -0,0 +1,542 @@
.TH @PROGRAM_NAME@ 8 "2009\-04\-13" @PACKAGE_STRING@

.SH NAME

@PROGRAM_NAME@ \- Mount a WebDAV resource in a directory


.SH SYNOPSIS

.B @PROGRAM_NAME@ [\-h | \-\-help] [\-V | \-\-version]
.br
.BI "mount {" dir " | " webdavserver }


.SH SYNOPSIS (root only)

.BI "mount \-t davfs [\-o " option [,...]] " webdavserver dir"
.br
.BI "@PROGRAM_NAME@ [\-o " option [,...]] " webdavserver dir"


.SH DESCRIPTION

\fB@PROGRAM_NAME@\fR allows you to mount the WebDAV resource identified by
.I webdavserver
into the local filesystem at
.I dir.
WebDAV is an extension to HTTP that allows remote, collaborative authoring
of Web resources, defined in RFC 4918.
\fB@PROGRAM_NAME@\fR is part of \fB@PACKAGE@\fR.

.PP
\fB@PACKAGE@\fR allows documents on a remote Web server to be edited using
standard applications. For example, a remote Web site could be updated
in\-place using the same development tools that initially created the site.
Or you may use a WebDAV resource for documents you want to access and edited
from different locations.

.PP
\fB@PACKAGE@\fR supports \fBTLS/SSL\fR (if the neon library supports it) and
proxies. \fB@PROGRAM_NAME@\fR runs as a daemon in userspace. It integrates into the
virtual file system by either the coda or the fuse kernel files system.
Currently CODA_KERNEL_VERSION 3 and FUSE_KERNEL_VERSION 7 are supported.

.PP
\fB@PROGRAM_NAME@\fR is usually invoked by the \fBmount\fR(8) command when
using the \fI\-t davfs\fP option. After mounting it runs as a daemon. To unmount
the \fBumount\fR(8) command is used.

.PP
\fIwebdavserver\fP must be a complete url, including scheme, fully qualified
domain name and path. Scheme may be \fBhttp\fR or \fBhttps\fR. If the path
contains spaces or other characters, that might be interpreted by the shell,
the url must be enclosed in double quotes
(e.g. \fI"http://foo.bar/name with spaces"\fP). See \fBURLS AND MOUNT POINTS
WITH SPACES\fR.

.PP
\fIdir\fP is the mountpoint where the WebDAV resource is mounted on.
It may be an absolute or relative path.

.PP
\fIfstab\fP may be used to define mounts and mount options as usual. In
place of the device the url of the WebDAV server must be given. There must not
be more than one entry in \fIfstab\fP for every mountpoint.


.SH OPTIONS

.TP
.B \-V \-\-version
Output version.

.TP
.B \-h \-\-help
Print a help message.

.TP
.B \-o
A comma\-separated list defines mount options to be used. Available options
are:

.RS
.TP
.B [no]auto
Can (not) be mounted with \fBmount \-a\fR.
.br
Default: \fBauto\fR.

.TP
.B conf=\fIabsolute path\fP
An alternative user configuration file. This option is intended for cases
where the default user configuration file in the users home directory can not
be used.
.br
Default: \fI~/.@PACKAGE@/@CONFIGFILE@\fP

.TP
.B [no]dev
(Do not) interpret character or block special devices on the file system.
This option is only included for compatibility with the \fBmount\fR(8)
program. It will allways be set to \fBnodev\fR

.TP
.B dir_mode=\fImode\fP
The default mode bits for directories in the mounted file system. Value given
in octal. s\-bits for user and group are allways silently ignored.
.br
Default: calculated from the umask of the mounting user; an x\-bit is
associated to every r\-bit in u\-g\-o.

.TP
.B [no]exec
(Do not) allow execution of any binaries on the mounted file system.
.br
Default: \fBexec\fR. (When mounting as an ordinary user, the \fBmount\fR(8)
program will set the default to \fBnoexec\fR.)

.TP
.B file_mode=\fImode\fP
The default mode bits for files in the mounted file system. Value given
in octal. s\-bits for user and group are allways silently ignored.
.br
Default: calculated from the umask of the mounting user; no x\-bits
are set for files.

.TP
.B gid=\fIgroup\fP
The group the mounted file system belongs to. It may be a numeric ID or a
group name. The mounting user, if not root, must be member of this group.
.br
Default: the primary group of the mounting user.

.TP
.B [no]_netdev
The file system needs a (no) network connection for operation. This information
allows the operating system to handle the file system properly at system start
and when the network is shut down.
.br
Default: \fB_netdev\fR

.TP
.B ro
Mount the file system read\-only.
.br
Default: \fBrw\fR.

.TP
.B rw
Mount the file system read\-write.
.br
Default: \fBrw\fR.

.TP
.B [no]suid
Do not allow set\-user\-identifier or set\-group\-identifier bits to take effect.
This option is only included for compatibility with the mount program. It will
allways be set to \fBnosuid\fR.

.TP
.B [no]user
(Do not) allow an ordinary user to mount the file system. The name of the
mounting user is written to \fImtab\fP so that he can unmount the file system
again. Option \fBuser\fR implies the options \fBnoexec\fR, \fBnosuid\fR and
\fBnodev\fR (unless overridden by subsequent options). This option makes only
sense when set in \fIfstab\fP.
.br
Default: ordinary users are not allowed to mount.

.TP
.B uid=\fIuser\fP
The owner of the mounted file system. It may be a numeric ID or a user name.
Only when mounted by root, this may be different from the mounting user.
.br
Default: ID of the mounting user.
.RE


.SH SECURITY POLICY

\fB@PROGRAM_NAME@\fR needs root privileges for mounting. But running a daemon,
that is connected to the internet, with root privileges is a security risk. So
\fB@PROGRAM_NAME@\fR will change its uid and gid when entering daemon mode.

.RS
.PP
When invoked by root \fB@PROGRAM_NAME@\fR will run as user \fB@USER@\fR and
group \fB@GROUP@\fR. This may be changed in \fI@SYS_CONF_DIR@/@CONFIGFILE@\fP.

.PP
When invoked by an ordinary user it will run with the id of this user and
with group \fB@GROUP@\fR.
.RE

As the file system may be mounted over an insecure internet connection,
this increases the risk that malicious content may be included in the file
system. So \fB@PROGRAM_NAME@\fR is slightly more restrictive than
\fBmount\fR(8).

.RS
.PP
Options \fBnosuid\fR and \fBnodev\fR will always be set; even root can not
change this.

.PP
For ordinary users to be able to mount, they must be member of group
\fB@GROUP@\fR and there must be an entry in \fIfstab\fP.

.PP
When mounted by an ordinary user, the mount point must not lie within the
home directory of another user.

.PP
If in \fIfstab\fP option \fBuid\fR and/or \fBgid\fR are given, an ordinary
user can only mount, if her uid is the one given in option \fBuid\fR and
he belongs to the group given in option \fBgid\fR.
.RE

\fBWARNING:\fR If root allows an ordinary user to mount a file system
(using \fIfstab\fP) this includes the permission to read the
associated \fBcredentials\fR from \fI@SYS_CONF_DIR@/@SECRETSFILE@\fP
as well as the \fBprivate key\fR of the associated \fBclient certificate\fR
and the mounting user may get access to this information. You should only
do this, if you might as well give this information to the user directly.

.SH URLS AND MOUNT POINTS WITH SPACES

Special characters like spaces in pathnames are a mess. They are interpreted
differently by different programs and protocols, and there are different rules
for escaping.

.PP
In \fIfstab\fP spaces must be replaced by a three digit octal escape
sequence. Write \fIhttp://foo.bar/path\(rs040with\(rs040spaces\fP instead of
\fIhttp://foo.bar/path with spaces\fP. It might also be necessary to
replace the '#'\-character by \(rs043.

.PP
For the \fI@CONFIGFILE@\fP and the \fI@SECRETSFILE@\fP files please see
the escape and quotation rules described in the \fB@CONFIGFILE@\fR(5) man page.

.PP
On \fIcommand line\fP you must obey the escaping rules of the shell.

.PP
After escaping and quotation have been removed by the respective program,
the url and mount point must resolve to exactly the same string, whether they
are taken from \fIfstab\fP, \fI@CONFIGFILE@\fP, \fI@SECRETSFILE@\fP or
the command line.


.SH CACHING

\fB@PROGRAM_NAME@\fR tries to reduce HTTP\-trafic by caching and reusing data.
Information about directories and files are held in memory, while downloaded
files are cached on disk.

.PP
\fB@PROGRAM_NAME@\fR will consider cached information about directories and file
attributes valid for a configurable time and look up this information on
the server only after this time has expired (or there is other evidence
that this information is stale). So if somebody else creates or deletes
files on the server it may take some time before the local file system
reflects this.

.PP
This will not affect the content of files and directory listings. Whenever
a file is opened, the server is looked up for a newer version of the file.
Please consult the manual \fB@CONFIGFILE@\fR(5) to see how can you configure
this according your needs.


.SH LOCKS, LOST UPDATE PROBLEM AND BACKUP FILES

WebDAV introduced locks and \fB@PROGRAM_NAME@\fR uses them by default. This will in
most cases prevent two people from changing the same file in parallel. But not
allways:

.RS
.PP
You might have disabled locks in \fI@SYS_CONF_DIR@/@CONFIGFILE@\fP or
\fI~/.@PACKAGE@/@CONFIGFILE@\fP.

.PP
The server might not support locks (they are not mandatory).

.PP
A bad connection might prevent \fB@PROGRAM_NAME@\fR from refreshing the lock
in time.

.PP
Another WebDAV\-client might use your lock (that is not too difficult and might
even happen without intention).
.RE

.PP
\fB@PROGRAM_NAME@\fR will therefore allways check if the file has been changed on the
the server before it uploads a new version. Unfortunately it has to do this in
two separate HTTP requests, as not all servers support conditional PUT. If it
finds it impossible to upload the locally changed file, it will store it in
the local backup direcotry \fIlost+found\fP. You should check this directory from
time to time and decide what to do with this files.

.PP
Sometimes locks held by some client on the server will not be released. Maybe
the client crashes or the network connection fails. When \fB@PROGRAM_NAME@\fR
finds a file locked on the server, it will check whether the lock is
held by \fB@PROGRAM_NAME@\fR and the current user, and if so tries to reuse and
release it. But this will not allways succeed. So servers should automatically
release locks after some time, when they are not refreshed by the client.

.PP
WebDAV allows to lock files that don't exist (to protect the name when a client
intends to create a new file). This locks will be displayed as files with
size 0 and last modified date of 1970\-01\-01. If this locks are not released
properly \fB@PROGRAM_NAME@\fR may not be able to access this files. You can use
\fBcadaver\fR(1) <\fIhttp://www.webdav.org/cadaver/\fP> to remove this locks.


.SH FILE OWNER AND PERMISSIONS

\fB@PACKAGE@\fR implements Unix permissions for access control. But
changing owner and permissions of a file is only \fBlocal\fR. It is
intended as a means for the owner of the file system, to controll whether
other local users may acces this file system.

.PP
The server does not know about this. From the servers point of view there is
just one user (identified by the credentials) connected. Another WebDAV\-client,
connected to the same server, is not affected by this local changes.

.PP
There is one exeption: The \fBexecute bit\fR on files is stored as a
property on the sever. You may think of this property as an information about
the type of file rather than a permission. Whether the file is executable
on the local system is still controlled by mount options and local permissions.

.PP
When the file system is unmounted, attributes of cached files (including
owner and permissions) are stored in cache, as well as the attributs of
the direcotries they are in. But there is no information stored about
directories that do not contain cached files.


.SH FILES

.TP
.I @SYS_CONF_DIR@/@CONFIGFILE@
System wide configuration file.

.TP
.I ~/.@PACKAGE@/@CONFIGFILE@
Configuration file in the users home directory.The user configuration takes
precedence over the system wide configuration. If it does not exist,
\fB@PROGRAM_NAME@\fR will will create a template file.

.TP
.I @SYS_CONF_DIR@/@SECRETSFILE@
Holds the credentials for WebDAV servers and the proxy, as well as
decryption passwords for client certificates. The file must be
read\-writable by root only.

.TP
.I ~/.@PACKAGE@/@SECRETSFILE@
Holds credentials for WebDAV servers and proxy, as well as decryption
passwords for client certificates. The file must be
read\-writable by the owner only. Credentials are first
looked up in the home directory of the mounting user. If not found
there the system wide secrets file is consulted. If no creditentials and
passwords are found they are asked from the user interactively (if not
disabled). If the file does not exist, \fB@PROGRAM_NAME@\fR will will
create a template file.

.TP
.I @SYS_CONF_DIR@/@CERTS_DIR@
You may store trusted server certificates here, that can not be verified
by use of the system wide CA\-Certificates. This is useful when your server
uses a selfmade certificate. You must configure the \fBservercert\fR option in
\fI@SYS_CONF_DIR@/@CONFIGFILE@\fP or \fI~/.@PACKAGE@/@CONFIGFILE@\fP to use
it. Certificates must be in PEM format.
.br
Be sure to verify the certificate.

.TP
.I ~/.@PACKAGE@/@CERTS_DIR@
You may store trusted server certificates here, that can not be verified
by use of the system wide CA\-Certificates. This is useful when your server
uses a selfmade certificate. You must configure the \fBservercert\fR option in
\fI~/.@PACKAGE@/@CONFIGFILE@\fP to use it. Certificates must be in PEM format.
.br
Be sure to verify the certificate.

.TP
.I @SYS_CONF_DIR@/@CERTS_DIR@/@CLICERTS_DIR@
To store client certificates. Certificates must be in PKCS#12 format. You must
configure the \fBclientcert\fR option in \fI@SYS_CONF_DIR@/@CONFIGFILE@\fP or
\fI~/.@PACKAGE@/@CONFIGFILE@\fP to use it. This directory must be rwx by root
only.

.TP
.I ~/.@PACKAGE@/@CERTS_DIR@/@CLICERTS_DIR@
To store client certificates. Certificates must be in PKCS#12 format. You must
configure the \fBclientcert\fR option in \fI~/.@PACKAGE@/@CONFIGFILE@\fP to
use it. This directory must be rwx by the owner only.

.TP
.I @SYS_RUN@
PID\-files of running mount.davfs processes are stored there. This directory
must belong to group \fB@USER@\fR with write permissions for the group and
the sticky\-bit set (mode 1775). The PID\-files are named after the mount point
of the file system.

.TP
.I @SYS_CACHE_DIR@
System wide directory for cached files. Used when the file system is
mounted by root. It must belong do group \fB@USER@\fR and read, write and
execute bits for group must be set. There is a subdirectory for every mounted
file system. The names of this subdirectories are created from url, mount
point and user name.

.TP
.I ~/.@PACKAGE@/cache
Cache directory in the mounting users home directory. For every mounted
WebDAV resource a subdirectory is created.
.RE

\fB@PROGRAM_NAME@\fR will try to create missing directories, but it will
\fBnot\fR touch \fI@SYS_CONF_DIR@\fP.

.SH ENVIRONMENT

.TP
.B https_proxy http_proxy all_proxy
If no proxy is defined in the configuration file the value is taken from
this environment variables. The proxy may be given with or without scheme
and with or without port
.br
http_proxy=[http://]foo.bar[:3218]
.br
Only used when the mounting user is root.

.TP
.B no_proxy
A comma separated list of domain names that shall be accessed directly.
\fB*\fR matches any domain name. A domain name starting with \fB.\fR
(period) matches all subdomains.
.br
Only used when the mounting user is root.
.br
Not applied when the proxy is defined in \fI@SYS_CONF_DIR@\fP.


.SH EXAMPLES

.B Non root user (e.g. filomena):

.PP
To allow an ordinary user to mount there must be an entry in \fIfstab\fP
.RS
http://webdav.org/dav /media/dav davfs noauto,user 0 0
.RE

.PP
If a proxy must be used this should be configured in
\fI@SYS_CONF_DIR@/@CONFIGFILE@\fP
.RS
proxy proxy.mycompany.com:8080
.RE

.PP
Credentials are stored in \fI/home/filomena/.@PACKAGE@/@SECRETSFILE@\fP
.RS
proxy.mycompany.com filomena "my secret"
.br
/media/dav webdav\-username password
.RE

.PP
Now the WebDAV resource may be mounted by user filomena invoking
.RS
.B mount /media/dav
.RE

.PP
and unmounted by user filomena invoking
.RS
.B umount /media/dav
.RE

.PP
.B Root user only:

.PP
Mounts the resource \fIhttps://asciigirl.com/webdav\fP at mount point
\fI/mount/site\fP, encrypting all traffic with SSL. Credentials for
\fIhttp://webdav.org/dav\fP will be looked up in \fI@SYS_CONF_DIR@/@SECRETSFILE@\fP,
if not found there the user will be asked.
.RS
.B mount \-t davfs \-o uid=otto,gid=users,mode=775 https://asciigirl.com/webdav /mount/site
.RE

.PP
Mounts the resource \fIhttp://linux.org.ar/repos\fP at \fI/dav\fP.
.RS
.B mount.davfs \-o uid=otto,gid=users,mode=775 http://linux.org.ar/repos/ /dav
.RE


.SH BUGS

\fB@PACKAGE@\fR does not support links (neither hard nor soft ones).


.SH AUTHORS

This man page was written by Luciano Bello <luciano@linux.org.ar>
for Debian, for version 0.2.3 of davfs2.

.PP
It has been updated for this version by Werner Baumann
<werner.baumann@onlinhome.de>.

.PP
@PACKAGE@ is developed by Sung Kim <hunkim@gmail.com>.

.PP
Version 1.0.0 (and later) of @PACKAGE@ is a complete rewrite
by Werner Baumann.


.SH DAVFS2 HOME

http://savannah.nongnu.org/projects/davfs2


.SH SEE ALSO

.BR u@PROGRAM_NAME@ (8),
.BR @CONFIGFILE@ (5),
.BR mount (8),
.BR umount (8),
.BR fstab (5)

1075
man/mount.davfs.8.pot Normal file

File diff suppressed because it is too large Load Diff

33
man/po4a.conf Normal file
View File

@ -0,0 +1,33 @@
# po4a configuration for davfs2 man pages 2009-04-13

# List of available languages. Two-letter language codes must
# be lower case. The list must be in one line; no line
# continuation using backslash.

[po4a_langs] de es


# For each man page there is one .pot file.
# For each language there is a subdirectory holding the Make-files,
# the PO-files, the addendum files and the translated man pages.

[po4a_paths] $master.pot $lang:$lang/$master.po

# For each translated man page there should be at least one
# addendum file holding information about the translator(s).
# It should be named after the man page with extension
# .translator. Additional addendum files may be added.

[type:man] davfs2.conf.5 \
de:de/davfs2.conf.5 add_de:de/davfs2.conf.5.translator \
es:es/davfs2.conf.5 \
opt_de:"-L UTF-8 -A UTF-8" \
opt_es:"-k 75 -L UTF-8"

[type:man] mount.davfs.8 \
de:de/mount.davfs.8 add_de:de/mount.davfs.8.translator \
opt_de:"-L UTF-8 -A UTF-8"

[type:man] umount.davfs.8 \
de:de/umount.davfs.8 add_de:de/umount.davfs.8.translator \
opt_de:"-L UTF-8 -A UTF-8"

11
man/template.translator Normal file
View File

@ -0,0 +1,11 @@
PO4A-HEADER:mode=after;position=^\.SH AUTHORS;beginboundary=^\.SH
.SH TRANSLATOR(S)
YOUR TEXT

# Please replace AUTHORS by its translation, exactly as in the .po-file.
# Translate the string TRANSLATOR(S).
# Replace YOUR TEXT with information about the translators.
# Please use the same character encoding as in the .po-file.
# Rename the file. The name should be like the name of the man
# page, with .translator appended (e.g. mount.davfs.8.translator).
# Finally remove all this comment lines (lines beginning with #).

94
man/umount.davfs.8 Normal file
View File

@ -0,0 +1,94 @@
.TH u@PROGRAM_NAME@ 8 "2009-04-13" @PACKAGE_STRING@

.SH NAME

u@PROGRAM_NAME@ \- Umount-helper to unmount a @PACKAGE@ file system


.SH SYNOPSIS

.B u@PROGRAM_NAME@ [-h | --help] [-V | --version]
.br
.BI "umount " dir


.SH SYNOPSIS (root only)

.BI "u@PROGRAM_NAME@ " dir


.SH DESCRIPTION

\fBu@PROGRAM_NAME@\fR is a umount helper program. It is called by the
\fBumount\fR(8) command. Its purpose is to prevent the umount command
from returning unless \fB@PROGRAM_NAME@\fR has synchronized all its
cached files with the webdav server.

.PP
\fIdir\fP is the mountpoint where the WebDAV resource is mounted on.
It may be an absolute or relative path.

.PP
While for local file systems \fBumount\fR(8) will only return when all
cached data have been written to disk, this is not automatically true
for a mounted \fB@PACKAGE@\fR file system. With this umount helper the
user can rely on the familiar behaviour of \fBumount\fR(8). To inform
the operating system that the file system uses a network connection,
you should always use the \fB_netdev\fR option, when mounting as
\fB@PACKAGE@\fR file system.

.PP
Depending on the amount of data and the quality of the connection, unmounting
a \fB@PACKAGE@\fR file system may take some seconds up to some hours.

.PP
If the \fB@PROGRAM_NAME@\fR daemon encountered serious errors,
\fBu@PROGRAM_NAME@\fR may return an error instead of unmounting the file
system. In this case try \fBumount -i\fR. The \fB-i\fR option will prevent
\fBumount\fR(8) from calling \fBu@PROGRAM_NAME@\fR.


.SH OPTIONS

.TP
.B -V --version
Output version.

.TP
.B -h --help
Print a help message.

.TP
.B -f -l -n -r -v
This options are \fBignored\fR. They are only recognized for compatibility
with \fBumount\fR(8).


.SH FILES

.TP
.I @SYS_RUN@
PID-files of running \fBu@PROGRAM_NAME@\fR processes are looked up here.


.SH BUGS

No known bugs.


.SH AUTHORS

This man page was written by Werner Baumann <werner.baumann@onlinehome.de>.


.SH DAVFS2 HOME

http://savannah.nongnu.org/projects/davfs2


.SH SEE ALSO

.BR @PROGRAM_NAME@ (8),
.BR umount (8),
.BR @CONFIGFILE@ (5),
.BR fstab (5)

225
man/umount.davfs.8.pot Normal file
View File

@ -0,0 +1,225 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2009-04-13 21:30+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING"

# type: TH
#: davfs2.conf.5:1 mount.davfs.8:1 umount.davfs.8:1
#, no-wrap
msgid "2009-04-13"
msgstr ""

# type: TH
#: davfs2.conf.5:1 mount.davfs.8:1 umount.davfs.8:1
#, no-wrap
msgid "@PACKAGE_STRING@"
msgstr ""

# type: SH
#: davfs2.conf.5:4 mount.davfs.8:3 umount.davfs.8:3
#, no-wrap
msgid "NAME"
msgstr ""

# type: SH
#: davfs2.conf.5:9 mount.davfs.8:22 umount.davfs.8:20
#, no-wrap
msgid "DESCRIPTION"
msgstr ""

# type: SH
#: davfs2.conf.5:501 mount.davfs.8:514 umount.davfs.8:79
#, no-wrap
msgid "AUTHORS"
msgstr ""

# type: SH
#: davfs2.conf.5:507 mount.davfs.8:531 umount.davfs.8:84
#, no-wrap
msgid "DAVFS2 HOME"
msgstr ""

# type: Plain text
#: davfs2.conf.5:510 mount.davfs.8:534 umount.davfs.8:87
msgid "http://savannah.nongnu.org/projects/davfs2"
msgstr ""

# type: SH
#: davfs2.conf.5:512 mount.davfs.8:536 umount.davfs.8:89
#, no-wrap
msgid "SEE ALSO"
msgstr ""

# type: SH
#: mount.davfs.8:8 umount.davfs.8:8
#, no-wrap
msgid "SYNOPSIS"
msgstr ""

# type: SH
#: mount.davfs.8:15 umount.davfs.8:15
#, no-wrap
msgid "SYNOPSIS (root only)"
msgstr ""

# type: Plain text
#: mount.davfs.8:61 umount.davfs.8:30
msgid ""
"I<dir> is the mountpoint where the WebDAV resource is mounted on. It may be "
"an absolute or relative path."
msgstr ""

# type: SH
#: mount.davfs.8:68 umount.davfs.8:51
#, no-wrap
msgid "OPTIONS"
msgstr ""

# type: TP
#: mount.davfs.8:70 umount.davfs.8:53
#, no-wrap
msgid "B<-V --version>"
msgstr ""

# type: Plain text
#: mount.davfs.8:73 umount.davfs.8:56
msgid "Output version."
msgstr ""

# type: TP
#: mount.davfs.8:74 umount.davfs.8:57
#, no-wrap
msgid "B<-h --help>"
msgstr ""

# type: Plain text
#: mount.davfs.8:77 umount.davfs.8:60
msgid "Print a help message."
msgstr ""

# type: SH
#: mount.davfs.8:345 umount.davfs.8:67
#, no-wrap
msgid "FILES"
msgstr ""

# type: TP
#: mount.davfs.8:406 umount.davfs.8:69
#, no-wrap
msgid "I<@SYS_RUN@>"
msgstr ""

# type: SH
#: mount.davfs.8:509 umount.davfs.8:74
#, no-wrap
msgid "BUGS"
msgstr ""

# type: TH
#: umount.davfs.8:1
#, no-wrap
msgid "u@PROGRAM_NAME@"
msgstr ""

# type: Plain text
#: umount.davfs.8:6
msgid "u@PROGRAM_NAME@ - Umount-helper to unmount a @PACKAGE@ file system"
msgstr ""

# type: Plain text
#: umount.davfs.8:11
msgid "B<u@PROGRAM_NAME@ [-h | --help] [-V | --version]>"
msgstr ""

# type: Plain text
#: umount.davfs.8:13
msgid "B<umount >I<dir>"
msgstr ""

# type: Plain text
#: umount.davfs.8:18
msgid "B<u@PROGRAM_NAME@ >I<dir>"
msgstr ""

# type: Plain text
#: umount.davfs.8:26
msgid ""
"B<u@PROGRAM_NAME@> is a umount helper program. It is called by the B<umount>"
"(8) command. Its purpose is to prevent the umount command from returning "
"unless B<@PROGRAM_NAME@> has synchronized all its cached files with the "
"webdav server."
msgstr ""

# type: Plain text
#: umount.davfs.8:39
msgid ""
"While for local file systems B<umount>(8) will only return when all cached "
"data have been written to disk, this is not automatically true for a mounted "
"B<@PACKAGE@> file system. With this umount helper the user can rely on the "
"familiar behaviour of B<umount>(8). To inform the operating system that the "
"file system uses a network connection, you should always use the B<_netdev> "
"option, when mounting as B<@PACKAGE@> file system."
msgstr ""

# type: Plain text
#: umount.davfs.8:43
msgid ""
"Depending on the amount of data and the quality of the connection, "
"unmounting a B<@PACKAGE@> file system may take some seconds up to some hours."
msgstr ""

# type: Plain text
#: umount.davfs.8:49
msgid ""
"If the B<@PROGRAM_NAME@> daemon encountered serious errors, "
"B<u@PROGRAM_NAME@> may return an error instead of unmounting the file "
"system. In this case try B<umount -i>. The B<-i> option will prevent "
"B<umount>(8) from calling B<u@PROGRAM_NAME@>."
msgstr ""

# type: TP
#: umount.davfs.8:61
#, no-wrap
msgid "B<-f -l -n -r -v>"
msgstr ""

# type: Plain text
#: umount.davfs.8:65
msgid ""
"This options are B<ignored>. They are only recognized for compatibility with "
"B<umount>(8)."
msgstr ""

# type: Plain text
#: umount.davfs.8:72
msgid "PID-files of running B<u@PROGRAM_NAME@> processes are looked up here."
msgstr ""

# type: Plain text
#: umount.davfs.8:77
msgid "No known bugs."
msgstr ""

# type: Plain text
#: umount.davfs.8:82
msgid ""
"This man page was written by Werner Baumann E<lt>werner.baumann@onlinehome."
"deE<gt>."
msgstr ""

# type: Plain text
#: umount.davfs.8:94
msgid "B<@PROGRAM_NAME@>(8), B<umount>(8), B<@CONFIGFILE@>(5), B<fstab>(5)"
msgstr ""

2
po/LINGUAS Normal file
View File

@ -0,0 +1,2 @@
# Set of available languages.
cs de

41
po/Makevars Normal file
View File

@ -0,0 +1,41 @@
# Makefile variables for PO directory in any package using GNU gettext.

# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)

# These two variables depend on the location of this directory.
subdir = po
top_builddir = ..

# These options get passed to xgettext.
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_

# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package. (Note that the msgstr strings, extracted from the package's
# sources, belong to the copyright holder of the package.) Translators are
# expected to transfer the copyright for their translations to this person
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = Werner Baumann <werner.baumann@onlinehome.de>

# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
# in the GNU gettext documentation, section 'Preparing Strings'.
# - Strings which use unclear terms or require additional context to be
# understood.
# - Strings which make invalid assumptions about notation of date, time or
# money.
# - Pluralisation problems.
# - Incorrect English spelling.
# - Incorrect formatting.
# It can be your email address, or a mailing list address where translators
# can write to without being subscribed, or the URL of a web page through
# which the translators can contact you.
MSGID_BUGS_ADDRESS = http://savannah.nongnu.org/support/?func=additem&group=davfs2

# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =

8
po/POTFILES.in Normal file
View File

@ -0,0 +1,8 @@
# List of source files which contain translatable strings.
src/cache.c
src/dav_coda.c
src/dav_fuse.c
src/kernel_interface.c
src/mount_davfs.c
src/umount_davfs.c
src/webdav.c

843
po/cs.po Normal file
View File

@ -0,0 +1,843 @@
# Czech translation of davfs2
# Copyright (C) 2007 Werner Baumann <werner.baumann@onlinehome.de>
# This file is distributed under the same license as the PACKAGE package.
# Vítězslav Kotrla <vitko@post.cz>, 2007.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://savannah.nongnu.org/support/?"
"func=additem&group=davfs2\n"
"POT-Creation-Date: 2009-04-13 21:33+0200\n"
"PO-Revision-Date: 2007-05-03 19:50+0200\n"
"Last-Translator: Vítězslav Kotrla <vitko@post.cz>\n"
"Language-Team: <cs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bitX-Generator: KBabel 1.11.4\n"
"X-Generator: KBabel 1.11.4\n"

#: src/cache.c:608
msgid ""
"connection timed out two times;\n"
"trying one last time"
msgstr ""
"spojení vypršelo dvakrát;\n"
"zkouším to ještě jednou a naposledy"

#: src/cache.c:613
#, c-format
msgid "Last try succeeded.\n"
msgstr "Poslední pokus byl úspěšný.\n"

#: src/cache.c:616
msgid ""
"server temporarily unreachable;\n"
"mounting anyway"
msgstr ""
"server je dočasně nedostupný;\n"
"přesto připojuji"

#: src/cache.c:619
#, c-format
msgid ""
"Mounting failed.\n"
"%s"
msgstr ""
"Připojení selhalo;\n"
"%s"

#: src/cache.c:657
#, c-format
msgid "can't replace %s with %s"
msgstr "nemohu nahradit %s pomocí %s"

#: src/cache.c:661
#, c-format
msgid "error writing new index file %s"
msgstr "chyba při zápisu nového indexového souboru %s"

#: src/cache.c:665
#, c-format
msgid "can't create new index file for %s"
msgstr "nemohu vytvořit nový indexový soubor pro %s"

#: src/cache.c:2473 src/cache.c:2507
#, c-format
msgid "can't create cache file %s"
msgstr "nemohu vytvořit soubor vyrovnávací paměti %s"

#: src/cache.c:2522
#, c-format
msgid "error writing directory %s"
msgstr "chyba při zápisu adresáře %s"

#: src/cache.c:2688 src/mount_davfs.c:588 src/mount_davfs.c:590
#: src/mount_davfs.c:762 src/mount_davfs.c:764 src/mount_davfs.c:770
#: src/mount_davfs.c:810 src/mount_davfs.c:812 src/mount_davfs.c:829
#: src/mount_davfs.c:831 src/mount_davfs.c:1692 src/mount_davfs.c:1694
msgid "can't read user data base"
msgstr "nemohu přečíst údaje o uživatelích"

#: src/cache.c:2699
#, c-format
msgid "can't open cache directory %s"
msgstr "nemohu otevřít kešovací adresář %s"

#: src/cache.c:2714
#, c-format
msgid "can't create cache directory %s"
msgstr "nemohu vytvořit kešovací adresář %s"

#: src/cache.c:2721
#, c-format
msgid "can't access cache directory %s"
msgstr "nemohu přistoupit ke kešovacímu adresáři %s"

#: src/cache.c:2724
#, c-format
msgid "wrong owner of cache directory %s"
msgstr "chybný vlastník kešovacího adresáře %s"

#: src/cache.c:2728
#, c-format
msgid "wrong permissions set for cache directory %s"
msgstr "pro kešovací adresář %s nastaveno chybné oprávnění"

#: src/cache.c:2758
msgid "found orphaned file in cache:"
msgstr ""

#: src/cache.c:2829
#, c-format
msgid "error parsing %s"
msgstr "chyba při zpracování %s"

#: src/cache.c:2830
#, c-format
msgid " at line %i"
msgstr ""

#: src/cache.c:2875
#, c-format
msgid "open files exceed max cache size by %llu MiBytes"
msgstr ""
"otevřené soubory přesahují limit velikosti vyrovnávací paměti o %llu MiB"

#: src/dav_coda.c:163 src/dav_fuse.c:162
msgid "can't allocate message buffer"
msgstr "nemohu alokovat buffer pro zprávu"

#: src/kernel_interface.c:106
msgid "trying fuse kernel file system"
msgstr "zkouším jaderný souborový systém fuse"

#: src/kernel_interface.c:114
msgid "fuse device opened successfully"
msgstr "zařízení fuse otevřeno úspěšně"

#: src/kernel_interface.c:126
msgid "trying coda kernel file system"
msgstr "zkouším jaderný souborový systém coda"

#: src/kernel_interface.c:132
msgid "coda device opened successfully"
msgstr "zařízení coda otevřeno úspěšně"

#: src/kernel_interface.c:140
#, c-format
msgid "unknown kernel file system %s"
msgstr "neznámý jaderný souborový systém %s"

#: src/kernel_interface.c:187
msgid "no free coda device to mount"
msgstr "pro připojení není volné žádné coda zařízení"

#: src/kernel_interface.c:196
#, c-format
msgid "CODA_KERNEL_VERSION %u not supported"
msgstr "CODA_KERNEL_VERSION %u není podporováno"

#: src/kernel_interface.c:235
msgid "can't open fuse device"
msgstr "nemohu otevřít fuse zařízení"

#: src/kernel_interface.c:261
msgid "can't mount using fuse kernel file system"
msgstr "nemohu připojit jaderný souborový systém fuse"

#: src/mount_davfs.c:237
msgid "program is not setuid root"
msgstr "program není spuštěn jako setuid root"

#: src/mount_davfs.c:239 src/mount_davfs.c:440 src/mount_davfs.c:444
msgid "can't change effective user id"
msgstr "nemohu změnit identifikátor efektivního uživatele"

#: src/mount_davfs.c:305
msgid "can't start daemon process"
msgstr "nemohu spustit proces na pozadí"

#: src/mount_davfs.c:328
msgid "can't release root privileges"
msgstr "nemohu uvolnit oprávnění uživatele root"

#: src/mount_davfs.c:348
msgid "failed to release tty properly"
msgstr ""

#: src/mount_davfs.c:359
#, c-format
msgid "can't write pid file %s"
msgstr "nemohu zapsat pid souboru %s"

#: src/mount_davfs.c:377
#, c-format
msgid "unmounting %s"
msgstr "odpojuji %s"

#: src/mount_davfs.c:379
msgid "unmounting failed"
msgstr "odpojení selhalo"

#: src/mount_davfs.c:428 src/mount_davfs.c:491 src/mount_davfs.c:574
#: src/mount_davfs.c:834
#, c-format
msgid "group %s does not exist"
msgstr "skupina %s neexistuje"

#: src/mount_davfs.c:432
msgid "can't change group id"
msgstr "nemohu změnit id skupiny"

#: src/mount_davfs.c:437
#, c-format
msgid "user %s does not exist"
msgstr "uživatel %s neexistuje"

#: src/mount_davfs.c:477 src/mount_davfs.c:559 src/mount_davfs.c:594
#, c-format
msgid "can't create directory %s"
msgstr "nemohu vytvořit adresář %s"

#: src/mount_davfs.c:481 src/mount_davfs.c:563 src/mount_davfs.c:598
#: src/mount_davfs.c:603 src/mount_davfs.c:612
#, c-format
msgid "can't access directory %s"
msgstr "nemohu přistupovat k adresáři %s"

#: src/mount_davfs.c:487 src/mount_davfs.c:569
#, c-format
msgid "can't change mode of directory %s"
msgstr "nemohu změnit oprávnění (mode) adresáře %s"

#: src/mount_davfs.c:496 src/mount_davfs.c:579
#, c-format
msgid "can't change group of directory %s"
msgstr "nemohu změnit skupinu adresáře %s"

#: src/mount_davfs.c:607 src/mount_davfs.c:815
msgid "can't read group data base"
msgstr "nemohu přečíst údaje o skupinách"

#: src/mount_davfs.c:630
#, c-format
msgid "can't open file %s"
msgstr "nemohu otevřít soubor %s"

#: src/mount_davfs.c:635
#, c-format
msgid "%s is already mounted on %s"
msgstr "%s už je připojeno jako %s"

#: src/mount_davfs.c:658
#, c-format
msgid ""
"found PID file %s.\n"
"Either %s is used by another process,\n"
"or another mount process ended irregular"
msgstr ""
"nalezeno PID souboru %s.\n"
"Buď %s používá jiný proces, nebo\n"
"jiné připojení skončilo neobvykle"

#: src/mount_davfs.c:681
#, c-format
msgid "no entry for %s found in %s"
msgstr "pro %s nebyla v %s nalezena žádná položka"

#: src/mount_davfs.c:687
#, c-format
msgid "different URL in %s"
msgstr "v %s je jiné URL"

#: src/mount_davfs.c:695
#, c-format
msgid "different file system type in %s"
msgstr "v %s je jiný souborový systém"

#: src/mount_davfs.c:698
#, c-format
msgid "different config file in %s"
msgstr "v %s je jiný konfigurační soubor"

#: src/mount_davfs.c:700
#, c-format
msgid "option `user' not set in %s"
msgstr "volba 'user' není v %s nastavena"

#: src/mount_davfs.c:702
#, c-format
msgid "different mount options in %s"
msgstr "v %s jsou jiné parametry připojení"

#: src/mount_davfs.c:705
#, c-format
msgid "different uid in %s"
msgstr "v %s je odlišné uid"

#: src/mount_davfs.c:707
#, c-format
msgid "different gid in %s"
msgstr "v %s je odlišné gid"

#: src/mount_davfs.c:709
#, c-format
msgid "different dir_mode in %s"
msgstr "v %s je odlišný dir_mode"

#: src/mount_davfs.c:711
#, c-format
msgid "different file_mode in %s"
msgstr "v %s je odlišný file_mode"

#: src/mount_davfs.c:739
#, c-format
msgid "can't evaluate path of mount point %s"
msgstr "nemohu vyhodnotit cestu k přípojnému bodu %s"

#: src/mount_davfs.c:744
#, c-format
msgid "can't get home directory for uid %i"
msgstr "nemohu zjistit domovský adresář pro uid %i"

#: src/mount_davfs.c:746
msgid "A relative mount point must lie within your home directory"
msgstr "Relativní přípojný bod musí ležet ve vašem domovském adresáři"

#: src/mount_davfs.c:754
#, c-format
msgid "invalid mount point %s"
msgstr "neplatný přípojný bod %s"

#: src/mount_davfs.c:757
#, c-format
msgid "mount point %s does not exist"
msgstr "přípojný bod %s neexistuje"

#: src/mount_davfs.c:775
#, c-format
msgid ""
"%s is the home directory of user %s.\n"
"You can't mount into another users home directory"
msgstr ""
"%s je domovský adresář uživatele %s.\n"
"Do domovského adresáře jiného uživatele nemůžete nic připojovat"

#: src/mount_davfs.c:803
msgid "you can't set file owner different from your uid"
msgstr "nemůžete nastavit jiného vlastníka souboru než je vaše uid"

#: src/mount_davfs.c:821
msgid "you must be member of the group of the file system"
msgstr "musíte být členem skupiny souborového systému"

#: src/mount_davfs.c:841
#, c-format
msgid "user %s must be member of group %s"
msgstr "uživatel %s musí být členem skupiny %s"

#: src/mount_davfs.c:864
#, c-format
msgid "can't mount %s on %s"
msgstr "není možno připojit %s do %s"

#: src/mount_davfs.c:866
#, c-format
msgid "kernel does not know file system %s"
msgstr "kernel nezná souborový systém %s"

#: src/mount_davfs.c:868
msgid "mount point is busy"
msgstr "přípojný bod je zaneprázdněn"

#: src/mount_davfs.c:929 src/umount_davfs.c:88
#, c-format
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
msgstr ""
"Tento program je svobodný software, podmínky kopírování jsou uvedeny ve "
"zdrojovém kódu.\n"
"Program je poskytován BEZ JAKÉKOLIV záruky, včetně záruky PRODEJNOSTI či "
"VHODNOSTI K URČITÉMU ÚČELU.\n"

#: src/mount_davfs.c:945 src/umount_davfs.c:113
msgid "unknown error parsing arguments"
msgstr "neznámá chyba při zpracování argumentů"

#: src/mount_davfs.c:954 src/umount_davfs.c:119
msgid "missing argument"
msgstr "chybějící argument"

#: src/mount_davfs.c:967 src/umount_davfs.c:121
msgid "too many arguments"
msgstr "příliš mnoho argumentů"

#: src/mount_davfs.c:973
msgid "no mountpoint specified"
msgstr "nebyl zadán žádný přípojný bod"

#: src/mount_davfs.c:978
msgid "no WebDAV-server specified"
msgstr "nebyl zadán žádný WebDAV server"

#: src/mount_davfs.c:981
msgid "invalid URL"
msgstr "neplatné URL"

#: src/mount_davfs.c:1024
msgid "can't determine home directory"
msgstr "nelze určit domovský adresář"

#: src/mount_davfs.c:1102 src/webdav.c:387
#, c-format
msgid "can't read client certificate %s"
msgstr "nelze přečíst klientský certifikát %s"

#: src/mount_davfs.c:1107
#, c-format
msgid "client certificate file %s has wrong owner"
msgstr "klientský certifikát %s má chybného vlastníka"

#: src/mount_davfs.c:1113
#, c-format
msgid "client certificate file %s has wrong permissions"
msgstr "soubor s klientským certifikátem %s má chybná oprávnění"

#: src/mount_davfs.c:1156
#, fuzzy, c-format
msgid ""
"Please enter the username to authenticate with proxy\n"
"%s or hit enter for none.\n"
msgstr ""
"Zadejte prosím uživatelské jméno pro autentizaci s proxy\n"
"%s (pokud žádné zadat nechcete, pouze stiskněte enter).\n"
"Uživatelské jméno: "

#: src/mount_davfs.c:1158 src/mount_davfs.c:1174
msgid "Username:"
msgstr ""

#: src/mount_davfs.c:1162
#, c-format
msgid ""
"Please enter the password to authenticate user %s with proxy\n"
"%s or hit enter for none.\n"
msgstr ""
"Zadejte prosím heslo pro autentizaci uživatele %s na proxy\n"
"%s (pokud žádné zadat nechcete, pouze stiskněte enter).\n"

#: src/mount_davfs.c:1164 src/mount_davfs.c:1180 src/webdav.c:394
msgid "Password: "
msgstr "Heslo: "

#: src/mount_davfs.c:1172
#, fuzzy, c-format
msgid ""
"Please enter the username to authenticate with server\n"
"%s or hit enter for none.\n"
msgstr ""
"Zadejte prosím uživatelské jméno pro autentizaci na serveru\n"
"%s (nebo pouze stiskně enter, pokud nic zadat nechcete).\n"
"Uživatelské jméno: "

#: src/mount_davfs.c:1178
#, c-format
msgid ""
"Please enter the password to authenticate user %s with server\n"
"%s or hit enter for none.\n"
msgstr ""
"Zadejte prosím heslo uživatele %s pro autentizaci na serveru\n"
"%s (nebo pouze stiskně enter, pokud nic zadat nechcete).\n"

#: src/mount_davfs.c:1227
#, c-format
msgid "pid %i, got signal %i"
msgstr "pid %i dostal signál %i"

#: src/mount_davfs.c:1259
msgid ""
"Warning: can't read user data base. Mounting anyway, but there is no entry "
"in mtab."
msgstr ""
"Varování: nelze přečíst údaje o uživatelích. Přesto připojuji, v mtab ale "
"nebude žádný záznam."

#: src/mount_davfs.c:1276
msgid ""
"Warning: can't write entry into mtab, but will mount the file system anyway"
msgstr ""
"Varování: nelze zapsat položku do mtab, přesto souborový systém připojím"

#: src/mount_davfs.c:1302
#, c-format
msgid "option %s has invalid argument;it must be a decimal number"
msgstr "volba %s má neplatný argument; musí to být číslo v desítkové soustavě"

#: src/mount_davfs.c:1305
#, c-format
msgid "option %s has invalid argument;it must be an octal number"
msgstr "volba %s má neplatný argument; musí to být číslo v osmičkové soustavě"

#: src/mount_davfs.c:1308
#, c-format
msgid "option %s has invalid argument;it must be a number"
msgstr "volba %s má neplatný argument; musí to být číslo"

#: src/mount_davfs.c:1566
#, c-format
msgid "option %s requires argument"
msgstr "volba %s vyžaduje argument"

#: src/mount_davfs.c:1654
#, c-format
msgid "Unknown option %s.\n"
msgstr "Neznámá volba %s.\n"

#: src/mount_davfs.c:2108 src/mount_davfs.c:2328 src/mount_davfs.c:2340
#, fuzzy, c-format
msgid "opening %s failed"
msgstr "odpojení selhalo"

#: src/mount_davfs.c:2129 src/mount_davfs.c:2255 src/mount_davfs.c:2356
#: src/mount_davfs.c:2435
msgid "malformed line"
msgstr "špatně zapsaný řádek"

#: src/mount_davfs.c:2236 src/mount_davfs.c:2249
msgid "unknown option"
msgstr "neznámá volba"

#: src/mount_davfs.c:2332
#, c-format
msgid "file %s has wrong owner"
msgstr "soubor %s má chybného vlastníka"

#: src/mount_davfs.c:2335
#, c-format
msgid "file %s has wrong permissions"
msgstr "soubor %s má chybná oprávnění"

#: src/mount_davfs.c:2493
#, c-format
msgid ""
"Usage:\n"
" %s -V,--version : print version string\n"
" %s -h,--help : print this message\n"
"\n"
msgstr ""
"Použití:\n"
" %s -V,--version : vytiskne informaci o verzi\n"
" %s -h,--help : vytiskne tuto zprávu\n"
"\n"

#: src/mount_davfs.c:2497
#, c-format
msgid ""
"To mount a WebDAV-resource don't call %s directly, but use\n"
"`mount' instead.\n"
msgstr ""
"Pro připojení zdroje WebDAV nevolejte přímo %s, ale\n"
"použijte místo toho `mount'.\n"

#: src/mount_davfs.c:2499
#, c-format
msgid ""
" mount <mountpoint> : or\n"
" mount <server-url> : mount the WebDAV-resource as specified in\n"
" /etc/fstab.\n"
msgstr ""
" mount <přípojný_bod>: nebo\n"
" mount <url_serveru> : připojí zdroj WebDAV tak, jak je zadáno\n"
" v /etc/fstab.\n"

#: src/mount_davfs.c:2502
#, c-format
msgid ""
" mount -t davfs <server-url> <mountpoint> [-o options]\n"
" : mount the WebDAV-resource <server-url>\n"
" on mountpoint <mountpoint>. Only root\n"
" is allowed to do this. options is a\n"
" comma separated list of options.\n"
"\n"
msgstr ""
" mount -t davfs <url_serveru> <přípojný_bod> [-o volby]\n"
" : připojí zdroj WebDAV <url_serveru>\n"
" do přípojného bodu <přípojný_bod>. Pouze root\n"
" může provést tuto operaci. Výraz volby\n"
" označuje seznam voleb oddělených čárkou.\n"
"\n"

#: src/mount_davfs.c:2507
#, c-format
msgid ""
"Recognised options:\n"
" conf= : absolute path of user configuration file\n"
" uid= : owner of the filesystem (username or numeric id)\n"
" gid= : group of the filesystem (group name or numeric id)\n"
" file_mode= : default file mode (octal)\n"
" dir_mode= : default directory mode (octal)\n"
msgstr ""
"Rozpoznané volby:\n"
" conf= : absolutní cesta k uživatelskému konfiguračnímu souboru\n"
" uid= : vlastník souborového systému (jméno nebo číselné "
"označení)\n"
" gid= : skupina souborového systému (jméno skupiny nebo číselné "
"označení)\n"
" file_mode= : výchozí mode souboru (v osmičkové soustavě)\n"
" dir_mode= : výchozí mode adresáře (v osmičkové soustavě)\n"

#: src/mount_davfs.c:2513
#, c-format
msgid ""
" ro : mount read-only\n"
" rw : mount read-write\n"
" [no]exec : (don't) allow execution of binaries\n"
" [no]suid : (don't) allow suid and sgid bits to take effect\n"
" [no]_netdev : (no) network connection needed\n"
msgstr ""
" ro : připojit jen ke čtení\n"
" rw : připojit pro čtení a zápis\n"
" [no]exec : (ne)povolit spuštění souboru jako programu\n"
" [no]suid : (ne)povolit účinnost suid a sgid bitů\n"
" [no]_netdev : (není) třeba síťové spojení\n"

#: src/umount_davfs.c:94
#, c-format
msgid ""
"Usage:\n"
" u%s -V,--version : print version string\n"
" u%s -h,--help : print this message\n"
"\n"
msgstr ""
"Použití:\n"
" u%s -V,--version : vypsat údaj o verzi\n"
" u%s -h,--help : vypsat tuto zprávu\n"
"\n"

#: src/umount_davfs.c:98
#, c-format
msgid ""
"To umount a WebDAV-resource don't call u%s directly, but use\n"
"`umount' instead.\n"
msgstr ""
"Pro odpojení zdroje WebDAV nevolejte přímo u%s, ale použijte\n"
"místo toho `umount'.\n"

#: src/umount_davfs.c:101
#, c-format
msgid ""
" umount <mountpoint> : umount the WebDAV-resource as specified in\n"
" /etc/fstab.\n"
msgstr ""
" umount <mountpoint> : odpojit zdroj WebDAV tak, jak je určeno\n"
" v /etc/fstab.\n"

#: src/umount_davfs.c:127
msgid "can't determine mount point"
msgstr "nemohu určit přípojný bod"

#: src/umount_davfs.c:147
#, c-format
msgid ""
"\n"
" can't read PID from file %s;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"
msgstr ""
"\n"
" nemohu číst PID ze souboru %s;\n"
" přesto se pokouším odpojit;\n"
" čekejte prosím, až %s skončí"

#: src/umount_davfs.c:159
#, c-format
msgid ""
"\n"
" can't read process list;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"
msgstr ""
"\n"
" nemohu číst seznam procesů;\n"
" přesto se pokouším odpojit;\n"
" čekejte prosím, až %s skončí"

#: src/umount_davfs.c:175
#, c-format
msgid ""
"\n"
" can't find %s-process with pid %s;\n"
" trying to unmount anyway.\n"
" you propably have to remove %s manually"
msgstr ""
"\n"
" nemohu najít %s - proces s PID %s;\n"
" přesto se pokouším odpojit.\n"
" pravděpodobně budete muset odstranit %s ručně"

#: src/umount_davfs.c:186
#, c-format
msgid "%s: waiting while %s (pid %s) synchronizes the cache ."
msgstr "%s: čekám, než si %s (pid %s) sesynchronizuje vyrovnávací paměť."

#: src/umount_davfs.c:199
#, c-format
msgid "an error occured while waiting; please wait for %s to terminate"
msgstr "při čekání došlo k chybě; čekejte prosím až %s skončí"

#: src/webdav.c:320
#, fuzzy
msgid "socket library initialization failed"
msgstr "selhala inicializace knihovny socketů"

#: src/webdav.c:333
msgid "can't open stream to log neon-messages"
msgstr ""

#: src/webdav.c:366
msgid "neon library does not support TLS/SSL"
msgstr "knihovna neon nepodporuje TLS/SSL"

#: src/webdav.c:374
#, c-format
msgid "can't read server certificate %s"
msgstr "nemohu přečíst serverový cerifikát %s"

#: src/webdav.c:392
#, c-format
msgid ""
"Please enter the password to decrypt client\n"
"certificate %s.\n"
msgstr ""
"Zadejte prosím heslo pro dešifrování klientského\n"
"certifikátu %s.\n"

#: src/webdav.c:406
#, c-format
msgid "can't decrypt client certificate %s"
msgstr "nemohu dešifrovat klientský certifikát %s"

#: src/webdav.c:458 src/webdav.c:461
msgid "mounting failed; the server does not support WebDAV"
msgstr "připojení selhalo; server nepodporuje WebDAV"

#: src/webdav.c:469
msgid "warning: the server does not support locks"
msgstr "varování: server nepodporuje zámky"

#: src/webdav.c:1502
msgid "authentication failure:"
msgstr "selhání autentizace:"

#: src/webdav.c:1540
#, c-format
msgid "%i can't open cache file"
msgstr "%i nemůže otevřít soubor vyrovnávací paměti"

#: src/webdav.c:1548
#, c-format
msgid "%i error writing to cache file"
msgstr "%i chyba při zápisu do souboru vyrovnávací paměti"

#: src/webdav.c:1803 src/webdav.c:1806
msgid "error processing server certificate"
msgstr "chyba při zpracování certifikátu serveru"

#: src/webdav.c:1813 src/webdav.c:1849
msgid "the server certificate is not yet valid"
msgstr "certifikát serveru zatím není platný"

#: src/webdav.c:1815 src/webdav.c:1852
msgid "the server certificate has expired"
msgstr "platnost certifikátu serveru vypršela"

#: src/webdav.c:1817 src/webdav.c:1855
msgid "the server certificate does not match the server name"
msgstr "certifikát serveru nedopovídá jménu serveru"

#: src/webdav.c:1819 src/webdav.c:1858
msgid "the server certificate is not trusted"
msgstr "certifikát serveru je nedůvěryhodný"

#: src/webdav.c:1821 src/webdav.c:1861
msgid "unknown certificate error"
msgstr "neznámá chyba certifikátu"

#: src/webdav.c:1822
#, c-format
msgid " issuer: %s"
msgstr " vydavatel: %s"

#: src/webdav.c:1824
#, c-format
msgid " subject: %s"
msgstr " subjekt: %s"

#: src/webdav.c:1826
#, c-format
msgid " identity: %s"
msgstr " identita: %s"

#: src/webdav.c:1828
#, c-format
msgid " fingerprint: %s"
msgstr " otisk: %s"

#: src/webdav.c:1831
#, c-format
msgid ""
"You only should accept this certificate, if you can\n"
"verify the fingerprint! The server might be faked\n"
"or there might be a man-in-the-middle-attack.\n"
msgstr ""
"Tento certifikát by měl být přijat pouze pokud můžete\n"
"ověřit jeho otisk! Server může být podvržen nebo může\n"
"dojít k útoku s prostředníkem (man-in-the-middle attack).\n"

#: src/webdav.c:1834
#, c-format
msgid "Accept certificate for this session? [y,N] "
msgstr "Přijmout certifikát pro toto sezení? [y,N] "

#: src/webdav.c:1862
#, c-format
msgid " issuer: %s"
msgstr " vydavatel: %s"

#: src/webdav.c:1863
#, c-format
msgid " subject: %s"
msgstr " subjekt: %s"

#: src/webdav.c:1864
#, c-format
msgid " identity: %s"
msgstr " identita: %s"

#: src/webdav.c:1867
msgid " accepted by user"
msgstr " přijat uživatelem"

#~ msgid "CODA_KERNEL_VERSION %u can not be used on 64 bit systems"
#~ msgstr "CODA_KERNEL_VERSION %u není možno použít na 64bitových systémech"

758
po/davfs2.pot Normal file
View File

@ -0,0 +1,758 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Werner Baumann <werner.baumann@onlinehome.de>
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://savannah.nongnu.org/support/?"
"func=additem&group=davfs2\n"
"POT-Creation-Date: 2009-04-13 21:33+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: src/cache.c:608
msgid ""
"connection timed out two times;\n"
"trying one last time"
msgstr ""

#: src/cache.c:613
#, c-format
msgid "Last try succeeded.\n"
msgstr ""

#: src/cache.c:616
msgid ""
"server temporarily unreachable;\n"
"mounting anyway"
msgstr ""

#: src/cache.c:619
#, c-format
msgid ""
"Mounting failed.\n"
"%s"
msgstr ""

#: src/cache.c:657
#, c-format
msgid "can't replace %s with %s"
msgstr ""

#: src/cache.c:661
#, c-format
msgid "error writing new index file %s"
msgstr ""

#: src/cache.c:665
#, c-format
msgid "can't create new index file for %s"
msgstr ""

#: src/cache.c:2473 src/cache.c:2507
#, c-format
msgid "can't create cache file %s"
msgstr ""

#: src/cache.c:2522
#, c-format
msgid "error writing directory %s"
msgstr ""

#: src/cache.c:2688 src/mount_davfs.c:588 src/mount_davfs.c:590
#: src/mount_davfs.c:762 src/mount_davfs.c:764 src/mount_davfs.c:770
#: src/mount_davfs.c:810 src/mount_davfs.c:812 src/mount_davfs.c:829
#: src/mount_davfs.c:831 src/mount_davfs.c:1692 src/mount_davfs.c:1694
msgid "can't read user data base"
msgstr ""

#: src/cache.c:2699
#, c-format
msgid "can't open cache directory %s"
msgstr ""

#: src/cache.c:2714
#, c-format
msgid "can't create cache directory %s"
msgstr ""

#: src/cache.c:2721
#, c-format
msgid "can't access cache directory %s"
msgstr ""

#: src/cache.c:2724
#, c-format
msgid "wrong owner of cache directory %s"
msgstr ""

#: src/cache.c:2728
#, c-format
msgid "wrong permissions set for cache directory %s"
msgstr ""

#: src/cache.c:2758
msgid "found orphaned file in cache:"
msgstr ""

#: src/cache.c:2829
#, c-format
msgid "error parsing %s"
msgstr ""

#: src/cache.c:2830
#, c-format
msgid " at line %i"
msgstr ""

#: src/cache.c:2875
#, c-format
msgid "open files exceed max cache size by %llu MiBytes"
msgstr ""

#: src/dav_coda.c:163 src/dav_fuse.c:162
msgid "can't allocate message buffer"
msgstr ""

#: src/kernel_interface.c:106
msgid "trying fuse kernel file system"
msgstr ""

#: src/kernel_interface.c:114
msgid "fuse device opened successfully"
msgstr ""

#: src/kernel_interface.c:126
msgid "trying coda kernel file system"
msgstr ""

#: src/kernel_interface.c:132
msgid "coda device opened successfully"
msgstr ""

#: src/kernel_interface.c:140
#, c-format
msgid "unknown kernel file system %s"
msgstr ""

#: src/kernel_interface.c:187
msgid "no free coda device to mount"
msgstr ""

#: src/kernel_interface.c:196
#, c-format
msgid "CODA_KERNEL_VERSION %u not supported"
msgstr ""

#: src/kernel_interface.c:235
msgid "can't open fuse device"
msgstr ""

#: src/kernel_interface.c:261
msgid "can't mount using fuse kernel file system"
msgstr ""

#: src/mount_davfs.c:237
msgid "program is not setuid root"
msgstr ""

#: src/mount_davfs.c:239 src/mount_davfs.c:440 src/mount_davfs.c:444
msgid "can't change effective user id"
msgstr ""

#: src/mount_davfs.c:305
msgid "can't start daemon process"
msgstr ""

#: src/mount_davfs.c:328
msgid "can't release root privileges"
msgstr ""

#: src/mount_davfs.c:348
msgid "failed to release tty properly"
msgstr ""

#: src/mount_davfs.c:359
#, c-format
msgid "can't write pid file %s"
msgstr ""

#: src/mount_davfs.c:377
#, c-format
msgid "unmounting %s"
msgstr ""

#: src/mount_davfs.c:379
msgid "unmounting failed"
msgstr ""

#: src/mount_davfs.c:428 src/mount_davfs.c:491 src/mount_davfs.c:574
#: src/mount_davfs.c:834
#, c-format
msgid "group %s does not exist"
msgstr ""

#: src/mount_davfs.c:432
msgid "can't change group id"
msgstr ""

#: src/mount_davfs.c:437
#, c-format
msgid "user %s does not exist"
msgstr ""

#: src/mount_davfs.c:477 src/mount_davfs.c:559 src/mount_davfs.c:594
#, c-format
msgid "can't create directory %s"
msgstr ""

#: src/mount_davfs.c:481 src/mount_davfs.c:563 src/mount_davfs.c:598
#: src/mount_davfs.c:603 src/mount_davfs.c:612
#, c-format
msgid "can't access directory %s"
msgstr ""

#: src/mount_davfs.c:487 src/mount_davfs.c:569
#, c-format
msgid "can't change mode of directory %s"
msgstr ""

#: src/mount_davfs.c:496 src/mount_davfs.c:579
#, c-format
msgid "can't change group of directory %s"
msgstr ""

#: src/mount_davfs.c:607 src/mount_davfs.c:815
msgid "can't read group data base"
msgstr ""

#: src/mount_davfs.c:630
#, c-format
msgid "can't open file %s"
msgstr ""

#: src/mount_davfs.c:635
#, c-format
msgid "%s is already mounted on %s"
msgstr ""

#: src/mount_davfs.c:658
#, c-format
msgid ""
"found PID file %s.\n"
"Either %s is used by another process,\n"
"or another mount process ended irregular"
msgstr ""

#: src/mount_davfs.c:681
#, c-format
msgid "no entry for %s found in %s"
msgstr ""

#: src/mount_davfs.c:687
#, c-format
msgid "different URL in %s"
msgstr ""

#: src/mount_davfs.c:695
#, c-format
msgid "different file system type in %s"
msgstr ""

#: src/mount_davfs.c:698
#, c-format
msgid "different config file in %s"
msgstr ""

#: src/mount_davfs.c:700
#, c-format
msgid "option `user' not set in %s"
msgstr ""

#: src/mount_davfs.c:702
#, c-format
msgid "different mount options in %s"
msgstr ""

#: src/mount_davfs.c:705
#, c-format
msgid "different uid in %s"
msgstr ""

#: src/mount_davfs.c:707
#, c-format
msgid "different gid in %s"
msgstr ""

#: src/mount_davfs.c:709
#, c-format
msgid "different dir_mode in %s"
msgstr ""

#: src/mount_davfs.c:711
#, c-format
msgid "different file_mode in %s"
msgstr ""

#: src/mount_davfs.c:739
#, c-format
msgid "can't evaluate path of mount point %s"
msgstr ""

#: src/mount_davfs.c:744
#, c-format
msgid "can't get home directory for uid %i"
msgstr ""

#: src/mount_davfs.c:746
msgid "A relative mount point must lie within your home directory"
msgstr ""

#: src/mount_davfs.c:754
#, c-format
msgid "invalid mount point %s"
msgstr ""

#: src/mount_davfs.c:757
#, c-format
msgid "mount point %s does not exist"
msgstr ""

#: src/mount_davfs.c:775
#, c-format
msgid ""
"%s is the home directory of user %s.\n"
"You can't mount into another users home directory"
msgstr ""

#: src/mount_davfs.c:803
msgid "you can't set file owner different from your uid"
msgstr ""

#: src/mount_davfs.c:821
msgid "you must be member of the group of the file system"
msgstr ""

#: src/mount_davfs.c:841
#, c-format
msgid "user %s must be member of group %s"
msgstr ""

#: src/mount_davfs.c:864
#, c-format
msgid "can't mount %s on %s"
msgstr ""

#: src/mount_davfs.c:866
#, c-format
msgid "kernel does not know file system %s"
msgstr ""

#: src/mount_davfs.c:868
msgid "mount point is busy"
msgstr ""

#: src/mount_davfs.c:929 src/umount_davfs.c:88
#, c-format
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
msgstr ""

#: src/mount_davfs.c:945 src/umount_davfs.c:113
msgid "unknown error parsing arguments"
msgstr ""

#: src/mount_davfs.c:954 src/umount_davfs.c:119
msgid "missing argument"
msgstr ""

#: src/mount_davfs.c:967 src/umount_davfs.c:121
msgid "too many arguments"
msgstr ""

#: src/mount_davfs.c:973
msgid "no mountpoint specified"
msgstr ""

#: src/mount_davfs.c:978
msgid "no WebDAV-server specified"
msgstr ""

#: src/mount_davfs.c:981
msgid "invalid URL"
msgstr ""

#: src/mount_davfs.c:1024
msgid "can't determine home directory"
msgstr ""

#: src/mount_davfs.c:1102 src/webdav.c:387
#, c-format
msgid "can't read client certificate %s"
msgstr ""

#: src/mount_davfs.c:1107
#, c-format
msgid "client certificate file %s has wrong owner"
msgstr ""

#: src/mount_davfs.c:1113
#, c-format
msgid "client certificate file %s has wrong permissions"
msgstr ""

#: src/mount_davfs.c:1156
#, c-format
msgid ""
"Please enter the username to authenticate with proxy\n"
"%s or hit enter for none.\n"
msgstr ""

#: src/mount_davfs.c:1158 src/mount_davfs.c:1174
msgid "Username:"
msgstr ""

#: src/mount_davfs.c:1162
#, c-format
msgid ""
"Please enter the password to authenticate user %s with proxy\n"
"%s or hit enter for none.\n"
msgstr ""

#: src/mount_davfs.c:1164 src/mount_davfs.c:1180 src/webdav.c:394
msgid "Password: "
msgstr ""

#: src/mount_davfs.c:1172
#, c-format
msgid ""
"Please enter the username to authenticate with server\n"
"%s or hit enter for none.\n"
msgstr ""

#: src/mount_davfs.c:1178
#, c-format
msgid ""
"Please enter the password to authenticate user %s with server\n"
"%s or hit enter for none.\n"
msgstr ""

#: src/mount_davfs.c:1227
#, c-format
msgid "pid %i, got signal %i"
msgstr ""

#: src/mount_davfs.c:1259
msgid ""
"Warning: can't read user data base. Mounting anyway, but there is no entry "
"in mtab."
msgstr ""

#: src/mount_davfs.c:1276
msgid ""
"Warning: can't write entry into mtab, but will mount the file system anyway"
msgstr ""

#: src/mount_davfs.c:1302
#, c-format
msgid "option %s has invalid argument;it must be a decimal number"
msgstr ""

#: src/mount_davfs.c:1305
#, c-format
msgid "option %s has invalid argument;it must be an octal number"
msgstr ""

#: src/mount_davfs.c:1308
#, c-format
msgid "option %s has invalid argument;it must be a number"
msgstr ""

#: src/mount_davfs.c:1566
#, c-format
msgid "option %s requires argument"
msgstr ""

#: src/mount_davfs.c:1654
#, c-format
msgid "Unknown option %s.\n"
msgstr ""

#: src/mount_davfs.c:2108 src/mount_davfs.c:2328 src/mount_davfs.c:2340
#, c-format
msgid "opening %s failed"
msgstr ""

#: src/mount_davfs.c:2129 src/mount_davfs.c:2255 src/mount_davfs.c:2356
#: src/mount_davfs.c:2435
msgid "malformed line"
msgstr ""

#: src/mount_davfs.c:2236 src/mount_davfs.c:2249
msgid "unknown option"
msgstr ""

#: src/mount_davfs.c:2332
#, c-format
msgid "file %s has wrong owner"
msgstr ""

#: src/mount_davfs.c:2335
#, c-format
msgid "file %s has wrong permissions"
msgstr ""

#: src/mount_davfs.c:2493
#, c-format
msgid ""
"Usage:\n"
" %s -V,--version : print version string\n"
" %s -h,--help : print this message\n"
"\n"
msgstr ""

#: src/mount_davfs.c:2497
#, c-format
msgid ""
"To mount a WebDAV-resource don't call %s directly, but use\n"
"`mount' instead.\n"
msgstr ""

#: src/mount_davfs.c:2499
#, c-format
msgid ""
" mount <mountpoint> : or\n"
" mount <server-url> : mount the WebDAV-resource as specified in\n"
" /etc/fstab.\n"
msgstr ""

#: src/mount_davfs.c:2502
#, c-format
msgid ""
" mount -t davfs <server-url> <mountpoint> [-o options]\n"
" : mount the WebDAV-resource <server-url>\n"
" on mountpoint <mountpoint>. Only root\n"
" is allowed to do this. options is a\n"
" comma separated list of options.\n"
"\n"
msgstr ""

#: src/mount_davfs.c:2507
#, c-format
msgid ""
"Recognised options:\n"
" conf= : absolute path of user configuration file\n"
" uid= : owner of the filesystem (username or numeric id)\n"
" gid= : group of the filesystem (group name or numeric id)\n"
" file_mode= : default file mode (octal)\n"
" dir_mode= : default directory mode (octal)\n"
msgstr ""

#: src/mount_davfs.c:2513
#, c-format
msgid ""
" ro : mount read-only\n"
" rw : mount read-write\n"
" [no]exec : (don't) allow execution of binaries\n"
" [no]suid : (don't) allow suid and sgid bits to take effect\n"
" [no]_netdev : (no) network connection needed\n"
msgstr ""

#: src/umount_davfs.c:94
#, c-format
msgid ""
"Usage:\n"
" u%s -V,--version : print version string\n"
" u%s -h,--help : print this message\n"
"\n"
msgstr ""

#: src/umount_davfs.c:98
#, c-format
msgid ""
"To umount a WebDAV-resource don't call u%s directly, but use\n"
"`umount' instead.\n"
msgstr ""

#: src/umount_davfs.c:101
#, c-format
msgid ""
" umount <mountpoint> : umount the WebDAV-resource as specified in\n"
" /etc/fstab.\n"
msgstr ""

#: src/umount_davfs.c:127
msgid "can't determine mount point"
msgstr ""

#: src/umount_davfs.c:147
#, c-format
msgid ""
"\n"
" can't read PID from file %s;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"
msgstr ""

#: src/umount_davfs.c:159
#, c-format
msgid ""
"\n"
" can't read process list;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"
msgstr ""

#: src/umount_davfs.c:175
#, c-format
msgid ""
"\n"
" can't find %s-process with pid %s;\n"
" trying to unmount anyway.\n"
" you propably have to remove %s manually"
msgstr ""

#: src/umount_davfs.c:186
#, c-format
msgid "%s: waiting while %s (pid %s) synchronizes the cache ."
msgstr ""

#: src/umount_davfs.c:199
#, c-format
msgid "an error occured while waiting; please wait for %s to terminate"
msgstr ""

#: src/webdav.c:320
msgid "socket library initialization failed"
msgstr ""

#: src/webdav.c:333
msgid "can't open stream to log neon-messages"
msgstr ""

#: src/webdav.c:366
msgid "neon library does not support TLS/SSL"
msgstr ""

#: src/webdav.c:374
#, c-format
msgid "can't read server certificate %s"
msgstr ""

#: src/webdav.c:392
#, c-format
msgid ""
"Please enter the password to decrypt client\n"
"certificate %s.\n"
msgstr ""

#: src/webdav.c:406
#, c-format
msgid "can't decrypt client certificate %s"
msgstr ""

#: src/webdav.c:458 src/webdav.c:461
msgid "mounting failed; the server does not support WebDAV"
msgstr ""

#: src/webdav.c:469
msgid "warning: the server does not support locks"
msgstr ""

#: src/webdav.c:1502
msgid "authentication failure:"
msgstr ""

#: src/webdav.c:1540
#, c-format
msgid "%i can't open cache file"
msgstr ""

#: src/webdav.c:1548
#, c-format
msgid "%i error writing to cache file"
msgstr ""

#: src/webdav.c:1803 src/webdav.c:1806
msgid "error processing server certificate"
msgstr ""

#: src/webdav.c:1813 src/webdav.c:1849
msgid "the server certificate is not yet valid"
msgstr ""

#: src/webdav.c:1815 src/webdav.c:1852
msgid "the server certificate has expired"
msgstr ""

#: src/webdav.c:1817 src/webdav.c:1855
msgid "the server certificate does not match the server name"
msgstr ""

#: src/webdav.c:1819 src/webdav.c:1858
msgid "the server certificate is not trusted"
msgstr ""

#: src/webdav.c:1821 src/webdav.c:1861
msgid "unknown certificate error"
msgstr ""

#: src/webdav.c:1822
#, c-format
msgid " issuer: %s"
msgstr ""

#: src/webdav.c:1824
#, c-format
msgid " subject: %s"
msgstr ""

#: src/webdav.c:1826
#, c-format
msgid " identity: %s"
msgstr ""

#: src/webdav.c:1828
#, c-format
msgid " fingerprint: %s"
msgstr ""

#: src/webdav.c:1831
#, c-format
msgid ""
"You only should accept this certificate, if you can\n"
"verify the fingerprint! The server might be faked\n"
"or there might be a man-in-the-middle-attack.\n"
msgstr ""

#: src/webdav.c:1834
#, c-format
msgid "Accept certificate for this session? [y,N] "
msgstr ""

#: src/webdav.c:1862
#, c-format
msgid " issuer: %s"
msgstr ""

#: src/webdav.c:1863
#, c-format
msgid " subject: %s"
msgstr ""

#: src/webdav.c:1864
#, c-format
msgid " identity: %s"
msgstr ""

#: src/webdav.c:1867
msgid " accepted by user"
msgstr ""

847
po/de.po Normal file
View File

@ -0,0 +1,847 @@
# davfs2 messages de.
# Copyright (C) 2008, 2009 Werner Baumann <werner.baumann@onlinehome.de>
# This file is distributed under the same license as the PACKAGE package.
# Werner Baumann <werner.baumann@onlinehome.de>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: davfs2 1.3.3\n"
"Report-Msgid-Bugs-To: http://savannah.nongnu.org/support/?"
"func=additem&group=davfs2\n"
"POT-Creation-Date: 2009-04-13 21:33+0200\n"
"PO-Revision-Date: 2009-01-02 12:26+0100\n"
"Last-Translator: Werner Baumann <werner.baumann@onlinehome.de>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: src/cache.c:608
msgid ""
"connection timed out two times;\n"
"trying one last time"
msgstr ""
"die Verbindung wurde zweimal wegen Zeitüberschreitung abgebrochen;\n"
"ich versuche es zum letzten mal"

#: src/cache.c:613
#, c-format
msgid "Last try succeeded.\n"
msgstr "Der letzte Versuch war erfolgreich.\n"

#: src/cache.c:616
msgid ""
"server temporarily unreachable;\n"
"mounting anyway"
msgstr ""
"der Server ist zur Zeit nicht erreichbar;\n"
"das Dateisystem wird trotzdem eingehängt"

#: src/cache.c:619
#, c-format
msgid ""
"Mounting failed.\n"
"%s"
msgstr ""
"das Einhängen schlug fehl;\n"
"%s"

#: src/cache.c:657
#, c-format
msgid "can't replace %s with %s"
msgstr "kann %s nicht durch %s ersetzen"

#: src/cache.c:661
#, c-format
msgid "error writing new index file %s"
msgstr "Fehler beim Schreiben der neuen Indexdatei %s"

#: src/cache.c:665
#, c-format
msgid "can't create new index file for %s"
msgstr "kann keine neue Indexdatei für %s erzeugen"

#: src/cache.c:2473 src/cache.c:2507
#, c-format
msgid "can't create cache file %s"
msgstr "kann die Cachedatei %s nicht erzeugen"

#: src/cache.c:2522
#, c-format
msgid "error writing directory %s"
msgstr "Fehler beim Schreiben des Verzeichnisses %s"

#: src/cache.c:2688 src/mount_davfs.c:588 src/mount_davfs.c:590
#: src/mount_davfs.c:762 src/mount_davfs.c:764 src/mount_davfs.c:770
#: src/mount_davfs.c:810 src/mount_davfs.c:812 src/mount_davfs.c:829
#: src/mount_davfs.c:831 src/mount_davfs.c:1692 src/mount_davfs.c:1694
msgid "can't read user data base"
msgstr "kann die Benutzerdatenbank nicht lesen"

#: src/cache.c:2699
#, c-format
msgid "can't open cache directory %s"
msgstr "kann das Cacheverzeichnis %s nicht öffnen"

#: src/cache.c:2714
#, c-format
msgid "can't create cache directory %s"
msgstr "kann das Cacheverzeichnis %s nicht erzeugen"

#: src/cache.c:2721
#, c-format
msgid "can't access cache directory %s"
msgstr "Zugriff auf das Cachverzeichnis %s verweigert"

#: src/cache.c:2724
#, c-format
msgid "wrong owner of cache directory %s"
msgstr "das Cacheverzeichnis %s hat den falschen Besitzer"

#: src/cache.c:2728
#, c-format
msgid "wrong permissions set for cache directory %s"
msgstr "das Cachverzeichnis %s hat die falschen Dateirechte"

#: src/cache.c:2758
msgid "found orphaned file in cache:"
msgstr "fand verwaiste Datei im Cache:"

#: src/cache.c:2829
#, c-format
msgid "error parsing %s"
msgstr "Syntaxfehler in %s"

#: src/cache.c:2830
#, c-format
msgid " at line %i"
msgstr " in Zeile %i"

#: src/cache.c:2875
#, c-format
msgid "open files exceed max cache size by %llu MiBytes"
msgstr ""
"Die Größe der offenen Dateien überschreitet die maximale Größe des Cache um %"
"llu MiBytes"

#: src/dav_coda.c:163 src/dav_fuse.c:162
msgid "can't allocate message buffer"
msgstr "kein Speicher für den Nachrichtenpuffer verfügbar"

#: src/kernel_interface.c:106
msgid "trying fuse kernel file system"
msgstr "ich versuche es mit dem Kernel-Dateisystem fuse"

#: src/kernel_interface.c:114
msgid "fuse device opened successfully"
msgstr "fuse-Gerätedatei erfolgreich geöffnet"

#: src/kernel_interface.c:126
msgid "trying coda kernel file system"
msgstr "ich versuche es mit dem Kernel-Dateisystem coda"

#: src/kernel_interface.c:132
msgid "coda device opened successfully"
msgstr "coda-Gerätedatei erfolgreich geöffnet"

#: src/kernel_interface.c:140
#, c-format
msgid "unknown kernel file system %s"
msgstr "das Kernel-Dateisystem %s ist unbekannt"

#: src/kernel_interface.c:187
msgid "no free coda device to mount"
msgstr "keine freie coda-Gerätedatei gefunden"

#: src/kernel_interface.c:196
#, c-format
msgid "CODA_KERNEL_VERSION %u not supported"
msgstr "CODA_KERNEL_VERSION %u wird nicht unterstützt"

#: src/kernel_interface.c:235
msgid "can't open fuse device"
msgstr "kann die fuse-Gerätedatei nicht öffnen"

#: src/kernel_interface.c:261
msgid "can't mount using fuse kernel file system"
msgstr ""
"mit Kernel-Dateisystem fuse kann das Dateisystem nicht eingehängt werden"

#: src/mount_davfs.c:237
msgid "program is not setuid root"
msgstr "die Programmdatei hat das setuid-Bit nicht gesetzt"

#: src/mount_davfs.c:239 src/mount_davfs.c:440 src/mount_davfs.c:444
msgid "can't change effective user id"
msgstr "kann die effektive Benutzer-ID nicht ändern"

#: src/mount_davfs.c:305
msgid "can't start daemon process"
msgstr "kann den Hintergrundprozess nicht starten"

#: src/mount_davfs.c:328
msgid "can't release root privileges"
msgstr "ich werde die root-Rechte nicht los"

#: src/mount_davfs.c:348
msgid "failed to release tty properly"
msgstr "kann das Terminal nicht freigeben"

#: src/mount_davfs.c:359
#, c-format
msgid "can't write pid file %s"
msgstr "kann die PID-Datei %s nicht schreiben"

#: src/mount_davfs.c:377
#, c-format
msgid "unmounting %s"
msgstr "hänge %s aus"

#: src/mount_davfs.c:379
msgid "unmounting failed"
msgstr "das Aushängen schlug fehl"

#: src/mount_davfs.c:428 src/mount_davfs.c:491 src/mount_davfs.c:574
#: src/mount_davfs.c:834
#, c-format
msgid "group %s does not exist"
msgstr "die Gruppe %s existiert nicht"

#: src/mount_davfs.c:432
msgid "can't change group id"
msgstr "kann die Gruppenkennung nicht ändern"

#: src/mount_davfs.c:437
#, c-format
msgid "user %s does not exist"
msgstr "der Benutzer %s existiert nicht"

#: src/mount_davfs.c:477 src/mount_davfs.c:559 src/mount_davfs.c:594
#, c-format
msgid "can't create directory %s"
msgstr "kann das Verzeichnis %s nicht erzeugen"

#: src/mount_davfs.c:481 src/mount_davfs.c:563 src/mount_davfs.c:598
#: src/mount_davfs.c:603 src/mount_davfs.c:612
#, c-format
msgid "can't access directory %s"
msgstr "Zugriff auf das Verzeichnis %s verweigert"

#: src/mount_davfs.c:487 src/mount_davfs.c:569
#, c-format
msgid "can't change mode of directory %s"
msgstr "kann die Rechte des Verzeichnisses %s nicht ändern"

#: src/mount_davfs.c:496 src/mount_davfs.c:579
#, c-format
msgid "can't change group of directory %s"
msgstr "kann die Gruppenkennung des Verneichnisses %s nicht ändern"

#: src/mount_davfs.c:607 src/mount_davfs.c:815
msgid "can't read group data base"
msgstr "kann die Gruppendatenbank nicht lesen"

#: src/mount_davfs.c:630
#, c-format
msgid "can't open file %s"
msgstr "kann die Datei %s nicht öffnen"

#: src/mount_davfs.c:635
#, c-format
msgid "%s is already mounted on %s"
msgstr "%s ist bereits auf %s eingehängt"

#: src/mount_davfs.c:658
#, c-format
msgid ""
"found PID file %s.\n"
"Either %s is used by another process,\n"
"or another mount process ended irregular"
msgstr ""
"die PID-Datei %s existiert bereits.\n"
"Möglicherweise wird %s von einem anderen Prozess benutzt,\n"
"oder ein anderer Mount-Prozess endete irregulär"

#: src/mount_davfs.c:681
#, c-format
msgid "no entry for %s found in %s"
msgstr "für %s ist kein Eintrag in %s"

#: src/mount_davfs.c:687
#, c-format
msgid "different URL in %s"
msgstr "in %s ist eine andere URL angegeben"

#: src/mount_davfs.c:695
#, c-format
msgid "different file system type in %s"
msgstr "in %s ist ein anderer Dateisystemtyp angegeben"

#: src/mount_davfs.c:698
#, c-format
msgid "different config file in %s"
msgstr "in %s ist eine andere Konfigurationsdatei angegeben"

#: src/mount_davfs.c:700
#, c-format
msgid "option `user' not set in %s"
msgstr "in %s ist die Option „user” nicht angegeben"

#: src/mount_davfs.c:702
#, c-format
msgid "different mount options in %s"
msgstr "in %s sind andere Mount-Optionen angegeben"

#: src/mount_davfs.c:705
#, c-format
msgid "different uid in %s"
msgstr "in %s ist eine andere uid angegeben"

#: src/mount_davfs.c:707
#, c-format
msgid "different gid in %s"
msgstr "in %s ist eine andere gid angegeben"

#: src/mount_davfs.c:709
#, c-format
msgid "different dir_mode in %s"
msgstr "in %s ist ein anderer dir_mode angegeben"

#: src/mount_davfs.c:711
#, c-format
msgid "different file_mode in %s"
msgstr "in %s ist ein anderer file_mode angegeben"

#: src/mount_davfs.c:739
#, c-format
msgid "can't evaluate path of mount point %s"
msgstr "kann den eindeutigen Pfad des Einhängepunktes %s nicht ermitteln"

#: src/mount_davfs.c:744
#, c-format
msgid "can't get home directory for uid %i"
msgstr "kann das Home-Verzeichnis für die Benutzer-ID %i nicht ermitteln"

#: src/mount_davfs.c:746
msgid "A relative mount point must lie within your home directory"
msgstr "Ein relativer Einhängepunkt muss in deinem Home-Verzeichnis liegen"

#: src/mount_davfs.c:754
#, c-format
msgid "invalid mount point %s"
msgstr "der Einhängepunkt %s ist nicht erlaubt"

#: src/mount_davfs.c:757
#, c-format
msgid "mount point %s does not exist"
msgstr "der Einhängepunkt %s existiert nicht"

#: src/mount_davfs.c:775
#, c-format
msgid ""
"%s is the home directory of user %s.\n"
"You can't mount into another users home directory"
msgstr ""
"%s ist das Home-Verzeichnis des Benutzers %s. Du kannst im Home-Verzeichnis "
"eines anderen Benutzers kein Dateisystem einhängen"

#: src/mount_davfs.c:803
msgid "you can't set file owner different from your uid"
msgstr ""
"du kannst als Besitzer des Dateisystems keine fremde Benutzerkennung angeben"

#: src/mount_davfs.c:821
msgid "you must be member of the group of the file system"
msgstr ""
"du musst Mitglied in der Gruppe sein, zu der das Dateisystem gehören soll"

#: src/mount_davfs.c:841
#, c-format
msgid "user %s must be member of group %s"
msgstr "der Benutzer %s muss Mitglied der Gruppe %s sein"

#: src/mount_davfs.c:864
#, c-format
msgid "can't mount %s on %s"
msgstr "kann %s nicht auf %s einhängen"

#: src/mount_davfs.c:866
#, c-format
msgid "kernel does not know file system %s"
msgstr "der Kernel kenn das Dateisystem %s nicht"

#: src/mount_davfs.c:868
msgid "mount point is busy"
msgstr "das Einhängepunkt wird anderweitig benutzt"

#: src/mount_davfs.c:929 src/umount_davfs.c:88
#, c-format
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
msgstr ""
"Dies ist freie Software; die Kopierbedingungen stehen in den Quelltexten. "
"Es \n"
"gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE "
"ZWECKE.\n"

#: src/mount_davfs.c:945 src/umount_davfs.c:113
msgid "unknown error parsing arguments"
msgstr "Fehler beim Analysieren der Befehlsargumente"

#: src/mount_davfs.c:954 src/umount_davfs.c:119
msgid "missing argument"
msgstr "zu wenig Argumente"

#: src/mount_davfs.c:967 src/umount_davfs.c:121
msgid "too many arguments"
msgstr "zu viele Argumente"

#: src/mount_davfs.c:973
msgid "no mountpoint specified"
msgstr "es wurde kein Einhängepunkt angegeben"

#: src/mount_davfs.c:978
msgid "no WebDAV-server specified"
msgstr "es wurde kein WebDAV-Server angegeben"

#: src/mount_davfs.c:981
msgid "invalid URL"
msgstr "die URL ist ungültig"

#: src/mount_davfs.c:1024
msgid "can't determine home directory"
msgstr "kann das Home-Verzeichnis nicht ermitteln"

#: src/mount_davfs.c:1102 src/webdav.c:387
#, c-format
msgid "can't read client certificate %s"
msgstr "kann das Client-Zertifikat %s nicht lesen"

#: src/mount_davfs.c:1107
#, c-format
msgid "client certificate file %s has wrong owner"
msgstr ""
"die Datei %s\n"
"des Client-Zertifikats hat den falschen Besitzer"

#: src/mount_davfs.c:1113
#, c-format
msgid "client certificate file %s has wrong permissions"
msgstr ""
"die Dateirechte für das Cient-Zertifikat\n"
"%s sind falsch"

#: src/mount_davfs.c:1156
#, c-format
msgid ""
"Please enter the username to authenticate with proxy\n"
"%s or hit enter for none.\n"
msgstr ""
"Gib bitte den Benutzernamen für den Proxy %s an; wenn du keinen angeben "
"willst, drücke Return.\n"

#: src/mount_davfs.c:1158 src/mount_davfs.c:1174
msgid "Username:"
msgstr "Benutzername:"

#: src/mount_davfs.c:1162
#, c-format
msgid ""
"Please enter the password to authenticate user %s with proxy\n"
"%s or hit enter for none.\n"
msgstr ""
"Gib bitte das Passwort von %s für den Proxy %s\n"
"an; wenn du keines angeben willst, drücke Return.\n"

#: src/mount_davfs.c:1164 src/mount_davfs.c:1180 src/webdav.c:394
msgid "Password: "
msgstr "Passwort:"

#: src/mount_davfs.c:1172
#, c-format
msgid ""
"Please enter the username to authenticate with server\n"
"%s or hit enter for none.\n"
msgstr ""
"Gib bitte den Benutzernamen für den Server %s an; wenn du keinen angeben "
"willst, drücke Return.\n"

#: src/mount_davfs.c:1178
#, c-format
msgid ""
"Please enter the password to authenticate user %s with server\n"
"%s or hit enter for none.\n"
msgstr ""
"Gib bitte das Passwort von %s für den Server %s\n"
"an; wenn du keines angeben willst, drücke Return.\n"

#: src/mount_davfs.c:1227
#, c-format
msgid "pid %i, got signal %i"
msgstr "PID %i, erhielt Signal %i"

#: src/mount_davfs.c:1259
msgid ""
"Warning: can't read user data base. Mounting anyway, but there is no entry "
"in mtab."
msgstr ""
"Warnung: kann die Benutzerdatenbank nicht lesen. Ich hänge das Dateisystem "
"trotzdem ein, aber der Eintrag in der mtab wird fehlen."

#: src/mount_davfs.c:1276
msgid ""
"Warning: can't write entry into mtab, but will mount the file system anyway"
msgstr ""
"Warnung: kann keinen Eintrag in die mtab schreiben, häne das Dateisystem "
"trotzdem ein."

#: src/mount_davfs.c:1302
#, c-format
msgid "option %s has invalid argument;it must be a decimal number"
msgstr "das Argument der Option %s ist ungültig; es muss eine Dezimalzahl sein"

#: src/mount_davfs.c:1305
#, c-format
msgid "option %s has invalid argument;it must be an octal number"
msgstr "das Argument der Option %s ist ungültig; es muss eine Oktalzahl sein"

#: src/mount_davfs.c:1308
#, c-format
msgid "option %s has invalid argument;it must be a number"
msgstr "das Argument der Option %s ist ungültig; es muss eine Zahl sein"

#: src/mount_davfs.c:1566
#, c-format
msgid "option %s requires argument"
msgstr "die Option %s verlangt ein Argument"

#: src/mount_davfs.c:1654
#, c-format
msgid "Unknown option %s.\n"
msgstr "unbekannte Option %s.\n"

#: src/mount_davfs.c:2108 src/mount_davfs.c:2328 src/mount_davfs.c:2340
#, c-format
msgid "opening %s failed"
msgstr "konnte %s nicht öffnen"

#: src/mount_davfs.c:2129 src/mount_davfs.c:2255 src/mount_davfs.c:2356
#: src/mount_davfs.c:2435
msgid "malformed line"
msgstr "Syntaxfehler in der Zeile"

#: src/mount_davfs.c:2236 src/mount_davfs.c:2249
msgid "unknown option"
msgstr "unbekannte Option"

#: src/mount_davfs.c:2332
#, c-format
msgid "file %s has wrong owner"
msgstr "die Datei %s hat den falschen Besitzer"

#: src/mount_davfs.c:2335
#, c-format
msgid "file %s has wrong permissions"
msgstr "die Dateirechte für %s sind falsch"

#: src/mount_davfs.c:2493
#, c-format
msgid ""
"Usage:\n"
" %s -V,--version : print version string\n"
" %s -h,--help : print this message\n"
"\n"
msgstr ""
"Aufruf:\n"
" %s -V, --version : Versionsinformation anzeigen\n"
" %s -h, --help : diese Hilfe anzeigen\n"
"\n"

#: src/mount_davfs.c:2497
#, c-format
msgid ""
"To mount a WebDAV-resource don't call %s directly, but use\n"
"`mount' instead.\n"
msgstr ""
"Um eine WebDAV-Resource zu einzuhängen, sollte %s nicht direkt\n"
"aufgerufen werden; stattdessen sollte „mount” benutzt werden.\n"

#: src/mount_davfs.c:2499
#, c-format
msgid ""
" mount <mountpoint> : or\n"
" mount <server-url> : mount the WebDAV-resource as specified in\n"
" /etc/fstab.\n"
msgstr ""
" mount <mountpoint> : oder\n"
" mount <server-url> : hänge die WebDAV-Resource entsprechend den\n"
" Angaben in /etc/fstab ein.\n"

#: src/mount_davfs.c:2502
#, c-format
msgid ""
" mount -t davfs <server-url> <mountpoint> [-o options]\n"
" : mount the WebDAV-resource <server-url>\n"
" on mountpoint <mountpoint>. Only root\n"
" is allowed to do this. options is a\n"
" comma separated list of options.\n"
"\n"
msgstr ""
" mount -t davfs <server-url> <mountpoint> [-o Optionen]\n"
" : hänge die WebDAV-Resource <server-url>\n"
" in Verzeichnis <mountpoint> ein. Nur root\n"
" darf dies tun. Optionen ist eine durch\n"
" Kommas unterteilte Liste von Optionen.\n"
"\n"

#: src/mount_davfs.c:2507
#, c-format
msgid ""
"Recognised options:\n"
" conf= : absolute path of user configuration file\n"
" uid= : owner of the filesystem (username or numeric id)\n"
" gid= : group of the filesystem (group name or numeric id)\n"
" file_mode= : default file mode (octal)\n"
" dir_mode= : default directory mode (octal)\n"
msgstr ""
"Mögliche Optionen:\n"
" conf= : absoluter Pfad der Benutzer-Konfigurationsdatei\n"
" uid= : Besitzer des Dateisystems (Name oder numerische ID)\n"
" gid= : Gruppe des Dateisystems (Name oder numerische ID)\n"
" file_mode= : Standard-Rechte für Dateien (oktal)\n"
" dir_mode= : Standard-Rechte für Verzeichnisse (oktal)\n"

#: src/mount_davfs.c:2513
#, c-format
msgid ""
" ro : mount read-only\n"
" rw : mount read-write\n"
" [no]exec : (don't) allow execution of binaries\n"
" [no]suid : (don't) allow suid and sgid bits to take effect\n"
" [no]_netdev : (no) network connection needed\n"
msgstr ""
" ro : nur Lesen\n"
" rw : Lesen und Schreiben\n"
" [no]exec : Ausführen von Programmdateien ist (nicht) erlaubt\n"
" [no]suid : gesetzte suid- und sgid-Bits sind (nicht) wirksam\n"
" [no]_nedev : benötigt (keine) Netzwerkverbindung\n"

#: src/umount_davfs.c:94
#, c-format
msgid ""
"Usage:\n"
" u%s -V,--version : print version string\n"
" u%s -h,--help : print this message\n"
"\n"
msgstr ""
"Aufruf:\n"
" u%s -V, --version : Versionsinformation anzeigen\n"
" u%s -h, --help : diese Hilfe anzeigen\n"
"\n"

#: src/umount_davfs.c:98
#, c-format
msgid ""
"To umount a WebDAV-resource don't call u%s directly, but use\n"
"`umount' instead.\n"
msgstr ""
"Um eine WebDAV-Resource auszuhängen, sollte u%s nicht direkt aufgerufen "
"werden; stattdessen sollte „umount” benutzt werden.\n"

#: src/umount_davfs.c:101
#, c-format
msgid ""
" umount <mountpoint> : umount the WebDAV-resource as specified in\n"
" /etc/fstab.\n"
msgstr ""
" umount <server-url> : hänge die WebDAV-Resource entsprechend den\n"
" Angaben in /etc/fstab aus.\n"

#: src/umount_davfs.c:127
msgid "can't determine mount point"
msgstr "kann den Einhängepunkt nicht ermitteln"

#: src/umount_davfs.c:147
#, c-format
msgid ""
"\n"
" can't read PID from file %s;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"
msgstr ""
"\n"
" kann die PID nicht aus %s auslesen;\n"
" versuche trotzdem das Dateisystem auszuhängen;\n"
" bitte warte bis der %s-Prozess endet"

#: src/umount_davfs.c:159
#, c-format
msgid ""
"\n"
" can't read process list;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"
msgstr ""
"\n"
" kann die Liste der laufenden Prozesse nicht lesen;\n"
" versuche trotzdem das Dateisystem auszuhängen;\n"
" bitte warte bis der %s-Prozess endet"

#: src/umount_davfs.c:175
#, c-format
msgid ""
"\n"
" can't find %s-process with pid %s;\n"
" trying to unmount anyway.\n"
" you propably have to remove %s manually"
msgstr ""
"\n"
" finde keinen %s-Prozess mit PID %s;\n"
" versuche trotzdem das Dateisystem auszuhängen;\n"
" %s muss wahrscheinlich von Hand gelöscht werden"

#: src/umount_davfs.c:186
#, c-format
msgid "%s: waiting while %s (pid %s) synchronizes the cache ."
msgstr ""
"%s: warte bis %s (PID %s) die Dateien im Cache\n"
"gesichert hat ."

#: src/umount_davfs.c:199
#, c-format
msgid "an error occured while waiting; please wait for %s to terminate"
msgstr ""
"während des Wartens trat ein Fehler auf; bitte warte bis der %s-Prozess endet"

#: src/webdav.c:320
msgid "socket library initialization failed"
msgstr "die socket-Bibliothek konnte nicht initialisiert werden"

#: src/webdav.c:333
msgid "can't open stream to log neon-messages"
msgstr "kann die Ausgabe für neon-Log-Meldungen nicht öffnen"

#: src/webdav.c:366
msgid "neon library does not support TLS/SSL"
msgstr "die Neon-Bibliothek uterstützt TLS/SSL nicht"

#: src/webdav.c:374
#, c-format
msgid "can't read server certificate %s"
msgstr "kann das Server-Zertifikat %s nicht lesen"

#: src/webdav.c:392
#, c-format
msgid ""
"Please enter the password to decrypt client\n"
"certificate %s.\n"
msgstr ""
"Gib bitte das Passwort für die Entschlüsselung des\n"
"Client-Zertifikats %s ein.\n"

#: src/webdav.c:406
#, c-format
msgid "can't decrypt client certificate %s"
msgstr "kann das Zertifikat %s nicht entschlüsseln"

#: src/webdav.c:458 src/webdav.c:461
msgid "mounting failed; the server does not support WebDAV"
msgstr "das Einhängen schlug fehl; der Server unterstützt WebDAV nicht"

#: src/webdav.c:469
msgid "warning: the server does not support locks"
msgstr "Warnung: der Server kann Dateien nicht sperren"

#: src/webdav.c:1502
msgid "authentication failure:"
msgstr "Authentifizierungsfehler"

#: src/webdav.c:1540
#, c-format
msgid "%i can't open cache file"
msgstr "%i kann die Cache-Datei nicht öffnen"

#: src/webdav.c:1548
#, c-format
msgid "%i error writing to cache file"
msgstr "%i Fehler beim Schreiben der Cache-Datei"

#: src/webdav.c:1803 src/webdav.c:1806
msgid "error processing server certificate"
msgstr "Fehler beim Analysieren des Server-Zertifikats"

#: src/webdav.c:1813 src/webdav.c:1849
msgid "the server certificate is not yet valid"
msgstr "das Server-Zertifikat ist noch nicht gültig"

#: src/webdav.c:1815 src/webdav.c:1852
msgid "the server certificate has expired"
msgstr "das Server-Zertifikat ist nicht mehr gültig"

#: src/webdav.c:1817 src/webdav.c:1855
msgid "the server certificate does not match the server name"
msgstr "das Server-Zertifikat passt nicht zum Namen des Servers"

#: src/webdav.c:1819 src/webdav.c:1858
msgid "the server certificate is not trusted"
msgstr "wir trauen dem Zertifikat nicht"

#: src/webdav.c:1821 src/webdav.c:1861
msgid "unknown certificate error"
msgstr "Fehler beim Analysieren des Server-Zertifikats"

#: src/webdav.c:1822
#, c-format
msgid " issuer: %s"
msgstr " Aussteller: %s"

#: src/webdav.c:1824
#, c-format
msgid " subject: %s"
msgstr " Inhaber: %s"

#: src/webdav.c:1826
#, c-format
msgid " identity: %s"
msgstr " Name: %s"

#: src/webdav.c:1828
#, c-format
msgid " fingerprint: %s"
msgstr " Fingerabdruck: %s"

#: src/webdav.c:1831
#, c-format
msgid ""
"You only should accept this certificate, if you can\n"
"verify the fingerprint! The server might be faked\n"
"or there might be a man-in-the-middle-attack.\n"
msgstr ""
"Du solltest das Zertifikat nur akzeptieren, wenn du überprüft hast,\n"
"dass der Fingerabdruck stimmt. Der Server könnte gefälscht sein oder\n"
"ein Angreifer könnte sich in die Verbindung zum Server eingeschaltet haben.\n"

#: src/webdav.c:1834
#, c-format
msgid "Accept certificate for this session? [y,N] "
msgstr "Ich akzeptiere das Zertifikat für diese Sitzung [j,N]: "

#: src/webdav.c:1862
#, c-format
msgid " issuer: %s"
msgstr " Aussteller des Zertifikats: %s"

#: src/webdav.c:1863
#, c-format
msgid " subject: %s"
msgstr " Inhaber des Zertifikats: %s"

#: src/webdav.c:1864
#, c-format
msgid " identity: %s"
msgstr " Name: %s"

#: src/webdav.c:1867
msgid " accepted by user"
msgstr " durch den Benutzer akzeptiert"

62
src/Makefile.am Normal file
View File

@ -0,0 +1,62 @@
## Makefile for program src directory in davfs.
## Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann
##
## This file is part of davfs2.
##
## davfs2 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 3 of the License, or
## (at your option) any later version.
##
## davfs2 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 davfs2; if not, write to the Free Software Foundation,
## Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */

## Process this file with automake to produce Makefile.in

localedir = $(datadir)/locale
pkgsysconfdir = $(sysconfdir)/@PACKAGE@
pkglocalstatedir = $(dav_localstatedir)/mount.davfs
pkgsyscachedir = $(dav_syscachedir)/@PACKAGE@
ssbindir = @ssbindir@

sbin_PROGRAMS = mount.davfs umount.davfs
mount_davfs_SOURCES = cache.c dav_coda.c \
dav_fuse.c kernel_interface.c mount_davfs.c webdav.c \
cache.h coda.h defaults.h fuse_kernel.h \
kernel_interface.h mount_davfs.h webdav.h
umount_davfs_SOURCES = umount_davfs.c defaults.h

AM_CFLAGS = -Wall
DEFS = -DPROGRAM_NAME=\"mount.davfs\" \
-DDAV_SYS_CONF_DIR=\"$(pkgsysconfdir)\" \
-DDAV_SYS_RUN=\"$(pkglocalstatedir)\" \
-DDAV_SYS_CACHE=\"$(pkgsyscachedir)\" \
-DDAV_SECRETS=\"secrets\" \
-DDAV_CONFIG=\"$(PACKAGE).conf\" \
-DDAV_CERTS_DIR=\"certs\" \
-DDAV_CLICERTS_DIR=\"private\" \
-DDAV_DATA_DIR=\"$(pkgdatadir)\" \
-DLOCALEDIR=\"$(localedir)\" \
-DDAV_USER=\"$(dav_user)\" \
-DDAV_GROUP=\"$(dav_group)\" @DEFS@
LIBS = $(NEON_LIBS) @LIBS@

install-exec-hook:
chmod u+s $(DESTDIR)$(sbindir)/mount.davfs; \
if test "$(sbindir)" != "$(ssbindir)"; then \
$(mkinstalldirs) $(DESTDIR)$(ssbindir); \
$(LN_S) -f $(DESTDIR)$(sbindir)/mount.davfs $(DESTDIR)$(ssbindir)/mount.davfs; \
$(LN_S) -f $(DESTDIR)$(sbindir)/umount.davfs $(DESTDIR)$(ssbindir)/umount.davfs; \
fi

uninstall-hook:
if test "$(sbindir)" != "$(ssbindir)"; then \
rm -f $(DESTDIR)$(ssbindir)/mount.davfs; \
rm -f $(DESTDIR)$(ssbindir)/umount.davfs; \
fi

3692
src/cache.c Normal file

File diff suppressed because it is too large Load Diff

428
src/cache.h Normal file
View File

@ -0,0 +1,428 @@
/* cache.h: directory and file cache.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#ifndef DAV_CACHE_H
#define DAV_CACHE_H


/* Constants */
/*===========*/

/* A mask to separate access bits from mode. */
#define DAV_A_MASK (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX)


/* Data Types */
/*============*/

/* File descriptors for open files are stored within a dav_node in a linked
list. As coda does not return the file descriptor when closing a file,
this data structure contains additional information to identify the
appropriate file descriptor. */
typedef struct dav_handle dav_handle;
struct dav_handle {
dav_handle *next; /* Next in the list. */
int fd; /* File descriptor of the open file. */
int flags; /* Access mode flags only. */
pid_t pid; /* id of requesting process. */
pid_t pgid; /* Group id of requesting process. */
uid_t uid; /* User id of requesting process. */
};


/* A node in the cache. It represents a directory or a regular file.
Nodes that are direct childs of the same directory-node are linked together
by the next-pointer to a linked list.
The hierarchical directory structure is formed by pointers to the parent
direcotry and to the first member in the linked list of direct childs.
Nodes are also stored in a hash table. The hash is derived from the nodes
address. Nodes with the same hash value are linked together by table_next. */
typedef struct dav_node dav_node;
struct dav_node {
/* The parent directory. */
dav_node *parent;
/* The first node in the linked list of childs. Will be NULL for files.*/
dav_node *childs;
/* The next node in the linked list of childs. */
dav_node *next;
/* The next node in the linked list of nodes with the same hash value. */
dav_node *table_next;
/* The unescaped absolute path of the resource on the server. This must
conform to RFC 2518. For collections it must have a trailing slash, for
non-collections it must not have one. */
char *path;
/* The name of the node (not path) without leading or trailing slash. The
name of the root node is the empty string. Name may be different from
the last component of path if the servers uses display-names. */
char *name;
/* Path of the file where the contents of the node is cached. These files
are only created when needed, and they are deleted when there is
information that the contents is no langer valid.
So cache_path may be NULL.
For directories: A file containing the directory entries.
For regular files: A local copy of the file.
File times are set according the values from the server when the file
is downloaded. As long as the file is cached only dav_set_attr() may
changed file attributes directly, but they may be changed by open,
read, write and close. */
char *cache_path;
/* Etag from the server. Set when the resource is downloaded. Used for
conditional GET requests and to detect whether a resource has been
changed remotely. If present it overrides information from the
Last-Modified time (smtime). */
char *etag;
/* The media-type as in HTTP-header Content-Type. */
char *mime_type;
/* A linked list of handles for open files. */
dav_handle *handles;
/* Size of the contents of the node.
Files: Initially set to the value of the content-lenght header. When
the file is open it is updated to the size of the cached file.
Directories: Size of the file containing the directory entries. */
off_t size;
/* Initially set to the value of mtime. Updated by some upcalls
Files: When a local copy exists its atime is also used for update. */
time_t atime;
/* Initially set to the last-modified time from the server, or the system
time if created locally.
Files: When a local cache file exists updated to mtime of this cache file.
Used to evaluate whether a file is dirty. */
time_t mtime;
/* Initially set to the value of mtime. Updated by dav_setattr(). */
time_t ctime;
/* Files: Last-modified time from the server. Like etag frozen when the
file is opened for writing. Used to check whether the file has
been changed remotely. */
time_t smtime;
/* Time when the node has last been updated from the server. */
time_t utime;
/* Files: Time when the lock expires.
0 if not locked. -1 locked infinitely. */
time_t lock_expire;
/* Directories: Number of subdirectories, including "." and "..".
Files: Allways 1. */
int nref;
/* Files: File exists on the server. For locally created files that have
not been put to the server it will be 0.
Note: Some server create an empty file when locking. Maybe the RFC will
be changed this way. */
int remote_exists;
/* Files: Dirty flag. Must be set, when a file is opened for writing, and
reset, when the file is saved back. */
int dirty;
/* mode, uid and gid are initially set to the default values, but may be
changed by dav_setattr(). */
mode_t mode;
uid_t uid;
gid_t gid;
};


/* An item in a linked list. Each item holds a pointer to a dav_node.*/
typedef struct dav_node_item dav_node_list_item;
struct dav_node_item {
dav_node_list_item *next;
dav_node *node;
time_t save_at;
};


/* Returned by dav_statfs(). */
typedef struct dav_stat dav_stat;
struct dav_stat {
off_t blocks;
off_t bfree;
off_t bavail;
off_t files;
off_t ffree;
off_t bsize;
off_t namelen;
};


/* Call back function that writes a directory entry to file descriptor fd.
fd : An open file descriptor to write to.
off : The current file size.
node : The pointer to node is taken as inode/file number (shrinked to
fit if necessary).
name : File name; if NULL, the last, empty entry is written (if the
kernel file system wants one).
return value : New size of the file. -1 in case of an error. */
typedef off_t (*dav_write_dir_entry_fn)(int fd, off_t off, const dav_node *node,
const char *name);


/* Function prototypes */
/*=====================*/

/* Initializing and closing the cache. */

/* Sets a lot of private global variables that govern the behaviour of the
cache, taking the values from parameters.
It registers dummy functions for the callbacks from kernel interface.
Creates the root node and restores the nodes from the permanent cache.
Finally it retrieves the root directory entries from the server.
If the connection to the server fails because of authentication failure
it prints an error message and terminates the programm. If the connection
fails due to other reasons, it will nevertheless return with success, as the
filesystem can be mounted, but will only get useable when the connection
comes up.
paramters: if not self explaining, please see mount_davfs.c, struct args. */
void
dav_init_cache(const dav_args *args, const char *mpoint);


/* Tries to write back to the server all open files that have been changed or
newly created. If a file from cache can not be stored back to the server,
a local backup file is created. All local copies of files and the necessary
directories are stored in the permanent cache. A new index file of the
permanent cache is created.
If got_sigterm is 1, dirty files will not be stored back to the server.
Finally it frees all nodes. */
void
dav_close_cache(int got_sigterm);


/* Registers the kernel_interface.
Sets pointers to the write_dir_entry_fn flush_flag.
If blksize is not NULL, the preferred bloksize for IO is asigned.
It returns the value of alignment. */
size_t
dav_register_kernel_interface(dav_write_dir_entry_fn write_fn, int *flush_flag,
unsigned int *blksize);


/* Scans the hash table for file nodes to be saved them back on the server,
locks to be refreshed and locks to be released.
If maximum cache size is reached, it removes the file with the lowest
access time from the cache.
It must be called regularly.
The return value indicates whether another run would be useful.
return value: 0 there is nothing left to do.
1 another call of dav_tidy_cache would be useful. */
int
dav_tidy_cache(void);


/* Upcalls from the kernel, via the interface module. */

/* All these functions will first check if the node addressed in the
parameters exists.

Common parameters (not all of this must be present in one function):
dav_node **nodep : Used to return a pointer to a node.
dav_node *node : A pointer to the node that shall be acted on.
dav_node *parent : A pointer to the parent directory of the node in question.
const char *name : Name of the node in question. It's is just one name, not
a path, and without any trailing or leading slashes.
uid_t uid : ID of the user that requested the operation.

Common return values:
0 Success.
EACCES Access is denied to user uid according to the acces bits.
EAGAIN A temporary failure in the connection to the WebDAV server.
EBUSY The action on the node can not be performed, as somebody else uses
it allready in a way that would collide with the requested action.
EEXIST Cration of a new node is requested with flag O_EXCL, but it exists.
EINVAL One of the parameters has an invalid value.
EIO Error performing I/O-operation. Usually there are problems in the
communication with the WebDAV server.
EISDIR The node is a directory but should not be.
ENOENT The file or directory does not exist.
ENOSPC There is not enough space on the server.
ENOTDIR The node is not a directory but the requested action needs it to be.
EPERM The reuested action is not allowed to user uid. */


/* Tests whether user uid has access described by how to node.
int how : A bit mask describing the kind of acces. It may be any combination
of R_OK, W_OK, X_OK and F_OK. */
int
dav_access(dav_node *node, uid_t uid, int how);


/* Closed file descriptor fd of node.
Permissions are not checked, but flags are compared to the ones used for
opening. If fd is 0 (coda), flags, pid and pgid are used to find the best
matching file descriptor.
Only access mode bits must be set in flags.*/
int
dav_close(dav_node *node, int fd, int flags, pid_t pid, pid_t pgid);


/* Creates a new file node with name name in directory parent. The file is
locked on the server. The new node is returned in nodep.
There must no node with name name allready exist in parent.
The new node is owned by uid; group is the primary group of uid. Mode is
set to mode, but with the bits from file_umask removed.
Permissions:
uid must have execute permission for parent and all of its ancestors, as
well as write permission for parent. */
int
dav_create(dav_node **nodep, dav_node *parent, const char *name, uid_t uid,
mode_t mode);


/* Checks whether node exists and uid has permissions. The kernel interface
may then translate attributes from node.
Permissions:
uid must have execute permission for parent and all of its ancestors, as
well as read permission for parent. */
int
dav_getattr(dav_node *node, uid_t uid);


/* Checks whether node exists and uid has permissions. The value of
extended attribute name is copied into buf. If its size is greater
than size, EOVERFLOW is returned.
Permissions:
uid must have execute permission for parent and all of its ancestors, as
well as read permission for parent. */
int
dav_getxattr(dav_node *node, const char *name, char *buf, size_t *size,
uid_t uid);


/* Returns the list of supported extended attributes. This is just
user.mime_type. */
int
dav_listxattr(dav_node *node, char *buf, size_t *size, uid_t uid);


/* Searches for a node with name name in the directory parent and returns the
node in nodep.
Permissions:
uid must have execute permission for parent and all of its ancestors, as
well as read permission for parent. */
int
dav_lookup(dav_node **nodep, dav_node *parent, const char *name, uid_t uid);


/* Creates a new directory named name in direcotry parent. The directory must
not yet exist. The new node is returned in nodep.
Owner will be uid, group the primary group of uid. Mode will be mode with
the bits from dir_umask removed.
Permissions:
uid must have execute permission for parent and all of its ancestors, as
well as write permission for parent. */
int
dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid,
mode_t mode);


/* Opens file or directory node according to flags and returns file descriptor
fd. fd, together with pid, pgid and uid, is stored in node for read, write
and close operations.
Only the O_ACCESSMOE, O_APPEND and O_TRUNC bits in flags will be honoured.
O_CREATE and O_EXCL are not allowed.
Permissions:
uid must have execute permission for parent and all of its ancestors, as
as well as read and/or write permission for node, according to the
accessmode. */
int
dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid);

/* Reads size bytes from file descriptor fd, starting at position offset
and copies them into buf.
The number of bytes read is returned in len.
The file must be opened readonly or readwrite. */
int
dav_read(ssize_t *len, dav_node * node, int fd, char *buf, size_t size,
off_t offset);


/* Removes file node name in directory parent from the cache and on the server.
The file must not be locked by another WebDAV client.
Permissions:
uid must have execute permission for parent and all of its ancestors, as
well as write permission for parent. */
int
dav_remove(dav_node *parent, const char *name, uid_t uid);


/* Moves file or directory src_name from directory src_parent to directory
dst_parent and renames it to dst_name.
If dst_name allready exists in dst_parent and is a directory, there must
be no files opened for writing in it.
Moves into the backup directory are not allowed.
Permissions:
uid must have execute permission for src_parent and dst_parent and all of
their ancestors, as well as write permission for src_parent and
dst_parent. */
int
dav_rename(dav_node *src_parent, const char *src_name, dav_node *dst_parent,
const char *dst_name, uid_t uid);


/* Removes direcotry name in directory parent.
The directory must be empty and not the local backup directory.
uid must have execute permission for parent and all of its ancestors, as
well as write permission for parent. */
int
dav_rmdir(dav_node *parent, const char *name, uid_t uid);


/* Returns a pointer to the root node in nodep.
Permissions:
uid must be root, as this function is only called when the file system is
mounted. */
int
dav_root(dav_node **nodep, uid_t uid);


/* Changes attributes of the node.
sm, so, ... are flags. A value of 1 indicates that the respective
attribute is to be changed.
Permissions:
uid must have execute permission for parent directory of node and all of
its ancestors.
To change mode, owner, or gid, uid must be owner of the node or root.
To change atime, mtime or size, uid must have write permission for
node.
To change gid, uid must be member of the new group or root.
Note: This attributes, except size and the execute bit of mode, are only
changed locally and not on the server. */
int
dav_setattr(dav_node *node, uid_t uid, int sm, mode_t mode, int so,
uid_t owner, int sg, gid_t gid, int sat, time_t atime, int smt,
time_t mtime, int ssz, off_t size);

/* Returns struct dav_stat which currently is mainly fake.
No permissions necessary. */
dav_stat dav_statfs(void);


/* Calls fsync() for all filedescriptors of node, that are not read only.
No permissions are checked. */
int
dav_sync(dav_node *node);


/* Writes size bytes from buf to file descriptor fd, starting at position
offset.
The number of bytes written is returned in len.
The file must be opened writeonly or readwrite. */
/* TODO: Remove pid; check flags. */
int
dav_write(size_t *written, dav_node * node, int fd, char *buf, size_t size,
off_t offset);


#endif /* DAV_CACHE_H */

643
src/coda.h Normal file
View File

@ -0,0 +1,643 @@
/* This header file was taken from Linux kernel 2.6.18.
From the two alternative licences the Carnegie Mellon University
specific licence has been chosen.
Definitions intended for use by the kernel and not for userspace,
old API definitions and other parts unused by davfs2 have been removed.
Modifications by Werner Baumann, 2009-04-14. */


/*

Coda: an Experimental Distributed File System
Release 4.0

Copyright (c) 1987-1999 Carnegie Mellon University
All Rights Reserved

Permission to use, copy, modify and distribute this software and its
documentation is hereby granted, provided that both the copyright
notice and this permission notice appear in all copies of the
software, derivative works or modified versions, and any portions
thereof, and that both notices appear in supporting documentation, and
that credit is given to Carnegie Mellon University in all documents
and publicity pertaining to direct or indirect use of this code or its
derivatives.

CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS KNOWN TO HAVE BUGS,
SOME OF WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON ALLOWS
FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION. CARNEGIE MELLON
DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER
RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE OR OF
ANY DERIVATIVE WORK.

Carnegie Mellon encourages users of this software to return any
improvements or extensions that they make, and to grant Carnegie
Mellon the rights to redistribute these changes without encumbrance.
*/

/*
*
* Based on cfs.h from Mach, but revamped for increased simplicity.
* Linux modifications by
* Peter Braam, Aug 1996
*/

#ifndef _CODA_HEADER_
#define _CODA_HEADER_

#define cdev_t dev_t

#ifndef __BIT_TYPES_DEFINED__
#define __BIT_TYPES_DEFINED__
typedef signed char int8_t;
typedef unsigned char u_int8_t;
typedef short int16_t;
typedef unsigned short u_int16_t;
typedef int int32_t;
typedef unsigned int u_int32_t;
#endif


/*
* Cfs constants
*/
#define CODA_MAXNAMLEN 255
#define CODA_MAXPATHLEN 1024
#define CODA_MAXSYMLINK 10

/* these are Coda's version of O_RDONLY etc combinations
* to deal with VFS open modes
*/
#define C_O_READ 0x001
#define C_O_WRITE 0x002
#define C_O_TRUNC 0x010
#define C_O_EXCL 0x100
#define C_O_CREAT 0x200

/* these are to find mode bits in Venus */
#define C_M_READ 00400
#define C_M_WRITE 00200

/* for access Venus will use */
#define C_A_C_OK 8 /* Test for writing upon create. */
#define C_A_R_OK 4 /* Test for read permission. */
#define C_A_W_OK 2 /* Test for write permission. */
#define C_A_X_OK 1 /* Test for execute permission. */
#define C_A_F_OK 0 /* Test for existence. */



#ifndef _VENUS_DIRENT_T_
#define _VENUS_DIRENT_T_ 1
struct venus_dirent {
u_int32_t d_fileno; /* file number of entry */
u_int16_t d_reclen; /* length of this record */
u_int8_t d_type; /* file type, see below */
u_int8_t d_namlen; /* length of string in d_name */
char d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */
};
#undef DIRSIZ
#define DIRSIZ(dp) ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \
(((dp)->d_namlen+1 + 3) &~ 3))

/*
* File types
*/
#define CDT_UNKNOWN 0
#define CDT_FIFO 1
#define CDT_CHR 2
#define CDT_DIR 4
#define CDT_BLK 6
#define CDT_REG 8
#define CDT_LNK 10
#define CDT_SOCK 12
#define CDT_WHT 14

/*
* Convert between stat structure types and directory types.
*/
#define IFTOCDT(mode) (((mode) & 0170000) >> 12)
#define CDTTOIF(dirtype) ((dirtype) << 12)

#endif


#ifndef _VUID_T_
#define _VUID_T_
typedef u_int32_t vuid_t;
typedef u_int32_t vgid_t;
#endif /*_VUID_T_ */

struct CodaFid {
u_int32_t opaque[4];
};

#define coda_f2i(fid)\
(fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0)


#ifndef _VENUS_VATTR_T_
#define _VENUS_VATTR_T_
/*
* Vnode types. VNON means no type.
*/
enum coda_vtype { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };

struct coda_vattr {
long va_type; /* vnode type (for create) */
u_short va_mode; /* files access mode and type */
short va_nlink; /* number of references to file */
vuid_t va_uid; /* owner user id */
vgid_t va_gid; /* owner group id */
long va_fileid; /* file id */
u_quad_t va_size; /* file size in bytes */
long va_blocksize; /* blocksize preferred for i/o */
struct timespec va_atime; /* time of last access */
struct timespec va_mtime; /* time of last modification */
struct timespec va_ctime; /* time file changed */
u_long va_gen; /* generation number of file */
u_long va_flags; /* flags defined for file */
cdev_t va_rdev; /* device special file represents */
u_quad_t va_bytes; /* bytes of disk space held by file */
u_quad_t va_filerev; /* file modification number */
};

#endif

/* structure used by CODA_STATFS for getting cache information from venus */
struct coda_statfs {
int32_t f_blocks;
int32_t f_bfree;
int32_t f_bavail;
int32_t f_files;
int32_t f_ffree;
};

/*
* Kernel <--> Venus communications.
*/

#define CODA_ROOT 2
#define CODA_OPEN_BY_FD 3
#define CODA_OPEN 4
#define CODA_CLOSE 5
#define CODA_IOCTL 6
#define CODA_GETATTR 7
#define CODA_SETATTR 8
#define CODA_ACCESS 9
#define CODA_LOOKUP 10
#define CODA_CREATE 11
#define CODA_REMOVE 12
#define CODA_LINK 13
#define CODA_RENAME 14
#define CODA_MKDIR 15
#define CODA_RMDIR 16
#define CODA_SYMLINK 18
#define CODA_READLINK 19
#define CODA_FSYNC 20
#define CODA_VGET 22
#define CODA_SIGNAL 23
#define CODA_REPLACE 24 /* DOWNCALL */
#define CODA_FLUSH 25 /* DOWNCALL */
#define CODA_PURGEUSER 26 /* DOWNCALL */
#define CODA_ZAPFILE 27 /* DOWNCALL */
#define CODA_ZAPDIR 28 /* DOWNCALL */
#define CODA_PURGEFID 30 /* DOWNCALL */
#define CODA_OPEN_BY_PATH 31
#define CODA_RESOLVE 32
#define CODA_REINTEGRATE 33
#define CODA_STATFS 34
#define CODA_STORE 35
#define CODA_RELEASE 36
#define CODA_NCALLS 37

#define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)

#define VC_MAXDATASIZE 8192
#define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\
VC_MAXDATASIZE

#define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)

#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */


/*
* Venus <-> Coda RPC arguments
*/
struct coda_in_hdr {
u_int32_t opcode;
u_int32_t unique; /* Keep multiple outstanding msgs distinct */
pid_t pid;
pid_t pgid;
vuid_t uid;
};

/* Really important that opcode and unique are 1st two fields! */
struct coda_out_hdr {
u_int32_t opcode;
u_int32_t unique;
u_int32_t result;
};

/* coda_root: NO_IN */
struct coda_root_out {
struct coda_out_hdr oh;
struct CodaFid VFid;
};

struct coda_root_in {
struct coda_in_hdr in;
};

/* coda_open: */
struct coda_open_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int flags;
};

struct coda_open_out {
struct coda_out_hdr oh;
cdev_t dev;
ino_t inode;
};


/* coda_store: */
struct coda_store_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int flags;
};

struct coda_store_out {
struct coda_out_hdr out;
};

/* coda_release: */
struct coda_release_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int flags;
};

struct coda_release_out {
struct coda_out_hdr out;
};

/* coda_close: */
struct coda_close_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int flags;
};

struct coda_close_out {
struct coda_out_hdr out;
};

/* coda_ioctl: */
struct coda_ioctl_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int cmd;
int len;
int rwflag;
char *data; /* Place holder for data. */
};

struct coda_ioctl_out {
struct coda_out_hdr oh;
int len;
caddr_t data; /* Place holder for data. */
};


/* coda_getattr: */
struct coda_getattr_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
};

struct coda_getattr_out {
struct coda_out_hdr oh;
struct coda_vattr attr;
};


/* coda_setattr: NO_OUT */
struct coda_setattr_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
struct coda_vattr attr;
};

struct coda_setattr_out {
struct coda_out_hdr out;
};

/* coda_access: NO_OUT */
struct coda_access_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int flags;
};

struct coda_access_out {
struct coda_out_hdr out;
};


/* lookup flags */
#define CLU_CASE_SENSITIVE 0x01
#define CLU_CASE_INSENSITIVE 0x02

/* coda_lookup: */
struct coda_lookup_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int name; /* Place holder for data. */
int flags;
};

struct coda_lookup_out {
struct coda_out_hdr oh;
struct CodaFid VFid;
int vtype;
};


/* coda_create: */
struct coda_create_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
struct coda_vattr attr;
int excl;
int mode;
int name; /* Place holder for data. */
};

struct coda_create_out {
struct coda_out_hdr oh;
struct CodaFid VFid;
struct coda_vattr attr;
};


/* coda_remove: NO_OUT */
struct coda_remove_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int name; /* Place holder for data. */
};

struct coda_remove_out {
struct coda_out_hdr out;
};

/* coda_link: NO_OUT */
struct coda_link_in {
struct coda_in_hdr ih;
struct CodaFid sourceFid; /* cnode to link *to* */
struct CodaFid destFid; /* Directory in which to place link */
int tname; /* Place holder for data. */
};

struct coda_link_out {
struct coda_out_hdr out;
};


/* coda_rename: NO_OUT */
struct coda_rename_in {
struct coda_in_hdr ih;
struct CodaFid sourceFid;
int srcname;
struct CodaFid destFid;
int destname;
};

struct coda_rename_out {
struct coda_out_hdr out;
};

/* coda_mkdir: */
struct coda_mkdir_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
struct coda_vattr attr;
int name; /* Place holder for data. */
};

struct coda_mkdir_out {
struct coda_out_hdr oh;
struct CodaFid VFid;
struct coda_vattr attr;
};


/* coda_rmdir: NO_OUT */
struct coda_rmdir_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int name; /* Place holder for data. */
};

struct coda_rmdir_out {
struct coda_out_hdr out;
};

/* coda_symlink: NO_OUT */
struct coda_symlink_in {
struct coda_in_hdr ih;
struct CodaFid VFid; /* Directory to put symlink in */
int srcname;
struct coda_vattr attr;
int tname;
};

struct coda_symlink_out {
struct coda_out_hdr out;
};

/* coda_readlink: */
struct coda_readlink_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
};

struct coda_readlink_out {
struct coda_out_hdr oh;
int count;
caddr_t data; /* Place holder for data. */
};


/* coda_fsync: NO_OUT */
struct coda_fsync_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
};

struct coda_fsync_out {
struct coda_out_hdr out;
};

/* coda_vget: */
struct coda_vget_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
};

struct coda_vget_out {
struct coda_out_hdr oh;
struct CodaFid VFid;
int vtype;
};


/* CODA_SIGNAL is out-of-band, doesn't need data. */
/* CODA_INVALIDATE is a venus->kernel call */
/* CODA_FLUSH is a venus->kernel call */

/* coda_purgeuser: */
/* CODA_PURGEUSER is a venus->kernel call */
struct coda_purgeuser_out {
struct coda_out_hdr oh;
vuid_t uid;
};

/* coda_zapfile: */
/* CODA_ZAPFILE is a venus->kernel call */
struct coda_zapfile_out {
struct coda_out_hdr oh;
struct CodaFid CodaFid;
};

/* coda_zapdir: */
/* CODA_ZAPDIR is a venus->kernel call */
struct coda_zapdir_out {
struct coda_out_hdr oh;
struct CodaFid CodaFid;
};

/* coda_purgefid: */
/* CODA_PURGEFID is a venus->kernel call */
struct coda_purgefid_out {
struct coda_out_hdr oh;
struct CodaFid CodaFid;
};

/* coda_replace: */
/* CODA_REPLACE is a venus->kernel call */
struct coda_replace_out { /* coda_replace is a venus->kernel call */
struct coda_out_hdr oh;
struct CodaFid NewFid;
struct CodaFid OldFid;
};

/* coda_open_by_fd: */
struct coda_open_by_fd_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int flags;
};

struct coda_open_by_fd_out {
struct coda_out_hdr oh;
int fd;
};

/* coda_open_by_path: */
struct coda_open_by_path_in {
struct coda_in_hdr ih;
struct CodaFid VFid;
int flags;
};

struct coda_open_by_path_out {
struct coda_out_hdr oh;
int path;
};

/* coda_statfs: NO_IN */
struct coda_statfs_in {
struct coda_in_hdr in;
};

struct coda_statfs_out {
struct coda_out_hdr oh;
struct coda_statfs stat;
};

union inputArgs {
struct coda_in_hdr ih; /* NB: every struct below begins with an ih */
struct coda_open_in coda_open;
struct coda_store_in coda_store;
struct coda_release_in coda_release;
struct coda_close_in coda_close;
struct coda_ioctl_in coda_ioctl;
struct coda_getattr_in coda_getattr;
struct coda_setattr_in coda_setattr;
struct coda_access_in coda_access;
struct coda_lookup_in coda_lookup;
struct coda_create_in coda_create;
struct coda_remove_in coda_remove;
struct coda_link_in coda_link;
struct coda_rename_in coda_rename;
struct coda_mkdir_in coda_mkdir;
struct coda_rmdir_in coda_rmdir;
struct coda_symlink_in coda_symlink;
struct coda_readlink_in coda_readlink;
struct coda_fsync_in coda_fsync;
struct coda_vget_in coda_vget;
struct coda_open_by_fd_in coda_open_by_fd;
struct coda_open_by_path_in coda_open_by_path;
struct coda_statfs_in coda_statfs;
};

union outputArgs {
struct coda_out_hdr oh; /* NB: every struct below begins with an oh */
struct coda_root_out coda_root;
struct coda_open_out coda_open;
struct coda_ioctl_out coda_ioctl;
struct coda_getattr_out coda_getattr;
struct coda_lookup_out coda_lookup;
struct coda_create_out coda_create;
struct coda_mkdir_out coda_mkdir;
struct coda_readlink_out coda_readlink;
struct coda_vget_out coda_vget;
struct coda_purgeuser_out coda_purgeuser;
struct coda_zapfile_out coda_zapfile;
struct coda_zapdir_out coda_zapdir;
struct coda_purgefid_out coda_purgefid;
struct coda_replace_out coda_replace;
struct coda_open_by_fd_out coda_open_by_fd;
struct coda_open_by_path_out coda_open_by_path;
struct coda_statfs_out coda_statfs;
};

union coda_downcalls {
/* CODA_INVALIDATE is a venus->kernel call */
/* CODA_FLUSH is a venus->kernel call */
struct coda_purgeuser_out purgeuser;
struct coda_zapfile_out zapfile;
struct coda_zapdir_out zapdir;
struct coda_purgefid_out purgefid;
struct coda_replace_out replace;
};


/* Data passed to mount */

#define CODA_MOUNT_VERSION 1

struct coda_mount_data {
int version;
int fd; /* Opened device */
};


#endif

810
src/dav_coda.c Normal file
View File

@ -0,0 +1,810 @@
/* dav_coda.c: interface to the Coda kernel module CODA_KERNEL_VERSION 3.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#include "config.h"

#include <errno.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_LIBINTL_H
#include <libintl.h>
#endif
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <stdio.h>
#include <string.h>
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
#endif
#include <time.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif

#include "defaults.h"
#include "mount_davfs.h"
#include "cache.h"
#include "kernel_interface.h"
#include "coda.h"

#ifdef ENABLE_NLS
#define _(String) gettext(String)
#else
#define _(String) String
#endif


/* Constants */
/*===========*/

/* Size of buffer for communication with the kernel module. */
#define BUF_SIZE 2048

/* This constants are used by davfs2 to fill fields of struct CodaFid that
are not used by davfs2, but are expected by coda. */
#define DAV_VOL 0x01234567
#define DAV_VNODE 0xffffffff


/* Private global variables */
/*==========================*/

/* Buffer used for communication with the kernel module (in and out). */
static char *buf;

/* The preferred blocksize used by the local filesystem for cache files.
Used by set_attr(). */
static unsigned int blocksize;

/* Alignment boundary of dav_node in byte.
Used to compute file numbers from node pointers. */
static size_t alignment;

/* Send debug messages to syslog if != 0. */
int debug;


/* Private function prototypes */
/*=============================*/

/* Functions to handle upcalls fromthe kernel module. */

static uint32_t
coda_access(void);

static uint32_t
coda_close(void);

static uint32_t
coda_create(void);

static uint32_t
coda_getattr(void);

static uint32_t
coda_lookup(void);

static uint32_t
coda_mkdir(void);

static uint32_t
coda_open_by_fd(void);

static uint32_t
coda_root(void);

static uint32_t
coda_setattr(void);

static uint32_t
coda_statfs(void);

/* Functions that will do a downcall to the kernel module. */

static void
coda_flush(int device);

/* Auxiliary functions. */

static off_t
write_dir_entry(int fd, off_t off, const dav_node *node, const char *name);

static void
set_attr(struct coda_vattr *attr, const dav_node *node);


/* Public functions */
/*==================*/

void
dav_coda_loop(int device, size_t bufsize, time_t idle_time,
dav_is_mounted_fn is_mounted, volatile int *keep_on_running,
int dbg)
{
debug = dbg;
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "coda kernel version 3");

buf = malloc(BUF_SIZE);
if (!buf) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR),
_("can't allocate message buffer"));
return;
}
static int flush = 0;
alignment = dav_register_kernel_interface(&write_dir_entry, &flush,
&blocksize);

struct timeval tv;
tv.tv_sec = idle_time;
tv.tv_usec = 0;
time_t last_tidy_cache = time(NULL);

while (*keep_on_running) {

fd_set fds;
FD_ZERO(&fds);
FD_SET(device, &fds);
int ret = select(device + 1, &fds, NULL, NULL, &tv);

if (ret > 0) {
ssize_t bytes_read = read(device, buf, BUF_SIZE);
if (bytes_read <= 0) {
if (bytes_read == 0 || errno == EINTR || errno == EAGAIN) {
if (time(NULL) < (last_tidy_cache + idle_time)) {
tv.tv_sec = last_tidy_cache + idle_time - time(NULL);
} else {
tv.tv_sec = 0;
}
continue;
}
break;
}
} else if (ret == 0) {
if (!is_mounted())
break;
if (dav_tidy_cache() == 0) {
tv.tv_sec = idle_time;
last_tidy_cache = time(NULL);
} else {
tv.tv_sec = 0;
}
continue;
} else {
break;
}

struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
uint32_t len;
switch (ih->opcode) {
case CODA_ROOT:
len = coda_root();
break;
case CODA_OPEN_BY_FD:
len = coda_open_by_fd();
break;
case CODA_OPEN:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_OPEN:");
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
case CODA_CLOSE:
len = coda_close();
last_tidy_cache = 0;
break;
case CODA_IOCTL:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_IOCTL:");
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
case CODA_GETATTR:
len = coda_getattr();
break;
case CODA_SETATTR:
len = coda_setattr();
break;
case CODA_ACCESS:
len = coda_access();
break;
case CODA_LOOKUP:
len = coda_lookup();
break;
case CODA_CREATE:
len = coda_create();
break;
case CODA_REMOVE: {
struct coda_remove_in *in = (struct coda_remove_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_REMOVE:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p %p, %s", node,
buf + in->name);
}
oh->result = dav_remove(node, buf + in->name, ih->uid);
len = sizeof(struct coda_out_hdr);
break; }
case CODA_LINK:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_LINK:");
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
case CODA_RENAME: {
struct coda_rename_in *in = (struct coda_rename_in *) buf;
dav_node *src = *((dav_node **) &(in->sourceFid.opaque[2]));
dav_node *dst = *((dav_node **) &(in->destFid.opaque[2]));
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_RENAME:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " sp %p, %s", src,
buf + in->srcname);
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " dp %p, %s", dst,
buf + in->destname);
}
oh->result = dav_rename(src, buf + in->srcname, dst,
buf + in->destname, ih->uid);
len = sizeof(struct coda_out_hdr);
break; }
case CODA_MKDIR:
len = coda_mkdir();
break;
case CODA_RMDIR: {
struct coda_rmdir_in *in = (struct coda_rmdir_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_RMDIR:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p %p, %s", node,
buf + in->name);
}
oh->result = dav_rmdir(node, buf + in->name, ih->uid);
len = sizeof(struct coda_out_hdr);
break; }
case CODA_SYMLINK:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_SYMLINK:");
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
case CODA_READLINK:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_READLINK:");
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
case CODA_FSYNC: {
struct coda_fsync_in *in = (struct coda_fsync_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_FSYNC:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n %p", node);
}
oh->result = dav_sync(node);
len = sizeof(struct coda_out_hdr);
break; }
case CODA_VGET:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_VGET:");
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
case CODA_OPEN_BY_PATH:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG),
"CODA_OPEN_BY_PATH:");
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
case CODA_STATFS:
len = coda_statfs();
break;
case CODA_STORE: {
struct coda_store_in *in = (struct coda_store_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_STORE:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n %p, f 0x%x",
node, in->flags);
}
oh->result = dav_sync(node);
len = sizeof(struct coda_out_hdr);
break; }
case CODA_RELEASE:
len = coda_close();
last_tidy_cache = 0;
break;
default:
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG),
"UNKNOWN CODA CALL %u", ih->opcode);
oh->result = ENOTSUP;
len = sizeof(struct coda_out_hdr);
break;
}

if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "RET: %s",
strerror(oh->result));

ssize_t n = 0;
ssize_t w = 0;
while (n < len && w >= 0) {
w = write(device, buf + n, len - n);
n += w;
}

if (time(NULL) < (last_tidy_cache + idle_time)) {
tv.tv_sec = last_tidy_cache + idle_time - time(NULL);
} else {
dav_tidy_cache();
tv.tv_sec = idle_time;
last_tidy_cache = time(NULL);
}

if (flush) {
coda_flush(device);
flush = 0;
}
}
}


/* Private functions */
/*===================*/

/* Functions to handle upcalls fromthe kernel module.
The cache module only uses data types from the C-library. For file access,
mode and the like it only uses symbolic constants defined in the C-library.
So the main porpose of this functions is to translate from kernel specific
types and constants to types and constants from the C-library, and back.
All of this functions return the amount of data in buf that is to be
send to the kernel module. */

static uint32_t
coda_access(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_access_in *in = (struct coda_access_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_ACCESS:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n %p, f %x",
node, in->flags);
}

int how = (in->flags & C_A_R_OK) ? R_OK : 0;
how |= (in->flags & C_A_W_OK) ? W_OK : 0;
how |= (in->flags & C_A_X_OK) ? X_OK : 0;
how |= (in->flags & C_A_F_OK) ? F_OK : 0;
oh->result = dav_access(node, ih->uid, how);

return sizeof(struct coda_out_hdr);
}


static uint32_t
coda_close(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_close_in *in = (struct coda_close_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
if (debug) {
if (ih->opcode == CODA_CLOSE) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_CLOSE:");
} else {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_RELEASE:");
}
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n %p, f %x",
node, in->flags);
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, pgid %i",
ih->pid, ih->pgid);
}

int flags = 0;
if ((in->flags & C_O_READ) && (in->flags & C_O_WRITE)) {
flags = O_RDWR;
} else if (in->flags & C_O_READ) {
flags = O_RDONLY;
} else if (in->flags & C_O_WRITE) {
flags = O_WRONLY;
}

oh->result = dav_close(node, 0, flags, ih->pid, ih->pgid);

return sizeof(struct coda_out_hdr);
}


static uint32_t
coda_create(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_create_in *in = (struct coda_create_in *) buf;
dav_node *parent = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
struct coda_create_out *out = (struct coda_create_out *) buf;
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_CREATE:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p %p, m %o",
parent, in->mode);
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " %s", buf + in->name);
}

dav_node *node = NULL;
oh->result = dav_create(&node, parent, buf + in->name, ih->uid,
in->mode & DAV_A_MASK);

if (oh->result || !node) {
if (!oh->result)
oh->result = EIO;
return sizeof(struct coda_out_hdr);
}

out->VFid.opaque[0] = DAV_VOL;
out->VFid.opaque[1] = DAV_VNODE;
out->VFid.opaque[3] = 0;
*((dav_node **) &(out->VFid.opaque[2])) = node;
set_attr(&out->attr, node);

return sizeof(struct coda_create_out);
}


static uint32_t
coda_getattr(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_getattr_in *in = (struct coda_getattr_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
struct coda_getattr_out *out = (struct coda_getattr_out *) buf;
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_GETATTR:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n %p", node);
}

oh->result = dav_getattr(node, ih->uid);

if (oh->result)
return sizeof(struct coda_out_hdr);

set_attr(&out->attr, node);

return sizeof(struct coda_getattr_out);
}


static uint32_t
coda_lookup(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_lookup_in *in = (struct coda_lookup_in *) buf;
dav_node *parent = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
struct coda_lookup_out *out = (struct coda_lookup_out *) buf;
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_LOOKUP:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p %p, %s", parent,
buf + in->name);
}

dav_node *node = NULL;
oh->result = dav_lookup(&node, parent, buf + in->name, ih->uid);

if (oh->result || !node) {
if (!oh->result)
oh->result = EIO;
return sizeof(struct coda_out_hdr);
}

out->VFid.opaque[0] = DAV_VOL;
out->VFid.opaque[1] = DAV_VNODE;
out->VFid.opaque[3] = 0;
*((dav_node **) &(out->VFid.opaque[2])) = node;
out->vtype = (node->mode & S_IFDIR) ? CDT_DIR : CDT_REG;

return sizeof(struct coda_lookup_out);
}


static uint32_t
coda_mkdir(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_mkdir_in *in = (struct coda_mkdir_in *) buf;
dav_node *parent = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
struct coda_mkdir_out *out = (struct coda_mkdir_out *) buf;
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_MKDIR:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p %p, %s", parent,
buf + in->name);
}

dav_node *node = NULL;
oh->result = dav_mkdir(&node, parent, buf + in->name, ih->uid,
in->attr.va_mode & DAV_A_MASK);

if (oh->result || !node) {
if (!oh->result)
oh->result = EIO;
return sizeof(struct coda_out_hdr);
}

out->VFid.opaque[0] = DAV_VOL;
out->VFid.opaque[1] = DAV_VNODE;
out->VFid.opaque[3] = 0;
*((dav_node **) &(out->VFid.opaque[2])) = node;
set_attr(&out->attr, node);

return sizeof(struct coda_mkdir_out);
}


static uint32_t
coda_open_by_fd(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_open_by_fd_in *in = (struct coda_open_by_fd_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
struct coda_open_by_fd_out *out = (struct coda_open_by_fd_out *) buf;
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_OPEN_BY_FD:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n %p, f %x", node,
in->flags);
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, pgid %i",
ih->pid, ih->pgid);
}

int flags = 0;
if ((in->flags & C_O_READ) && (in->flags & C_O_WRITE)) {
flags = O_RDWR;
} else if (in->flags & C_O_READ) {
flags = O_RDONLY;
} else if (in->flags & C_O_WRITE) {
flags = O_WRONLY;
}
flags |= (in->flags & C_O_TRUNC) ? O_TRUNC : 0;

oh->result = dav_open(&out->fd, node, flags, ih->pid, ih->pgid, ih->uid);

if (oh->result || !out->fd) {
if (!oh->result)
oh->result = EIO;
return sizeof(struct coda_out_hdr);
}

return sizeof(struct coda_open_by_fd_out);
}


static uint32_t
coda_root(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
struct coda_root_out *out = (struct coda_root_out *) buf;
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_ROOT:");

dav_node *node = NULL;
oh->result = dav_root(&node, ih->uid);

if (oh->result || !node) {
if (!oh->result)
oh->result = EIO;
return sizeof(struct coda_out_hdr);
}

out->VFid.opaque[0] = DAV_VOL;
out->VFid.opaque[1] = DAV_VNODE;
out->VFid.opaque[3] = 0;
*((dav_node **) &(out->VFid.opaque[2])) = node;

return sizeof(struct coda_root_out);
}


static uint32_t
coda_setattr(void)
{
struct coda_in_hdr *ih = (struct coda_in_hdr *) buf;
struct coda_setattr_in *in = (struct coda_setattr_in *) buf;
dav_node *node = *((dav_node **) &(in->VFid.opaque[2]));
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
if (debug) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_SETATTR:");
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n %p, m %o", node,
in->attr.va_mode);
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " uid: %i, gid: %i",
in->attr.va_uid, in->attr.va_gid);
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " at %li, mt %li",
in->attr.va_atime.tv_sec, in->attr.va_mtime.tv_sec);
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " ct %li, sz %llu",
in->attr.va_ctime.tv_sec, in->attr.va_size);
}

oh->result = dav_setattr(node, ih->uid, in->attr.va_mode != USHRT_MAX,
in->attr.va_mode & DAV_A_MASK,
in->attr.va_uid != UINT32_MAX, in->attr.va_uid,
in->attr.va_gid != UINT32_MAX, in->attr.va_gid,
in->attr.va_atime.tv_sec != -1,
in->attr.va_atime.tv_sec,
in->attr.va_mtime.tv_sec != -1,
in->attr.va_mtime.tv_sec,
in->attr.va_size != UINT64_MAX,
in->attr.va_size);

return sizeof(struct coda_out_hdr);
}


static uint32_t
coda_statfs(void)
{
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
struct coda_statfs_out *out = (struct coda_statfs_out *) buf;
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_STATFS:");

dav_stat st = dav_statfs();

out->stat.f_blocks = st.blocks;
out->stat.f_bfree = st.bfree;
out->stat.f_bavail = st.bavail;
out->stat.f_files = st.files;
out->stat.f_ffree = st.ffree;

oh->result = 0;
return sizeof(struct coda_statfs_out);
}


/* Functions that will do a downcall to the kernel module. */

/* Downcall to inform the kernel that nodes have been added or removed. */
static void
coda_flush(int device)
{
struct coda_out_hdr *oh = (struct coda_out_hdr *) buf;
if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " CODA_FLUSH:");

oh->opcode = CODA_FLUSH;
oh->unique = 0;
oh->result = 0;

ssize_t n = 0;
ssize_t w = 0;
while (n < sizeof(struct coda_out_hdr) && w >= 0) {
w = write(device, buf + n, sizeof(struct coda_out_hdr) - n);
n += w;
}
}


/* Auxiliary functions. */

/* Writes a struct venus_dirent to file with file descriptor fd.
fd : An open file descriptor to write to.
off : The current file size.
name : File name; if NULL, the last, empty entry is written.
return value : New size of the file. -1 in case of an error. */
static off_t
write_dir_entry(int fd, off_t off, const dav_node *node, const char *name)
{
struct venus_dirent entry;
size_t head = offsetof(struct venus_dirent, d_name);

if (name) {
entry.d_fileno = (size_t) node / alignment;
entry.d_type = (S_ISDIR(node->mode)) ? CDT_DIR : CDT_REG;
entry.d_namlen = (strlen(name) > CODA_MAXNAMLEN)
? CODA_MAXNAMLEN : strlen(name);
entry.d_reclen = (head + entry.d_namlen +4) & ~3;
} else {
entry.d_fileno = 0;
entry.d_type = 0;
entry.d_namlen = 0;
entry.d_reclen = (head + 4) & ~3;
}

size_t size = 0;
ssize_t ret = 0;
while (ret >= 0 && size < head) {
ret = write(fd, (char *) &entry + size, head - size);
size += ret;
}
if (size != head)
return -1;

ret = 0;
while (ret >= 0 && size < (head + entry.d_namlen)) {
ret = write(fd, name + size - head, entry.d_namlen - size + head);
size += ret;
}
if (size != (head + entry.d_namlen))
return -1;

ret = 0;
while (ret >= 0 && size < entry.d_reclen) {
ret = write(fd, "\0", 1);
size += ret;
}
if (size != entry.d_reclen)
return -1;

return off + entry.d_reclen;
}


/* Translates attribute from node to attr.
Note: Members va_fileid, v_gen, va_flags, va_rdev and va_filerev have no
meaning for davfs. va_fileid is treated like d_fileno in struct venus_dirent,
the other are set to zero. The meaning of va_type is not clear at all.
Times are only set with 1 second precision, as this is the precision of the
last-modified time in HTTP. */
static void
set_attr(struct coda_vattr *attr, const dav_node *node)
{
attr->va_type = 0;
attr->va_mode = node->mode;
if (S_ISDIR(node->mode)) {
attr->va_nlink = node->nref;
} else {
attr->va_nlink = 1;
}
attr->va_uid = node->uid;
attr->va_gid = node->gid;
attr->va_fileid = (size_t) node / alignment;
attr->va_size = node->size;
attr->va_blocksize = blocksize;
attr->va_atime.tv_sec = node->atime;
attr->va_atime.tv_nsec = 0;
attr->va_mtime.tv_sec = node->mtime;
attr->va_mtime.tv_nsec = 0;
attr->va_ctime.tv_sec = node->ctime;
attr->va_ctime.tv_nsec = 0;
attr->va_gen = 0;
attr->va_flags = 0;
attr->va_rdev = 0;
attr->va_bytes = node->size;
attr->va_filerev = 0;
}

1112
src/dav_fuse.c Normal file

File diff suppressed because it is too large Load Diff

193
src/defaults.h Normal file
View File

@ -0,0 +1,193 @@
/* defauls.h: default values of configuration options and constants.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#ifndef DAV_DEFAULTS_H
#define DAV_DEFAULTS_H


/* Misc. */
/*=======*/

#define DAV_HOME "http://dav.sourceforge.net"

/* File system type to be used with 'mount -t' and fstab. */
#define DAV_FS_TYPE "davfs"

/* Mount options set by mount program in case of mounting by an
ordinary user. */
#define DAV_USER_MOPTS (MS_MGC_VAL | MS_NOSUID | MS_NOEXEC | MS_NODEV)

/* This mount options will allways be set by davfs2. Different values from
command line and even fstab will be silently ignored. */
#define DAV_MOPTS (MS_MGC_VAL | MS_NOSUID | MS_NODEV)

/* XML namespace for the cache index file. */
#define DAV_XML_NS "http://dav.sf.net/"


/* Directories and Files */
/*=======================*/

/* The device directory. */
#define DAV_DEV_DIR "/dev"

/* The file davfs reads mtab entries from. If not available it will
use _PATH_MOUNTED. */
#define DAV_MOUNTS "/proc/mounts"

/* The directory where the cache files will be stored, when mounted by
a non root users; relative to DAV_USER_DIR.
May be overridden by user config file. */
#define DAV_CACHE "cache"

/* The name of index files. */
#define DAV_INDEX "index"

/* Name of the directory within the davfs2 filesystem that holds local
backup files.
May be overridden by system config file and user config file. */
#define DAV_BACKUP_DIR "lost+found"

/* Buffer size for reading the XML index files of persistent cache. */
#define DAV_XML_BUF_SIZE 16 * 1024


/* Cache Optimization */
/*====================*/

/* Cache size in MiByte.
May be overridden by system config file and user config file.
(1 MiByte = 1,048,576 Byte; Mi = Mebi = Mega Binary according to IEC) */
#define DAV_CACHE_SIZE 50

/* Size of the hash table to store nodes. Should be a power of 2.
May be overridden by system config file and user config file. */
#define DAV_TABLE_SIZE 1024

/* How long in seconds a cached directory is valid. After this time
a new PROPFIND request for this directory must be performed.
May be overridden by system config file and user config file. */
#define DAV_DIR_REFRESH 60

/* Wait at least that many seconds from last file access until a new
GET If-Modified request is send to the server. If set to 0 a request
will be send every time the file is opened. But some applications do
open and close calls in short sequence that cause - mostly - unnecessary
traffic.
May be overridden by system config file and user config file. */
#define DAV_FILE_REFRESH 1

/* How long to delay uploading of locally changed files after closing.
May be overridden by system config file and user config file. */
#define DAV_DELAY_UPLOAD 10

/* Use PROPFIND to get the Last-Modified time of all files in a directory
instead of GET If-Modified_Since for single files.
May be overridden by system config file and user config file. */
#define DAV_GUI_OPTIMIZE 0


/* HTTP */
/*======*/

/* The default proxy port.
May be overridden by system config file, user config file or environment
variable. */
#define DAV_DEFAULT_PROXY_PORT 8080

/* Whether to use a proxy if one is specified.
May be overridden by command line or fstab. */
#define DAV_USE_PROXY 1

/* Whether to ask user for credentials if not given.
May be overridden by command line, fstab or system config file. */
#define DAV_ASKAUTH 1

/* Whether to use locks.
May be overridden by command line or fstab. */
#define DAV_LOCKS 1

/* Send expect 100-continue header in PUT requests.
May be overridden by system config file and user config file. */
#define DAV_EXPECT100 0

/* If If-Match and If-None-Match does not work on the server, set to 1.
Default is 1, as Apache has this bug.
May be overridden by system config file and user config file. */
#define DAV_IF_MATCH_BUG 0

/* Some servers sends a weak invalid etag that turns into a valid strong etag
after one second. With this flag set, the etag will not be used,
otherwise the weakness indicator will be removed and the etag be trated
as if it was strong.
May be overridden by system config file and user config file. */
#define DAV_DROP_WEAK_ETAGS 0

/* Wether to allow a cookie to be set and included in requests.
May be overridden by system config file and user config file. */
#define DAV_ALLOW_COOKIE 0

/* Check on server whether a file exists or has been modified before
locking a new file or changing an existant one.
May be overridden by system config file and user config file. */
#define DAV_PRECHECK 1

/* Ignore the information in the DAV-header, if any, because it
may be a lie.
May be overridden by system config file and user config file. */
#define DAV_IGNORE_DAV_HEADER 0

/* Timeout in seconds used when libneon supports non blocking io
A value of zero means use the TCP default
May be overriden by system config file and user config file. */
#define DAV_CONNECT_TIMEOUT 10

/* Timeout in seconds used when reading from a socket.
May be overridden by system config file and user config file. */
#define DAV_READ_TIMEOUT 30

/* Default retry time after a PROPFIND request failed. When the request fails
again, the retry time will subsequently be increased up to DAV_MAX_RETRY.
May be overridden by system config file and user config file. */
#define DAV_RETRY 30

/* Maximum retry time after a PROPFIND request failed.
May be overridden by system config file and user config file. */
#define DAV_MAX_RETRY 300

/* Preferred live time of locks in seconds, before they have to be refreshed.
May be overridden by system config file and user config file. */
#define DAV_LOCK_TIMEOUT 1800

/* How many seconds before a lock expires it should be refreshed.
May be overridden by system config file and user config file. */
#define DAV_LOCK_REFRESH 60


/* Debug Constants */
/*=================*/

#define DAV_DBG_CONFIG 0x1
#define DAV_DBG_KERNEL 0x2
#define DAV_DBG_CACHE 0x4
#define DAV_DBG_SECRETS 0x8


#endif /* DAV_DEFAULTS_H */

314
src/fuse_kernel.h Normal file
View File

@ -0,0 +1,314 @@
/* This file is taken from FUSE 2.5.3.
From the two alternative licences the BSD licence has been chosen.
#include and #ifdef directives have been removed.
Modifications by Werner Baumann, 2009-04-14. */


/* This file defines the kernel interface of FUSE */

/*
Copyright (C) 2001-2006 Miklos Szeredi. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/


#define __u64 uint64_t
#define __u32 uint32_t
#define __s32 int32_t

/** Version number of this interface */
#define FUSE_KERNEL_VERSION 7

/** Minor version number of this interface */
#define FUSE_KERNEL_MINOR_VERSION 5

/** The node ID of the root inode */
#define FUSE_ROOT_ID 1

/** The major number of the fuse character device */
#define FUSE_MAJOR 10

/** The minor number of the fuse character device */
#define FUSE_MINOR 229

/* Make sure all structures are padded to 64bit boundary, so 32bit
userspace works under 64bit kernels */

struct fuse_attr {
__u64 ino;
__u64 size;
__u64 blocks;
__u64 atime;
__u64 mtime;
__u64 ctime;
__u32 atimensec;
__u32 mtimensec;
__u32 ctimensec;
__u32 mode;
__u32 nlink;
__u32 uid;
__u32 gid;
__u32 rdev;
};

struct fuse_kstatfs {
__u64 blocks;
__u64 bfree;
__u64 bavail;
__u64 files;
__u64 ffree;
__u32 bsize;
__u32 namelen;
__u32 frsize;
__u32 padding;
__u32 spare[6];
};

#define FATTR_MODE (1 << 0)
#define FATTR_UID (1 << 1)
#define FATTR_GID (1 << 2)
#define FATTR_SIZE (1 << 3)
#define FATTR_ATIME (1 << 4)
#define FATTR_MTIME (1 << 5)
#define FATTR_FH (1 << 6)

/**
* Flags returned by the OPEN request
*
* FOPEN_DIRECT_IO: bypass page cache for this open file
* FOPEN_KEEP_CACHE: don't invalidate the data cache on open
*/
#define FOPEN_DIRECT_IO (1 << 0)
#define FOPEN_KEEP_CACHE (1 << 1)

enum fuse_opcode {
FUSE_LOOKUP = 1,
FUSE_FORGET = 2, /* no reply */
FUSE_GETATTR = 3,
FUSE_SETATTR = 4,
FUSE_READLINK = 5,
FUSE_SYMLINK = 6,
FUSE_MKNOD = 8,
FUSE_MKDIR = 9,
FUSE_UNLINK = 10,
FUSE_RMDIR = 11,
FUSE_RENAME = 12,
FUSE_LINK = 13,
FUSE_OPEN = 14,
FUSE_READ = 15,
FUSE_WRITE = 16,
FUSE_STATFS = 17,
FUSE_RELEASE = 18,
FUSE_FSYNC = 20,
FUSE_SETXATTR = 21,
FUSE_GETXATTR = 22,
FUSE_LISTXATTR = 23,
FUSE_REMOVEXATTR = 24,
FUSE_FLUSH = 25,
FUSE_INIT = 26,
FUSE_OPENDIR = 27,
FUSE_READDIR = 28,
FUSE_RELEASEDIR = 29,
FUSE_FSYNCDIR = 30,
FUSE_ACCESS = 34,
FUSE_CREATE = 35
};

/* The read buffer is required to be at least 8k, but may be much larger */
/* 2009-04-14, increased size of FUSE_MIN_READ_BUFFER, Werner Baumann */
#define FUSE_MIN_READ_BUFFER 16384

struct fuse_entry_out {
__u64 nodeid; /* Inode ID */
__u64 generation; /* Inode generation: nodeid:gen must
be unique for the fs's lifetime */
__u64 entry_valid; /* Cache timeout for the name */
__u64 attr_valid; /* Cache timeout for the attributes */
__u32 entry_valid_nsec;
__u32 attr_valid_nsec;
struct fuse_attr attr;
};

struct fuse_forget_in {
__u64 nlookup;
};

struct fuse_attr_out {
__u64 attr_valid; /* Cache timeout for the attributes */
__u32 attr_valid_nsec;
__u32 dummy;
struct fuse_attr attr;
};

struct fuse_mknod_in {
__u32 mode;
__u32 rdev;
};

struct fuse_mkdir_in {
__u32 mode;
__u32 padding;
};

struct fuse_rename_in {
__u64 newdir;
};

struct fuse_link_in {
__u64 oldnodeid;
};

struct fuse_setattr_in {
__u32 valid;
__u32 padding;
__u64 fh;
__u64 size;
__u64 unused1;
__u64 atime;
__u64 mtime;
__u64 unused2;
__u32 atimensec;
__u32 mtimensec;
__u32 unused3;
__u32 mode;
__u32 unused4;
__u32 uid;
__u32 gid;
__u32 unused5;
};

struct fuse_open_in {
__u32 flags;
__u32 mode;
};

struct fuse_open_out {
__u64 fh;
__u32 open_flags;
__u32 padding;
};

struct fuse_release_in {
__u64 fh;
__u32 flags;
__u32 padding;
};

struct fuse_flush_in {
__u64 fh;
__u32 flush_flags;
__u32 padding;
};

struct fuse_read_in {
__u64 fh;
__u64 offset;
__u32 size;
__u32 padding;
};

struct fuse_write_in {
__u64 fh;
__u64 offset;
__u32 size;
__u32 write_flags;
};

struct fuse_write_out {
__u32 size;
__u32 padding;
};

#define FUSE_COMPAT_STATFS_SIZE 48

struct fuse_statfs_out {
struct fuse_kstatfs st;
};

struct fuse_fsync_in {
__u64 fh;
__u32 fsync_flags;
__u32 padding;
};

struct fuse_setxattr_in {
__u32 size;
__u32 flags;
};

struct fuse_getxattr_in {
__u32 size;
__u32 padding;
};

struct fuse_getxattr_out {
__u32 size;
__u32 padding;
};

struct fuse_access_in {
__u32 mask;
__u32 padding;
};

struct fuse_init_in {
__u32 major;
__u32 minor;
};

struct fuse_init_out {
__u32 major;
__u32 minor;
__u32 unused[3];
__u32 max_write;
};

struct fuse_in_header {
__u32 len;
__u32 opcode;
__u64 unique;
__u64 nodeid;
__u32 uid;
__u32 gid;
__u32 pid;
__u32 padding;
};

struct fuse_out_header {
__u32 len;
__s32 error;
__u64 unique;
};

struct fuse_dirent {
__u64 ino;
__u64 off;
__u32 namelen;
__u32 type;
char name[0];
};

#define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
#define FUSE_DIRENT_SIZE(d) \
FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)

265
src/kernel_interface.c Normal file
View File

@ -0,0 +1,265 @@
/* kernel_interface.c: interface to fuse and coda kernel mocule.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#include "config.h"

#include <error.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_LIBINTL_H
#include <libintl.h>
#endif
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <stdio.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <string.h>
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
#endif

#include "defaults.h"
#include "mount_davfs.h"
#include "cache.h"
#include "coda.h"
#include "fuse_kernel.h"
#include "kernel_interface.h"

#ifdef ENABLE_NLS
#define _(String) gettext(String)
#else
#define _(String) String
#endif


/* Private constants */
/*===================*/

/* Name, major number and minor number of the devices to communicate with the
kernel file system. */
#define FUSE_DEV_NAME "fuse"
#define CODA_DEV_NAME "cfs"
#define CODA_MAJOR 67
#define MAX_CODADEVS 5 /* Coda minor number may be from 0 to 4. */


/* Private function prototypes */
/*=============================*/

static int
init_coda(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata);

static int
init_fuse(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata,
size_t *buf_size, const char *url, const char *mpoint,
unsigned long int mopts, uid_t owner, gid_t group, mode_t mode);


/* Public functions */
/*==================*/

int
dav_init_kernel_interface(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata,
char **kernel_fs, size_t *buf_size, const char *url,
const char *mpoint, const dav_args *args)
{
uid_t orig = geteuid();
seteuid(0);

if (!*kernel_fs)
*kernel_fs = strdup("fuse");
if (!*kernel_fs) abort();

int mounted = 0;
if (strcmp(*kernel_fs, "coda") == 0) {

if (init_coda(dev, msg_loop, mdata) != 0) {
error(0, 0, _("trying fuse kernel file system"));
if (init_fuse(dev, msg_loop, mdata, buf_size, url, mpoint,
args->mopts, args->uid, args->gid, args->dir_mode)
== 0) {
free(*kernel_fs);
*kernel_fs = strdup("fuse");
if (!*kernel_fs) abort();
mounted = 1;
error(0, 0, _("fuse device opened successfully"));
} else {
exit(EXIT_FAILURE);
}
}

} else if (strcmp(*kernel_fs, "fuse") == 0) {

if (init_fuse(dev, msg_loop, mdata, buf_size, url, mpoint, args->mopts,
args->uid, args->gid, args->dir_mode) == 0) {
mounted = 1;
} else {
error(0, 0, _("trying coda kernel file system"));
if (init_coda(dev, msg_loop, mdata) == 0) {
free(*kernel_fs);
*kernel_fs = strdup("coda");
if (*kernel_fs == NULL)
abort();
error(0, 0, _("coda device opened successfully"));
} else {
exit(EXIT_FAILURE);
}
}

} else {

error(EXIT_FAILURE, 0, _("unknown kernel file system %s"), *kernel_fs);
}

seteuid(orig);
return mounted;
}


/* Private functions */
/*===================*/

static int
init_coda(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata)
{
*dev = 0;
int minor = 0;
while (*dev <= 0 && minor < MAX_CODADEVS) {
char *path;
if (asprintf(&path, "%s/%s%i", DAV_DEV_DIR, CODA_DEV_NAME, minor) < 0)
abort();
*dev = open(path, O_RDWR | O_NONBLOCK);
free(path);
++minor;
}

if (*dev <= 0) {
system("/sbin/modprobe coda &>/dev/null");
minor = 0;
while (*dev <= 0 && minor < MAX_CODADEVS) {
char *path;
if (asprintf(&path, "%s/%s%i",
DAV_DEV_DIR, CODA_DEV_NAME, minor) < 0)
abort();
*dev = open(path, O_RDWR | O_NONBLOCK);
if (*dev <= 0) {
if (mknod(path, S_IFCHR, makedev(CODA_MAJOR, minor)) == 0) {
chown(path, 0, 0);
chmod(path, S_IRUSR | S_IWUSR);
*dev = open(path, O_RDWR | O_NONBLOCK);
}
}
free(path);
++minor;
}
}

if (*dev <= 0) {
error(0, 0, _("no free coda device to mount"));
return -1;
}

int version = 0;
ioctl(*dev, CIOC_KERNEL_VERSION, &version);
if (version == 3) {
*msg_loop = dav_coda_loop;
} else {
error(0, 0, _("CODA_KERNEL_VERSION %u not supported"), version);
close(*dev);
return -1;
}

struct coda_mount_data *md = malloc(sizeof(struct coda_mount_data));
if (!md) abort();
md->version = CODA_MOUNT_VERSION;
md->fd = *dev;
*mdata = md;

return 0;
}


static int
init_fuse(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata,
size_t *buf_size, const char *url, const char *mpoint,
unsigned long int mopts, uid_t owner, gid_t group, mode_t mode)
{
char *path;
if (asprintf(&path, "%s/%s", DAV_DEV_DIR, FUSE_DEV_NAME) < 0)
abort();

*dev = open(path, O_RDWR | O_NONBLOCK);
if (*dev <= 0) {
system("/sbin/modprobe fuse &>/dev/null");
*dev = open(path, O_RDWR | O_NONBLOCK);
}
if (*dev <= 0) {
if (mknod(path, S_IFCHR, makedev(FUSE_MAJOR, FUSE_MINOR)) == 0) {
chown(path, 0, 0);
chmod(path, S_IRUSR | S_IWUSR);
*dev = open(path, O_RDWR | O_NONBLOCK);
}
}

free(path);
if (*dev <= 0) {
error(0, 0, _("can't open fuse device"));
return -1;
}

if (*buf_size < (FUSE_MIN_READ_BUFFER + 4096)) {
*buf_size = FUSE_MIN_READ_BUFFER + 4096;
}

#if SIZEOF_VOID_P == 8
if (asprintf((char **) mdata, "fd=%i,rootmode=%o,user_id=%i,group_id=%i,"
"allow_other,max_read=%lu", *dev, mode, owner, group,
*buf_size - 4096) < 0)
abort();
#else
if (asprintf((char **) mdata, "fd=%i,rootmode=%o,user_id=%i,group_id=%i,"
"allow_other,max_read=%u", *dev, mode, owner, group,
*buf_size - 4096) < 0)
abort();
#endif
if (mount(url, mpoint, "fuse", mopts, *mdata) == 0) {
*msg_loop = dav_fuse_loop;
return 0;
}

free(*mdata);
close(*dev);
error(0, 0, _("can't mount using fuse kernel file system"));
return -1;
}

96
src/kernel_interface.h Normal file
View File

@ -0,0 +1,96 @@
/* kernel_interface.h: interface to fuse and coda kernel mocule.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#ifndef DAV_KERNEL_INTERFACE_H
#define DAV_KERNEL_INTERFACE_H


/* Function type definitions */
/*===========================*/

/* Call back function to be passed to dav_init_kernel_interface(). Will be
called to see whether the file system is still mounted.
return value : 1 is mounted, 0 is not mounted. */
typedef int (*dav_is_mounted_fn)(void);


/* Typedef of the message loop of the specific kernel interfaces. The real
function will be returned by dav_init_kernel_interface().
device : File descriptor of the open fuse device.
buf_size : Size of the buffer for communication with the kernel
module.
idle_t : Time to wait for upcalls before calling dav_tidy_cache().
is_mounted_fn : Call back function to check of still mounted.
keep_on_running : Pointer to run flag.
dbg : send debug messages to syslog if dbg != 0 */
typedef void (*dav_run_msgloop_fn)(int device, size_t bufsize, time_t idle_time,
dav_is_mounted_fn is_mounted,
volatile int *keep_on_running, int dbg);


/* Function prototypes */
/*=====================*/

/* Opens the device for communication with the kernel file system, if possible
mounts the file system and updates the interface data (dev,
dav_ran_msgloop_fn, mdata, kernel_fs and buf_size).
In case of an error it prints an error message and terminates the program.
dev : File descriptor of the open device for communication with the
kernel file system.
msg_loop : The specific message loop function that will process the kernel
upcalls.
mdata : That mount data that will be passed to the mount function.
kernel_fs : Type of the kernel file system to us (fuse or coda). If this
does not work, the other file system will be tried. The name
of the file system that is really used is returned.
If NULL, fuse is tried first.
buf_size : Size of the buffer for communication with the kernel file system
(fuse only). The size passed to this function is checked against
the requirements of the kernel fs and updated if necessary.
url : Server url.
mpoint : Mount point.
mopts : Mount options.
owner : The owner of the file system (fuse only).
group : Group the file system belongs to (fuse only).
mode : Mode of the root node (fuse only).
return value : 0: the file system has not yet been mounted
1: the file system has been mounted successfully. */
int
dav_init_kernel_interface(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata,
char **kernel_fs, size_t *buf_size, const char *url,
const char *mpoint, const dav_args *args);


/* Message loop for coda kernel module CODA_KERNEL_VERSION 3.
Parameters see dav_run_msgloop_fn(). */
void dav_coda_loop(int device, size_t bufsize, time_t idle_time,
dav_is_mounted_fn is_mounted,
volatile int *keep_on_running, int dbg);


/* Message loop for fuse kernel module with major number 7.
Parameters see dav_run_msgloop_fn(). */
void
dav_fuse_loop(int device, size_t bufsize, time_t idle_time,
dav_is_mounted_fn is_mounted, volatile int *keep_on_running,
int dbg);


#endif /* DAV_KERNEL_INTERFACE_H */

2538
src/mount_davfs.c Normal file

File diff suppressed because it is too large Load Diff

157
src/mount_davfs.h Normal file
View File

@ -0,0 +1,157 @@
/* mount_davfs.h: structure to collect arguments and options.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#ifndef DAV_MOUNT_DAVFS_H
#define DAV_MOUNT_DAVFS_H


/* Data Types */
/*============*/

/* This data structure holds almost everything davfs gathers while reading and
checking command line and configuration files. (See comment for data origin;
highest precedence first.)
Some data will be copied into global or local variables to be available in
daemon mode. The rest will be freed when forking into daemon mode. */
typedef struct {
char *dav_user; /* System config file */
char *dav_group; /* System config file */
char *ignore_home; /* System config file */
char *conf; /* Command line */
/* Mount options */
int user; /* Command line */
int netdev; /* Command line */
unsigned long int mopts; /* Command line */
char *add_mopts;
char *kernel_fs; /* User config file, system config file */
size_t buf_size; /* User config file, system config file */
/* File mode */
uid_t uid; /* Command line */
gid_t gid; /* Command line */
mode_t dir_umask;
mode_t file_umask;
mode_t dir_mode; /* Command line */
mode_t file_mode; /* Command line */
/* WebDAV-resource */
char *scheme; /* Command line */
char *host; /* Command line */
int port; /* Command line */
char *path; /* Command line */
char *servercert; /* User config file, system config file */
char *secrets; /* User config file */
char *username; /* User secrets file, system secrets file */
char *password; /* User secrets file, system secrets file */
char *clicert; /* User config file, system config file */
char *clicert_pw; /* User secrets file, system secrets file */
char *p_host; /* User config file, sys conf f., environment */
int p_port; /* User config file, sys conf f., environment */
char *p_user; /* User secrets file, system secrets file */
char *p_passwd; /* User secrets file, system secrets file */
int useproxy; /* User config file, sys conf f., command line */
int askauth; /* User config file, sys conf f., command line */
int locks; /* User config file, sys conf f., command line */
char * lock_owner; /* User config file, system config file */
time_t lock_timeout; /* User config file, system config file */
time_t lock_refresh; /* User config file, system config file */
int expect100; /* User config file, system config file */
int if_match_bug; /* User config file, system config file */
int drop_weak_etags; /* User config file, system config file */
int allow_cookie; /* User config file, system config file */
int precheck; /* User config file, system config file */
int ignore_dav_header; /* User config file, system config file */
time_t connect_timeout; /* User config file, system config file */
time_t read_timeout; /* User config file, system config file */
time_t retry; /* User config file, system config file */
time_t max_retry; /* User config file, system config file */
char * s_charset; /* User config file, system config file */
char * header; /* User config file, system config file */
/* Cache */
char *sys_cache; /* System config file */
char *cache_dir; /* User config file */
char *backup_dir; /* User config file, system config file */
size_t cache_size; /* User config file, system config file */
size_t table_size; /* User config file, system config file */
time_t dir_refresh; /* User config file, system config file */
time_t file_refresh; /* User config file, system config file */
int delay_upload; /* User config file, system config file */
int gui_optimize; /* User config file, system config file */
/* Debugging */
int debug; /* User config file, system config file */
int neon_debug; /* User config file, system config file */
} dav_args;


/* Public functions. */
/*===================*/

/* Main launches a daemon program that runs a directory and file cache and
is connected to the WbDAV resource and the kernel file system module.
It must run setuid root. After forking into daemon mode it releases root
permissions permanently. The daemon runs with the uid of the user that owns
the file system. (If invoked by root and the mounted file system is owned
by root, the daemon runs as root. This should be avoided.)
Launching the daemon (and stopping) is done in 5 steps.
Step 1:
- Gathering information from command line, configuration files and
environment.
- Checking this information for consistency and any errors that would
prevent successful running of the daemon.
- Checking whether the the user has permissions to mount.
- Checking whether the neccessary files and directories for running the
daemon are available.
Step 2:
- The modules for connecting to the kernel, connecting to the WebDAV resource
and for caching are initialised.
If an error accurs during step 1 or step 2 an error message is printed and
the program dies immediately. Clean up is left to the operating system.
Step 3:
- Forking into daemon mode.
- While the daemon (child) writes the pid file and starts reading upcalls
from the kernel in an endless loop, the parent process tries to mount the
file system and write an entry into mtab (_PROC_MOUNTS).
- If an error occurs in one of the processes it sends SIGTERM to the other.
While the parent just dies, the daemon will run its normal exit code
(see step 5). In rare cases this might nevertheless leave stale pid files
or entries in mtab that must be cleaned manually by the administrator.
- If mounting is successful the parent process exits with success.
Step 4:
- Running as daemon.
Step 5:
- Terminating.
- The daemon has set a signal handler for SIGTERM and SIGHUP. If it gets one
of these signals it tries to unmount the file system and resets the global
variable keep_on_running. This will terminate the message loop gracefully.
- If the file system is unmounted (by the umount programm), the message
loop will terminate gracefully.
- The close functions of the modules are called, that will clean up the
cache, save cached information if neccessary and close the connections. */
int
main(int argc, char *argv[]);


/* Prints prompt to stdout and reads a line from stdin.
Echoing the user input to stdout is prohibited.
A trailing newline is removed.
return value : the user input. */
char *
dav_user_input_hidden(const char *prompt);


#endif /* DAV_MOUNT_DAVFS_H */

212
src/umount_davfs.c Normal file
View File

@ -0,0 +1,212 @@
/* umount_davfs.c: unmount the davfs file system.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#include "config.h"

#include <error.h>
#include <errno.h>
#include <getopt.h>
#ifdef HAVE_LIBINTL_H
#include <libintl.h>
#endif
#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
#include <stdio.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

#include <ne_string.h>

#include "defaults.h"

#ifdef ENABLE_NLS
#define _(String) gettext(String)
#else
#define _(String) String
#define textdomain(Domainname)
#define bindtextdomain(Domainname, Dirname)
#endif


/* This is lazy programming. All the dirty work is left to the real umount
program, while we just sit and wait for mount.davfs to terminate.
umount.davfs is a umount helper. It is usually called by umount and makes
sure, that umount will not return until mount.davfs has synchronized all
files.
It first reads the pid-file and identifies the mount.davfs process. Then
it calls mount again, with option -i (to not be called again), to do the
real unmounting. In a loop it will watch the process list. When the
mount.davfs process terminates, it will return.
If it can't identify the mount.davfs process, it will call umount -i anyway,
but warn the user. */
int
main(int argc, char *argv[])
{
setuid(getuid());
setgid(getgid());

setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);

char *short_options = "Vhflnrv";
static const struct option options[] = {
{"version", no_argument, NULL, 'V'},
{"help", no_argument, NULL, 'h'},
{0, 0, 0, 0}
};

int o;
o = getopt_long(argc, argv, short_options, options, NULL);
while (o != -1) {
switch (o) {
case 'V':
printf("%s <%s>\n\n", PACKAGE_STRING, DAV_HOME);
printf(_("This is free software; see the source for copying "
"conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS "
"FOR A PARTICULAR PURPOSE.\n"));
exit(EXIT_SUCCESS);
case 'h':
printf(_("Usage:\n"
" u%s -V,--version : print version string\n"
" u%s -h,--help : print this message\n\n"),
PROGRAM_NAME, PROGRAM_NAME);
printf(_("To umount a WebDAV-resource don't call u%s directly, "
"but use\n"
"`umount' instead.\n"), PROGRAM_NAME);
printf(_(" umount <mountpoint> : umount the WebDAV-resource as "
"specified in\n"
" /etc/fstab.\n"));
exit(EXIT_SUCCESS);
case 'f':
case 'l':
case 'n':
case 'r':
case 'v':
case '?':
break;
default:
error(EXIT_FAILURE, 0, _("unknown error parsing arguments"));
}
o = getopt_long(argc, argv, short_options, options, NULL);
}

if (optind > (argc - 1))
error(EXIT_FAILURE, 0, _("missing argument"));
if (optind < (argc - 1))
error(EXIT_FAILURE, 0, _("too many arguments"));

char *mpoint = canonicalize_file_name(argv[optind]);
if (!mpoint)
mpoint = argv[optind];
if (!mpoint || *mpoint != '/')
error(EXIT_FAILURE, 0, _("can't determine mount point"));

char *m = mpoint;
while (*m == '/')
m++;
char *mp = ne_strdup(m);
m = strchr(mp, '/');
while (m) {
*m = '-';
m = strchr(mp, '/');
}
char *pidfile = ne_concat(DAV_SYS_RUN, "/", mp, ".pid", NULL);
free(mp);

char *umount_command = ne_concat("umount -i ", mpoint, NULL);

char *pid = NULL;
FILE *file = fopen(pidfile, "r");
if (!file || fscanf(file, "%a[0-9]", &pid) != 1 || !pid) {
error(0, 0,
_("\n"
" can't read PID from file %s;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"), pidfile, PROGRAM_NAME);
return system(umount_command);
}
fclose(file);

char *ps_command = ne_concat("ps -p ", pid, NULL);
FILE *ps_in = popen(ps_command, "r");
if (!ps_in) {
error(0, 0,
_("\n"
" can't read process list;\n"
" trying to unmount anyway;\n"
" please wait for %s to terminate"), PROGRAM_NAME);
return system(umount_command);
}

int found = 0;
size_t n = 0;
char *ps_line = NULL;
while (!found && getline(&ps_line, &n, ps_in) > 0)
found = (strstr(ps_line, pid) && strstr(ps_line, PROGRAM_NAME));
pclose(ps_in);

if (!found) {
error(0, 0,
_("\n"
" can't find %s-process with pid %s;\n"
" trying to unmount anyway.\n"
" you propably have to remove %s manually"),
PROGRAM_NAME, pid, pidfile);
return system(umount_command);
}

if (system(umount_command) != 0)
exit(EXIT_FAILURE);

printf(_("%s: waiting while %s (pid %s) synchronizes the cache ."),
argv[0], PROGRAM_NAME, pid);
fflush(stdout);

while (found) {

sleep(3);
printf(".");
fflush(stdout);

ps_in = popen(ps_command, "r");
if (!ps_in) {
printf("\n");
error(EXIT_FAILURE, 0, _("an error occured while waiting; "
"please wait for %s to terminate"), PROGRAM_NAME);
}

found = 0;
while (!found && getline(&ps_line, &n, ps_in) > 0)
found = (strstr(ps_line, pid) && strstr(ps_line, PROGRAM_NAME));

pclose(ps_in);
}
printf(" OK\n");

return 0;
}

1915
src/webdav.c Normal file

File diff suppressed because it is too large Load Diff

278
src/webdav.h Normal file
View File

@ -0,0 +1,278 @@
/* webdav.h: send requests to the WebDAV server.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann

This file is part of davfs2.

davfs2 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 3 of the License, or
(at your option) any later version.

davfs2 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 davfs2; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */


#ifndef DAV_WEBDAV_H
#define DAV_WEBDAV_H


/* Data Types */
/*============*/

/* This structure holds the properties retrieved from the server.
Usually a linked list of these is returned by dav_get_collection().
Unused pointers should be set to NULL, integer types to 0. */
typedef struct dav_props dav_props;
struct dav_props {
char *path; /* The unescaped path of the resource. */
char *name; /* The name of the file or directory. Only the last
component (no path), no slashes. */
char *etag; /* The etag string, including quotation characters,
but without the mark for weak etags. */
off_t size; /* File size in bytes (regular files only). */
time_t ctime; /* Creation date. */
time_t mtime; /* Date of last modification. */
int is_dir; /* Boolean; 1 if a directory. */
int is_exec; /* -1 if not specified; 1 is executeable;
0 not executeable. */
dav_props *next; /* Next in the list. */
};


/* Function prototypes */
/*=====================*/

/* Creates and initializes a neon_session, using configuration information
given as parameters, and checks the WebDAV class of the server.
If the server does not support class 2, locking is disabled.
It must only be initialized once, as it depends on global variables.
If an error occurs, the program is terminated.
paramters: if not self explaining, please see mount_davfs.h, struct args. */
void
dav_init_webdav(const dav_args* args);


/* Does an OPTIONS request to check the server capabilities. In case of
success it will set the global variable initialized. If the server
does not support locks, it will remove the lockstore and set locks
to NULL.
path : Path to the root collection.
return value : 0 on success or an apropriate error code. */
int
dav_init_connection(const char *path);


/* Releases all locks (if possible) and closes the session.
Does not free memory held by the session. */
void
dav_close_webdav(void);


/* Converts the character encoding of s from and to the local encoding.
Converter handles are taken from global variables from_utf_8, to_utf_8,
from_server_enc and to_server_enc.
If no conversion is necessary, it just returns a copy of s.
name : string to be converted.
return value : the converted string, newly allocated. */
char *
dav_conv_from_utf_8(const char *s);
char *
dav_conv_to_utf_8(const char *s);
char *
dav_conv_from_server_enc(const char *s);
char *
dav_conv_to_server_enc(const char *s);


/* Deletes file path on the server.
On success locks for this file are removed from the lock store.
path : Absolute path of the file.
expire : If not 0, the resource is assumed to be locked and the lock
will be removed after successful delete.
return value : 0 on success; an appropriate file error code otherwise. */
int
dav_delete(const char *path, time_t *expire);


/* Deletes collection path on the server.
path : Absolute path of the collection.
return value : 0 on success; an appropriate file error code otherwise. */
int dav_delete_dir(const char *path);


/* Frees any resources held by props and finally frees props. */
void
dav_delete_props(dav_props *props);


/* Retrieves properties for the directory named by path and its
direct childs (depth 1) from the server.
The properties are returned as a linked list of dav_props. If successfull,
this list contains at least one entry (the directory itself; its name is
the empty string). The calling function is responsible for freeing the list
and all the strings included.
path : The absolute path of the directory with trailing slash.
*props : Will point to the list of properties on return. NULL in case of
an error.
return value : 0 on success; an appropriate file error code otherwise. */
int
dav_get_collection(const char *path, dav_props **props);


/* Fetches file path from the server, stores it in cache_path and updates
size, etag and mtime.
If etag and/or mtime are supplied, a conditional GET will be performed.
If the file has not been modified on the server, size, etag, mtime and
mime will not be changed.
If the GET request fails none of size, etag and mtime are changed.
cache_path : Name of the cache file to store the file in.
path : Absolute path of the file on the server.
size : Points to the size of the cached file and will be updated if a
new version of the file is retrieved.
etag : Points to the ETag string of the cached version. If a new
version of the file is retrieved this will be replaced by the
new ETag value. May be NULL or point to NULL.
mtime : Points to the Last-Modified value of the cached version. Will
be updated if a new version of the file is retrieved.
May be NULL.
mime : Points to the mime_type string of the cached version. Will
be updated by the value of the Content-Type header, if any.
May be NULL;
modified : Points to a flag that will be set 1 if the file cache_path
has been replaced by a new version. May be NULL.
return value : 0 on success; an appropriate file error code otherwise.
Not-Modified counts as success. */
int
dav_get_file(const char *path, const char *cache_path, off_t *size,
char **etag, time_t *mtime, char **mime, int *modified);


/* Returns the error string from the last WebDAV request.
Note: This will not be usefull in any case, because the last function
called may have done more then one request (e.g. an additional
lock discover. But it is usefull for dav_get_collection(). */
const char *
dav_get_webdav_error(void);


/* Tests for the existence of file path and uptdates etag, mtime and length.
In case of an error etag and mtime are not changed. If the server does not
send ETag or Last-Modified the corresponding value will not be changed.
path : absolute path of the file on the server.
etag : Points to the Etag; will be updated on success. May be NULL.
mtime : Points to mtime; will be updated on success. May be NULL.
length: Points to length; will be updated on success. May be NULL.
mime : Points to mime_type; will be updated on success. May be NULL.
return value : 0 if the file exists; an appropriate file error code
otherwise. */
int
dav_head(const char *path, char **etag, time_t *mtime, off_t *length,
char **mime);


/* Locks the file path on the server with an excluse write lock and updates
expire and exists. If a lock for path allready exists it will be refreshed.
On success expire will be updated to the time when the lock expires.
If the file does not yet exist and server creates a new file (as opposed to
creating a locked-null-resource) exists will be set to 1.
If the file is already locked, but not by this instance of davfs2, it will
try if the lock is from the same user using davfs2, and if so, to use this
lock.
If it can't get a lock it will return an appropriate error code and set
expire to 0.
If the session is initialized with the nolocks option, it does nothing,
but allways returns success and sets expire to 0.
path : absolute path of the file on the server.
expire : Points to the time when the lock expires. 0 if not locked.
Will be updated.
exists : Indicates whether the file exists on the server. If the server
responds with "201 CREATED", it will be set to 1.
return value : 0 on success; an appropriate file error code
otherwise. */
int
dav_lock(const char *path, time_t *expire, int *exists);


/* Refreshes the lock for file path and updates expire.
If no lock can be found for path expire is set to 0.
If it can't refresh the lock it will do nothing.
path : Absolute path of the file on the server.
expire : The time when the lock expires, will be updated. */
void dav_lock_refresh(const char *path, time_t *expire);


/* Creates a new collection on the server.
path : Absolute path of the new collection on the server.
return value : 0 on success; an appropriate file error code otherwise. */
int
dav_make_collection(const char *path);


/* Moves resource src to the new name/location dst.
src : Absolute path of the resource on the server.
dst : New absolute path of the resource on the server.
return value : 0 on success; an appropriate file error code otherwise. */
int
dav_move(const char *src, const char *dst);


/* Stores the contents of file cache_path on the server location path and
updates the value of exists, etag and mtime.
Before uploading the file it tests whether the file on the server has been
changed (compared to the values of exists, etag and mtime). If it has been
changed the file will *not* be uploaded and an error returned instead.
Sometimes a lock may be discovered during dav_put(). In this case expire
will be updated.
path : Absolute path of the file on the server.
cache_path : Name of the local file to be stored on the server.
exists : Indicates whether the file exists on the server. Used to check
for changes on the server. If the upload is successful it will
be set to 1.
etag : The value of ETag used to check for changes on the server.
Updated on success. May be NULL.
mtime : The Last_Modified value used to check for changes on the
server. Updated on success. May be NULL.
mime : The value of mime_type. Updated on successMay be NULL.
If a mime_type is set, the Content-Type header will be sent.
execute : if 1 set execute property, else no change of execute property.
return value : 0 on success; an appropriate file error code otherwise. */
int
dav_put(const char *path, const char *cache_path, int *exists, time_t *expire,
char **etag, time_t *mtime, char **mime, int execute);

/* Makes a PROPFIND request for path to get quota information (RFC 4331)
and places them in available and used. If quota information is not
available, an error is returned and available and used are not changed. */
int
dav_quota(const char *path, off_t *available, off_t *used);


/* Sets or resets the execute property of file path.
path : Absolute path of the file on the server.
set : boolean value; 0 reset execute property; 1 set execute property. */
int
dav_set_execute(const char *path, int set);


/* Tells webdav that no more terminal is available, so errors can only
* be logged. Before this function is invoced webdav tries to
* communicate with the user when problems occur. */
void
dav_set_no_terminal(void);


/* Releases the lock on file path on the serverand sets expire to 0.
path : Absolute path of the file on the server.
return value : 0 if no error occured; an appropriate file error code
otherwise. */
int
dav_unlock(const char *path, time_t *expire);


#endif /* DAV_WEBDAV_H */