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