first import
This commit is contained in:
commit
d12d77382e
90
AUTHORS
Normal file
90
AUTHORS
Normal 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
13
BUGS
Normal 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
675
COPYING
Normal 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
885
ChangeLog
Normal 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
88
FAQ
Normal 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
162
INSTALL
Normal 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
27
Makefile.am
Normal 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
245
NEWS
Normal 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
240
README
Normal 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
85
README.translators
Normal 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
77
THANKS
Normal 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
6
TODO
Normal 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
20
bootstrap
Executable 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
675
config/COPYING.davfs2
Normal 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
162
config/INSTALL.davfs2
Normal 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
170
config/davfs2.m4
Normal 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
1113
config/neon.m4
Normal file
File diff suppressed because it is too large
Load Diff
96
configure.ac
Normal file
96
configure.ac
Normal 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
40
etc/Makefile.am
Normal 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
72
etc/davfs2.conf
Normal 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
68
etc/secrets
Normal 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
54
man/Makefile.am
Normal 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
518
man/davfs2.conf.5
Normal 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
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
53
man/de/Makefile.am
Normal 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
1326
man/de/davfs2.conf.5.po
Normal file
File diff suppressed because it is too large
Load Diff
4
man/de/davfs2.conf.5.translator
Normal file
4
man/de/davfs2.conf.5.translator
Normal 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
1322
man/de/mount.davfs.8.po
Normal file
File diff suppressed because it is too large
Load Diff
4
man/de/mount.davfs.8.translator
Normal file
4
man/de/mount.davfs.8.translator
Normal 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
249
man/de/umount.davfs.8.po
Normal 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)"
|
4
man/de/umount.davfs.8.translator
Normal file
4
man/de/umount.davfs.8.translator
Normal 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
54
man/es/Makefile.am
Normal 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
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
542
man/mount.davfs.8
Normal 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
1075
man/mount.davfs.8.pot
Normal file
File diff suppressed because it is too large
Load Diff
33
man/po4a.conf
Normal file
33
man/po4a.conf
Normal 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
11
man/template.translator
Normal 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
94
man/umount.davfs.8
Normal 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
225
man/umount.davfs.8.pot
Normal 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
2
po/LINGUAS
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Set of available languages.
|
||||||
|
cs de
|
41
po/Makevars
Normal file
41
po/Makevars
Normal 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
8
po/POTFILES.in
Normal 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
843
po/cs.po
Normal 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
758
po/davfs2.pot
Normal 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
847
po/de.po
Normal 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
62
src/Makefile.am
Normal 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
3692
src/cache.c
Normal file
File diff suppressed because it is too large
Load Diff
428
src/cache.h
Normal file
428
src/cache.h
Normal 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
643
src/coda.h
Normal 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
810
src/dav_coda.c
Normal 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
1112
src/dav_fuse.c
Normal file
File diff suppressed because it is too large
Load Diff
193
src/defaults.h
Normal file
193
src/defaults.h
Normal 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
314
src/fuse_kernel.h
Normal 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
265
src/kernel_interface.c
Normal 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
96
src/kernel_interface.h
Normal 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
2538
src/mount_davfs.c
Normal file
File diff suppressed because it is too large
Load Diff
157
src/mount_davfs.h
Normal file
157
src/mount_davfs.h
Normal 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
212
src/umount_davfs.c
Normal 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
1915
src/webdav.c
Normal file
File diff suppressed because it is too large
Load Diff
278
src/webdav.h
Normal file
278
src/webdav.h
Normal 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 */
|
Loading…
Reference in New Issue
Block a user