diff --git a/config/gnulib-cache.m4 b/config/gnulib-cache.m4 index 94fbecf..f5ea0df 100644 --- a/config/gnulib-cache.m4 +++ b/config/gnulib-cache.m4 @@ -1,21 +1,33 @@ -# Copyright (C) 2002-2010 Free Software Foundation, Inc. +# Copyright (C) 2002-2012 Free Software Foundation, Inc. # -# This file is free software, distributed under the terms of the GNU -# General Public License. As a special exception to the GNU General -# Public License, this file may be distributed as part of a program -# that contains a configuration script generated by Autoconf, under +# This file 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 file 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 file. If not, see . +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the specification of how gnulib-tool is used. # It acts as a cache: It is written and read by gnulib-tool. -# In projects using CVS, this file is meant to be stored in CVS, -# like the configure.ac and various Makefile.am files. +# In projects that use version control, this file is meant to be put under +# version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: -# gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=config --po-base=glpo --doc-base=doc --tests-base=tests --aux-dir=config --no-libtool --macro-prefix=gl --po-domain=davfs2 canonicalize iconv_open rpmatch xalloc xstrndup xvasprintf +# gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=config --po-base=glpo --doc-base=doc --tests-base=tests --aux-dir=config --no-conditional-dependencies --no-libtool --macro-prefix=gl --po-domain=davfs2 canonicalize iconv_open rpmatch xalloc xstrndup xvasprintf # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([]) @@ -37,3 +49,4 @@ gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_MACRO_PREFIX([gl]) gl_PO_DOMAIN([davfs2]) +gl_WITNESS_C_DOMAIN([]) diff --git a/man/davfs2.conf.5 b/man/davfs2.conf.5 index fae0d6b..9a86b16 100644 --- a/man/davfs2.conf.5 +++ b/man/davfs2.conf.5 @@ -104,13 +104,6 @@ Default: @GROUP@ .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. diff --git a/man/davfs2.conf.5.pot b/man/davfs2.conf.5.pot index 6a9ac62..c1ac6de 100644 --- a/man/davfs2.conf.5.pot +++ b/man/davfs2.conf.5.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2012-02-01 18:51+0100\n" +"POT-Creation-Date: 2013-08-09 12:15+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -212,7 +212,7 @@ msgid "Default: @USER@" msgstr "" #. type: Plain text -#: davfs2.conf.5:96 davfs2.conf.5:106 davfs2.conf.5:135 davfs2.conf.5:144 +#: davfs2.conf.5:96 davfs2.conf.5:106 davfs2.conf.5:128 davfs2.conf.5:137 msgid "B" msgstr "" @@ -238,29 +238,11 @@ msgstr "" #. type: TP #: davfs2.conf.5:107 #, no-wrap -msgid "B" -msgstr "" - -#. type: Plain text -#: davfs2.conf.5:111 -msgid "" -"Which kernel file system to use, to integrate into the virtual file system. " -"Possible values are I and I." -msgstr "" - -#. type: Plain text -#: davfs2.conf.5:113 -msgid "Default: fuse" -msgstr "" - -#. type: TP -#: davfs2.conf.5:114 -#, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:119 +#: davfs2.conf.5:112 msgid "" "Size in KiByte of the buffer used to communicate with the kernel file " "system. Only usefull with I, where read and write operations may " @@ -268,24 +250,24 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:121 +#: davfs2.conf.5:114 msgid "Default: 16" msgstr "" #. type: SH -#: davfs2.conf.5:123 +#: davfs2.conf.5:116 #, no-wrap msgid "WebDAV Related Options" msgstr "" #. type: TP -#: davfs2.conf.5:125 +#: davfs2.conf.5:118 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:131 +#: davfs2.conf.5:124 msgid "" "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 " @@ -293,19 +275,19 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:133 davfs2.conf.5:212 davfs2.conf.5:219 davfs2.conf.5:297 -#: davfs2.conf.5:438 +#: davfs2.conf.5:126 davfs2.conf.5:205 davfs2.conf.5:212 davfs2.conf.5:290 +#: davfs2.conf.5:431 msgid "Default: 1" msgstr "" #. type: TP -#: davfs2.conf.5:136 +#: davfs2.conf.5:129 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:142 +#: davfs2.conf.5:135 msgid "" "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 " @@ -313,13 +295,13 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:145 +#: davfs2.conf.5:138 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:151 davfs2.conf.5:175 +#: davfs2.conf.5:144 davfs2.conf.5:168 msgid "" "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 " @@ -328,7 +310,7 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:157 +#: davfs2.conf.5:150 msgid "" "This option is useful when the certificate presented by the server cannot be " "verified using the system's data base of trusted certificate authorities " @@ -338,7 +320,7 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:162 +#: davfs2.conf.5:155 msgid "" "B Even if the server's certificate is trusted that does not mean it " "is accepted. Additionally the certificate's date must be valid and either " @@ -346,29 +328,29 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:163 +#: davfs2.conf.5:156 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:166 +#: davfs2.conf.5:159 msgid "Same as B but badly named." msgstr "" #. type: Plain text -#: davfs2.conf.5:168 +#: davfs2.conf.5:161 msgid "B" msgstr "" #. type: TP -#: davfs2.conf.5:169 +#: davfs2.conf.5:162 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:181 +#: davfs2.conf.5:174 msgid "" "Usefull when the server's certificate can't be verified or is even invalid, " "but B that you can trust this certificate. When the server " @@ -378,25 +360,25 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:183 +#: davfs2.conf.5:176 msgid "This is the preferred option for self signed server certificates." msgstr "" #. type: Plain text -#: davfs2.conf.5:186 +#: davfs2.conf.5:179 msgid "" "No other ways to verify the certificate will be tried and the certificate " "will not be checked for validity." msgstr "" #. type: TP -#: davfs2.conf.5:187 +#: davfs2.conf.5:180 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:194 +#: davfs2.conf.5:187 msgid "" "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 " @@ -406,13 +388,13 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:195 davfs2.conf.5:509 +#: davfs2.conf.5:188 davfs2.conf.5:502 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:200 +#: davfs2.conf.5:193 msgid "" "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 " @@ -420,25 +402,25 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:202 +#: davfs2.conf.5:195 msgid "Default: ~/.@PACKAGE@/@SECRETSFILE@" msgstr "" #. type: Plain text -#: davfs2.conf.5:205 +#: davfs2.conf.5:198 msgid "" "B The system wide secrets file " "is allways I<@SYS_CONF_DIR@/@SECRETSFILE@>." msgstr "" #. type: TP -#: davfs2.conf.5:206 +#: davfs2.conf.5:199 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:210 +#: davfs2.conf.5:203 msgid "" "Ask the user interactively for credentials and passwords if not found in the " "secretsfile. Ask the user if a servercert cannot be verified. 0 = no, 1 = " @@ -446,26 +428,26 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:213 +#: davfs2.conf.5:206 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:217 +#: davfs2.conf.5:210 msgid "" "Whether to lock files on the server when they are opened for writing. 0 = " "no, 1 = yes." msgstr "" #. type: TP -#: davfs2.conf.5:220 +#: davfs2.conf.5:213 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:225 +#: davfs2.conf.5:218 msgid "" "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 " @@ -473,36 +455,36 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:227 +#: davfs2.conf.5:220 msgid "Default: the username from the credentials" msgstr "" #. type: TP -#: davfs2.conf.5:228 +#: davfs2.conf.5:221 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:232 +#: davfs2.conf.5:225 msgid "" "How long in seconds locks should be valid, before the server removes them. " "The server may ignore this and set its own timeout value." msgstr "" #. type: Plain text -#: davfs2.conf.5:234 +#: davfs2.conf.5:227 msgid "Default: 1800" msgstr "" #. type: TP -#: davfs2.conf.5:235 +#: davfs2.conf.5:228 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:240 +#: davfs2.conf.5:233 msgid "" "That many seconds before the lock times out, B<@PROGRAM_NAME@> will try to " "refresh the lock. The value should be substantially greater than " @@ -510,18 +492,18 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:242 davfs2.conf.5:428 +#: davfs2.conf.5:235 davfs2.conf.5:421 msgid "Default: 60" msgstr "" #. type: TP -#: davfs2.conf.5:243 +#: davfs2.conf.5:236 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:249 +#: davfs2.conf.5:242 msgid "" "To avoid uploading big files that will be refused by the server, " "B<@PROGRAM_NAME@> uses the header I to get the o.k. " @@ -530,19 +512,19 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:251 davfs2.conf.5:259 davfs2.conf.5:277 davfs2.conf.5:287 -#: davfs2.conf.5:304 davfs2.conf.5:458 +#: davfs2.conf.5:244 davfs2.conf.5:252 davfs2.conf.5:270 davfs2.conf.5:280 +#: davfs2.conf.5:297 davfs2.conf.5:451 msgid "Default: 0" msgstr "" #. type: TP -#: davfs2.conf.5:252 +#: davfs2.conf.5:245 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:257 +#: davfs2.conf.5:250 msgid "" "Some servers do not handle If-Match and If-None-Match-headers correctly. " "This otion tells B<@PROGRAM_NAME@> to use HEAD instead of thes headers. 0 = " @@ -550,13 +532,13 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:260 +#: davfs2.conf.5:253 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:269 +#: davfs2.conf.5:262 msgid "" "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 " @@ -568,7 +550,7 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:273 +#: davfs2.conf.5:266 msgid "" "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 " @@ -576,18 +558,18 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:275 +#: davfs2.conf.5:268 msgid "0 = no, 1 = yes." msgstr "" #. type: TP -#: davfs2.conf.5:278 +#: davfs2.conf.5:271 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:285 +#: davfs2.conf.5:278 msgid "" "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 " @@ -596,13 +578,13 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:288 +#: davfs2.conf.5:281 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:295 +#: davfs2.conf.5:288 msgid "" "If option B is set: use HEAD-requests to check for existence " "or modification of a file to avoid unintended overwriting what somebody else " @@ -611,26 +593,26 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:298 +#: davfs2.conf.5:291 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:302 +#: davfs2.conf.5:295 msgid "" "Some servers send wrong information about their capabilities in the DAV-" "header. In this case the header should be ignored." msgstr "" #. type: TP -#: davfs2.conf.5:305 +#: davfs2.conf.5:298 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:311 +#: davfs2.conf.5:304 msgid "" "When extracting file names from the path component of the URL, " "B<@PROGRAM_NAME@> will assume they are encoded using this character set and " @@ -639,7 +621,7 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:319 +#: davfs2.conf.5:312 msgid "" "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 " @@ -651,18 +633,18 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:321 +#: davfs2.conf.5:314 msgid "Default: no character set conversion" msgstr "" #. type: TP -#: davfs2.conf.5:322 +#: davfs2.conf.5:315 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:328 +#: davfs2.conf.5:321 msgid "" "When creating a TCP connection to the server B<@PROGRAM_NAME@> will wait " "that many seconds for an answer before assuming an error. If a value of '0' " @@ -671,43 +653,43 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:331 +#: davfs2.conf.5:324 msgid "" "This parameter only takes effect if the version of neon in use (neon version " "E 0.26) and the OS support non-blocking I/O." msgstr "" #. type: Plain text -#: davfs2.conf.5:333 davfs2.conf.5:448 +#: davfs2.conf.5:326 davfs2.conf.5:441 msgid "Default: 10" msgstr "" #. type: TP -#: davfs2.conf.5:334 +#: davfs2.conf.5:327 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:338 +#: davfs2.conf.5:331 msgid "" "How long in seconds B<@PROGRAM_NAME@> will wait for an answer from the " "server before assuming an error." msgstr "" #. type: Plain text -#: davfs2.conf.5:340 davfs2.conf.5:348 +#: davfs2.conf.5:333 davfs2.conf.5:341 msgid "Default: 30" msgstr "" #. type: TP -#: davfs2.conf.5:341 +#: davfs2.conf.5:334 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:346 +#: davfs2.conf.5:339 msgid "" "When B<@PROGRAM_NAME@> can not reach the server it will try again after " "B seconds. For subsequent retries the interval will be increased up " @@ -715,36 +697,36 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:349 +#: davfs2.conf.5:342 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:352 +#: davfs2.conf.5:345 msgid "Maximum value of the retry interval." msgstr "" #. type: Plain text -#: davfs2.conf.5:354 +#: davfs2.conf.5:347 msgid "Default: 300" msgstr "" #. type: TP -#: davfs2.conf.5:355 +#: davfs2.conf.5:348 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:359 +#: davfs2.conf.5:352 msgid "" "When uploading a changed file fails temporarily B<@PROGRAM_NAME@> will retry " "with increasing intervals, but not more often than this." msgstr "" #. type: Plain text -#: davfs2.conf.5:364 +#: davfs2.conf.5:357 msgid "" "With a bad connection this will cause additional traffic. To reduce traffic " "caused by unsuccessful attempts option B can be set. But " @@ -752,18 +734,18 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:366 +#: davfs2.conf.5:359 msgid "Default: 15" msgstr "" #. type: TP -#: davfs2.conf.5:367 +#: davfs2.conf.5:360 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:373 +#: davfs2.conf.5:366 msgid "" "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 " @@ -772,17 +754,17 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:375 +#: davfs2.conf.5:368 msgid "add_header Translate F" msgstr "" #. type: Plain text -#: davfs2.conf.5:377 +#: davfs2.conf.5:370 msgid "B<@PROGRAM_NAME@> will add header \"Translate: F\" on all requests." msgstr "" #. type: Plain text -#: davfs2.conf.5:381 +#: davfs2.conf.5:374 msgid "" "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@/" @@ -790,19 +772,19 @@ msgid "" msgstr "" #. type: SH -#: davfs2.conf.5:383 +#: davfs2.conf.5:376 #, no-wrap msgid "Cache Related Options" msgstr "" #. type: TP -#: davfs2.conf.5:385 +#: davfs2.conf.5:378 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:390 +#: davfs2.conf.5:383 msgid "" "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 " @@ -810,25 +792,25 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:392 +#: davfs2.conf.5:385 msgid "Default: lost+found" msgstr "" #. type: TP -#: davfs2.conf.5:393 +#: davfs2.conf.5:386 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:397 +#: davfs2.conf.5:390 msgid "" "The directory where B<@PROGRAM_NAME@> will store cached files. For every " "mount point a subdirectory will be created." msgstr "" #. type: Plain text -#: davfs2.conf.5:401 +#: davfs2.conf.5:394 msgid "" "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 " @@ -836,18 +818,18 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:403 +#: davfs2.conf.5:396 msgid "Defaults: @SYS_CACHE_DIR@ and ~/.@PACKAGE@/cache" msgstr "" #. type: TP -#: davfs2.conf.5:404 +#: davfs2.conf.5:397 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:409 +#: davfs2.conf.5:402 msgid "" "The amount of disk space in MiByte that may be used. B<@PROGRAM_NAME@> will " "always take enough space to cache open files, ignoring this value if " @@ -855,18 +837,18 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:411 +#: davfs2.conf.5:404 msgid "Default: 50" msgstr "" #. type: TP -#: davfs2.conf.5:412 +#: davfs2.conf.5:405 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:418 +#: davfs2.conf.5:411 msgid "" "B<@PROGRAM_NAME@> 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 " @@ -875,18 +857,18 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:420 +#: davfs2.conf.5:413 msgid "Default: 1024" msgstr "" #. type: TP -#: davfs2.conf.5:421 +#: davfs2.conf.5:414 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:426 +#: davfs2.conf.5:419 msgid "" "After B<@PROGRAM_NAME@> has got information about files in a directory it " "considers it valid for this time in seconds. Note: This does not affect " @@ -894,13 +876,13 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:429 +#: davfs2.conf.5:422 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:436 +#: davfs2.conf.5:429 msgid "" "When a file or directory is opened by an application, B<@PROGRAM_NAME@> will " "first check the server for a newer version. But some applications do open " @@ -910,13 +892,13 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:439 +#: davfs2.conf.5:432 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:446 +#: davfs2.conf.5:439 msgid "" "When a file that has been changed is closed, B<@PROGRAM_NAME@> will wait " "that many seconds before it will upload it to the server. This will avoid " @@ -926,13 +908,13 @@ msgid "" msgstr "" #. type: TP -#: davfs2.conf.5:449 +#: davfs2.conf.5:442 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:456 +#: davfs2.conf.5:449 msgid "" "When a file is opened, B<@PROGRAM_NAME@> will have to check the server " "whether there is a newer version. Graphical User Interfaces tend to open " @@ -942,19 +924,19 @@ msgid "" msgstr "" #. type: SH -#: davfs2.conf.5:460 +#: davfs2.conf.5:453 #, no-wrap msgid "Debugging Options" msgstr "" #. type: TP -#: davfs2.conf.5:462 +#: davfs2.conf.5:455 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:470 +#: davfs2.conf.5:463 msgid "" "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 " @@ -965,7 +947,7 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:474 +#: davfs2.conf.5:467 msgid "" "Unlike other options, this option is cumulative. If there are several debug " "entries with different values, all of them will be applied. Also debug " @@ -974,171 +956,171 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:477 +#: davfs2.conf.5:470 msgid "" "B Debug messages let the log-files grow quickly. Never use this " "option in normal operation of mount.davfs." msgstr "" #. type: Plain text -#: davfs2.conf.5:479 +#: davfs2.conf.5:472 msgid "Default: no debugging messages" msgstr "" #. type: TP -#: davfs2.conf.5:480 +#: davfs2.conf.5:473 #, no-wrap msgid "B" msgstr "" #. type: TP -#: davfs2.conf.5:482 +#: davfs2.conf.5:475 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:485 +#: davfs2.conf.5:478 msgid "Command line and configuration options." msgstr "" #. type: TP -#: davfs2.conf.5:485 +#: davfs2.conf.5:478 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:488 +#: davfs2.conf.5:481 msgid "Upcalls from the kernel file system." msgstr "" #. type: TP -#: davfs2.conf.5:488 +#: davfs2.conf.5:481 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:491 +#: davfs2.conf.5:484 msgid "Cache operations like adding and removing nodes." msgstr "" #. type: TP -#: davfs2.conf.5:491 +#: davfs2.conf.5:484 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:494 +#: davfs2.conf.5:487 msgid "HTTP headers." msgstr "" #. type: TP -#: davfs2.conf.5:494 +#: davfs2.conf.5:487 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:497 +#: davfs2.conf.5:490 msgid "Parsing of the XML-body of WebDAV-requests." msgstr "" #. type: TP -#: davfs2.conf.5:497 +#: davfs2.conf.5:490 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:500 +#: davfs2.conf.5:493 msgid "Negotiation of authentication." msgstr "" #. type: TP -#: davfs2.conf.5:500 +#: davfs2.conf.5:493 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:503 +#: davfs2.conf.5:496 msgid "Information about locks." msgstr "" #. type: TP -#: davfs2.conf.5:503 +#: davfs2.conf.5:496 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:506 +#: davfs2.conf.5:499 msgid "TLS/SSL related stuff like certificates." msgstr "" #. type: TP -#: davfs2.conf.5:506 +#: davfs2.conf.5:499 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:509 +#: davfs2.conf.5:502 msgid "Complete body of HTTP-responses." msgstr "" #. type: Plain text -#: davfs2.conf.5:512 +#: davfs2.conf.5:505 msgid "" "Also print confidential information, which is usually omitted or obscured." msgstr "" #. type: TP -#: davfs2.conf.5:512 +#: davfs2.conf.5:505 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: davfs2.conf.5:515 +#: davfs2.conf.5:508 msgid "Includes config, kernel, cache and http." msgstr "" #. type: SH -#: davfs2.conf.5:518 mount.davfs.8:533 umount.davfs.8:79 +#: davfs2.conf.5:511 mount.davfs.8:533 umount.davfs.8:79 #, no-wrap msgid "AUTHORS" msgstr "" #. type: Plain text -#: davfs2.conf.5:522 +#: davfs2.conf.5:515 msgid "" "This man page was written by by Werner Baumann Ewerner." "baumann@onlinehome.deE." msgstr "" #. type: SH -#: davfs2.conf.5:524 mount.davfs.8:550 umount.davfs.8:84 +#: davfs2.conf.5:517 mount.davfs.8:550 umount.davfs.8:84 #, no-wrap msgid "DAVFS2 HOME" msgstr "" #. type: Plain text -#: davfs2.conf.5:527 mount.davfs.8:553 umount.davfs.8:87 +#: davfs2.conf.5:520 mount.davfs.8:553 umount.davfs.8:87 msgid "@PACKAGE_BUGREPORT@" msgstr "" #. type: SH -#: davfs2.conf.5:529 mount.davfs.8:555 umount.davfs.8:89 +#: davfs2.conf.5:522 mount.davfs.8:555 umount.davfs.8:89 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text -#: davfs2.conf.5:535 +#: davfs2.conf.5:528 msgid "" "B<@PROGRAM_NAME@>(8), B(8), B(8), B(8), " "B(5)" diff --git a/man/de/davfs2.conf.5.po b/man/de/davfs2.conf.5.po index 06a3a8e..0e928ff 100644 --- a/man/de/davfs2.conf.5.po +++ b/man/de/davfs2.conf.5.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: davfs2 1.5.0\n" -"POT-Creation-Date: 2012-02-01 18:51+0100\n" +"POT-Creation-Date: 2013-08-09 12:15+0300\n" "PO-Revision-Date: 2012-02-01 19:05+0100\n" "Last-Translator: Werner Baumann \n" "Language-Team: \n" @@ -279,7 +279,7 @@ msgstr "Voreingestellt: @USER@" # type: Plain text #. type: Plain text -#: davfs2.conf.5:96 davfs2.conf.5:106 davfs2.conf.5:135 davfs2.conf.5:144 +#: davfs2.conf.5:96 davfs2.conf.5:106 davfs2.conf.5:128 davfs2.conf.5:137 msgid "B" msgstr "" "B" @@ -314,35 +314,12 @@ msgstr "Voreingestellt: @GROUP@" #. type: TP #: davfs2.conf.5:107 #, no-wrap -msgid "B" -msgstr "B" - -# type: Plain text -#. type: Plain text -#: davfs2.conf.5:111 -msgid "" -"Which kernel file system to use, to integrate into the virtual file system. " -"Possible values are I and I." -msgstr "" -"Welches Kernel-Dateisystem zur Integration in das virtuelle Dateisystem " -"benutzt wird. Möglich sind I und I." - -# type: Plain text -#. type: Plain text -#: davfs2.conf.5:113 -msgid "Default: fuse" -msgstr "Voreingestellt: fuse" - -# type: TP -#. type: TP -#: davfs2.conf.5:114 -#, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:119 +#: davfs2.conf.5:112 msgid "" "Size in KiByte of the buffer used to communicate with the kernel file " "system. Only usefull with I, where read and write operations may " @@ -354,27 +331,27 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:121 +#: davfs2.conf.5:114 msgid "Default: 16" msgstr "Voreingestellt: 16" # type: SH #. type: SH -#: davfs2.conf.5:123 +#: davfs2.conf.5:116 #, no-wrap msgid "WebDAV Related Options" msgstr "WebDAV-Optionen" # type: TP #. type: TP -#: davfs2.conf.5:125 +#: davfs2.conf.5:118 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:131 +#: davfs2.conf.5:124 msgid "" "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 " @@ -387,21 +364,21 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:133 davfs2.conf.5:212 davfs2.conf.5:219 davfs2.conf.5:297 -#: davfs2.conf.5:438 +#: davfs2.conf.5:126 davfs2.conf.5:205 davfs2.conf.5:212 davfs2.conf.5:290 +#: davfs2.conf.5:431 msgid "Default: 1" msgstr "Voreingestellt: 1" # type: TP #. type: TP -#: davfs2.conf.5:136 +#: davfs2.conf.5:129 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:142 +#: davfs2.conf.5:135 msgid "" "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 " @@ -413,14 +390,14 @@ msgstr "" "I" #. type: TP -#: davfs2.conf.5:145 +#: davfs2.conf.5:138 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:151 davfs2.conf.5:175 +#: davfs2.conf.5:144 davfs2.conf.5:168 msgid "" "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 " @@ -433,7 +410,7 @@ msgstr "" "I<@SYS_CONF_DIR@/@CERTS_DIR@> gesucht." #. type: Plain text -#: davfs2.conf.5:157 +#: davfs2.conf.5:150 msgid "" "This option is useful when the certificate presented by the server cannot be " "verified using the system's data base of trusted certificate authorities " @@ -449,7 +426,7 @@ msgstr "" "(siehe auch B)." #. type: Plain text -#: davfs2.conf.5:162 +#: davfs2.conf.5:155 msgid "" "B Even if the server's certificate is trusted that does not mean it " "is accepted. Additionally the certificate's date must be valid and either " @@ -461,31 +438,31 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:163 +#: davfs2.conf.5:156 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: davfs2.conf.5:166 +#: davfs2.conf.5:159 msgid "Same as B but badly named." msgstr "Wie B aber mit falscher Bezeichnung." # type: TP #. type: Plain text -#: davfs2.conf.5:168 +#: davfs2.conf.5:161 msgid "B" msgstr "B" # type: TP #. type: TP -#: davfs2.conf.5:169 +#: davfs2.conf.5:162 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: davfs2.conf.5:181 +#: davfs2.conf.5:174 msgid "" "Usefull when the server's certificate can't be verified or is even invalid, " "but B that you can trust this certificate. When the server " @@ -499,13 +476,13 @@ msgstr "" "des Zertifikats ausweisen kann, wird die Verbindung aufgebaut. " #. type: Plain text -#: davfs2.conf.5:183 +#: davfs2.conf.5:176 msgid "This is the preferred option for self signed server certificates." msgstr "" "Dies ist die bevorzugte Option für selbst signierte Server Zertifikate." #. type: Plain text -#: davfs2.conf.5:186 +#: davfs2.conf.5:179 msgid "" "No other ways to verify the certificate will be tried and the certificate " "will not be checked for validity." @@ -515,14 +492,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:187 +#: davfs2.conf.5:180 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:194 +#: davfs2.conf.5:187 msgid "" "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 " @@ -538,14 +515,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:195 davfs2.conf.5:509 +#: davfs2.conf.5:188 davfs2.conf.5:502 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:200 +#: davfs2.conf.5:193 msgid "" "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 " @@ -558,13 +535,13 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:202 +#: davfs2.conf.5:195 msgid "Default: ~/.@PACKAGE@/@SECRETSFILE@" msgstr "Voreingestellt: ~/.@PACKAGE@/@SECRETSFILE@" # type: Plain text #. type: Plain text -#: davfs2.conf.5:205 +#: davfs2.conf.5:198 msgid "" "B The system wide secrets file " "is allways I<@SYS_CONF_DIR@/@SECRETSFILE@>." @@ -574,14 +551,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:206 +#: davfs2.conf.5:199 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:210 +#: davfs2.conf.5:203 msgid "" "Ask the user interactively for credentials and passwords if not found in the " "secretsfile. Ask the user if a servercert cannot be verified. 0 = no, 1 = " @@ -593,14 +570,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:213 +#: davfs2.conf.5:206 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:217 +#: davfs2.conf.5:210 msgid "" "Whether to lock files on the server when they are opened for writing. 0 = " "no, 1 = yes." @@ -610,14 +587,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:220 +#: davfs2.conf.5:213 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:225 +#: davfs2.conf.5:218 msgid "" "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 " @@ -630,20 +607,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:227 +#: davfs2.conf.5:220 msgid "Default: the username from the credentials" msgstr "Voreingestellt: der Benutzername aus den Zugangsdaten" # type: TP #. type: TP -#: davfs2.conf.5:228 +#: davfs2.conf.5:221 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:232 +#: davfs2.conf.5:225 msgid "" "How long in seconds locks should be valid, before the server removes them. " "The server may ignore this and set its own timeout value." @@ -653,20 +630,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:234 +#: davfs2.conf.5:227 msgid "Default: 1800" msgstr "Voreingestellt: 1800" # type: TP #. type: TP -#: davfs2.conf.5:235 +#: davfs2.conf.5:228 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:240 +#: davfs2.conf.5:233 msgid "" "That many seconds before the lock times out, B<@PROGRAM_NAME@> will try to " "refresh the lock. The value should be substantially greater than " @@ -677,20 +654,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:242 davfs2.conf.5:428 +#: davfs2.conf.5:235 davfs2.conf.5:421 msgid "Default: 60" msgstr "Voreingestellt: 60" # type: TP #. type: TP -#: davfs2.conf.5:243 +#: davfs2.conf.5:236 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:249 +#: davfs2.conf.5:242 msgid "" "To avoid uploading big files that will be refused by the server, " "B<@PROGRAM_NAME@> uses the header I to get the o.k. " @@ -704,21 +681,21 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:251 davfs2.conf.5:259 davfs2.conf.5:277 davfs2.conf.5:287 -#: davfs2.conf.5:304 davfs2.conf.5:458 +#: davfs2.conf.5:244 davfs2.conf.5:252 davfs2.conf.5:270 davfs2.conf.5:280 +#: davfs2.conf.5:297 davfs2.conf.5:451 msgid "Default: 0" msgstr "Voreingestellt: 0" # type: TP #. type: TP -#: davfs2.conf.5:252 +#: davfs2.conf.5:245 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:257 +#: davfs2.conf.5:250 msgid "" "Some servers do not handle If-Match and If-None-Match-headers correctly. " "This otion tells B<@PROGRAM_NAME@> to use HEAD instead of thes headers. 0 = " @@ -730,14 +707,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:260 +#: davfs2.conf.5:253 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:269 +#: davfs2.conf.5:262 msgid "" "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 " @@ -758,7 +735,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:273 +#: davfs2.conf.5:266 msgid "" "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 " @@ -771,20 +748,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:275 +#: davfs2.conf.5:268 msgid "0 = no, 1 = yes." msgstr "0 = nein, 1 = ja." # type: TP #. type: TP -#: davfs2.conf.5:278 +#: davfs2.conf.5:271 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:285 +#: davfs2.conf.5:278 msgid "" "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 " @@ -798,14 +775,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:288 +#: davfs2.conf.5:281 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:295 +#: davfs2.conf.5:288 msgid "" "If option B is set: use HEAD-requests to check for existence " "or modification of a file to avoid unintended overwriting what somebody else " @@ -820,14 +797,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:298 +#: davfs2.conf.5:291 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:302 +#: davfs2.conf.5:295 msgid "" "Some servers send wrong information about their capabilities in the DAV-" "header. In this case the header should be ignored." @@ -837,14 +814,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:305 +#: davfs2.conf.5:298 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:311 +#: davfs2.conf.5:304 msgid "" "When extracting file names from the path component of the URL, " "B<@PROGRAM_NAME@> will assume they are encoded using this character set and " @@ -859,7 +836,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:319 +#: davfs2.conf.5:312 msgid "" "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 " @@ -882,20 +859,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:321 +#: davfs2.conf.5:314 msgid "Default: no character set conversion" msgstr "Voreingestellt: die Kodierung wird nicht umgewandelt" # type: TP #. type: TP -#: davfs2.conf.5:322 +#: davfs2.conf.5:315 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:328 +#: davfs2.conf.5:321 msgid "" "When creating a TCP connection to the server B<@PROGRAM_NAME@> will wait " "that many seconds for an answer before assuming an error. If a value of '0' " @@ -908,7 +885,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:331 +#: davfs2.conf.5:324 msgid "" "This parameter only takes effect if the version of neon in use (neon version " "E 0.26) and the OS support non-blocking I/O." @@ -919,20 +896,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:333 davfs2.conf.5:448 +#: davfs2.conf.5:326 davfs2.conf.5:441 msgid "Default: 10" msgstr "Voreingestellt: 10" # type: TP #. type: TP -#: davfs2.conf.5:334 +#: davfs2.conf.5:327 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:338 +#: davfs2.conf.5:331 msgid "" "How long in seconds B<@PROGRAM_NAME@> will wait for an answer from the " "server before assuming an error." @@ -942,20 +919,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:340 davfs2.conf.5:348 +#: davfs2.conf.5:333 davfs2.conf.5:341 msgid "Default: 30" msgstr "Voreingestellt: 30" # type: TP #. type: TP -#: davfs2.conf.5:341 +#: davfs2.conf.5:334 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:346 +#: davfs2.conf.5:339 msgid "" "When B<@PROGRAM_NAME@> can not reach the server it will try again after " "B seconds. For subsequent retries the interval will be increased up " @@ -967,33 +944,33 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:349 +#: davfs2.conf.5:342 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:352 +#: davfs2.conf.5:345 msgid "Maximum value of the retry interval." msgstr "Maximales retry-Intervall." # type: Plain text #. type: Plain text -#: davfs2.conf.5:354 +#: davfs2.conf.5:347 msgid "Default: 300" msgstr "Voreingestellt: 300" # type: TP #. type: TP -#: davfs2.conf.5:355 +#: davfs2.conf.5:348 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:359 +#: davfs2.conf.5:352 msgid "" "When uploading a changed file fails temporarily B<@PROGRAM_NAME@> will retry " "with increasing intervals, but not more often than this." @@ -1004,7 +981,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:364 +#: davfs2.conf.5:357 msgid "" "With a bad connection this will cause additional traffic. To reduce traffic " "caused by unsuccessful attempts option B can be set. But " @@ -1017,20 +994,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:366 +#: davfs2.conf.5:359 msgid "Default: 15" msgstr "Voreingestellt: 15" # type: TP #. type: TP -#: davfs2.conf.5:367 +#: davfs2.conf.5:360 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:373 +#: davfs2.conf.5:366 msgid "" "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 " @@ -1045,13 +1022,13 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:375 +#: davfs2.conf.5:368 msgid "add_header Translate F" msgstr "add_header Translate F" # type: Plain text #. type: Plain text -#: davfs2.conf.5:377 +#: davfs2.conf.5:370 msgid "B<@PROGRAM_NAME@> will add header \"Translate: F\" on all requests." msgstr "" "B<@PROGRAM_NAME@> sendet nun den Header \"Translate: F\" bei allen Anfragen " @@ -1059,7 +1036,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:381 +#: davfs2.conf.5:374 msgid "" "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@/" @@ -1071,21 +1048,21 @@ msgstr "" # type: SH #. type: SH -#: davfs2.conf.5:383 +#: davfs2.conf.5:376 #, no-wrap msgid "Cache Related Options" msgstr "Cache-Optionen" # type: TP #. type: TP -#: davfs2.conf.5:385 +#: davfs2.conf.5:378 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:390 +#: davfs2.conf.5:383 msgid "" "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 " @@ -1097,20 +1074,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:392 +#: davfs2.conf.5:385 msgid "Default: lost+found" msgstr "Voreingestellt: lost+found" # type: TP #. type: TP -#: davfs2.conf.5:393 +#: davfs2.conf.5:386 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:397 +#: davfs2.conf.5:390 msgid "" "The directory where B<@PROGRAM_NAME@> will store cached files. For every " "mount point a subdirectory will be created." @@ -1120,7 +1097,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:401 +#: davfs2.conf.5:394 msgid "" "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 " @@ -1132,20 +1109,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:403 +#: davfs2.conf.5:396 msgid "Defaults: @SYS_CACHE_DIR@ and ~/.@PACKAGE@/cache" msgstr "Voreingestellt: @SYS_CACHE_DIR@ und ~/.@PACKAGE@/cache" # type: TP #. type: TP -#: davfs2.conf.5:404 +#: davfs2.conf.5:397 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:409 +#: davfs2.conf.5:402 msgid "" "The amount of disk space in MiByte that may be used. B<@PROGRAM_NAME@> will " "always take enough space to cache open files, ignoring this value if " @@ -1157,20 +1134,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:411 +#: davfs2.conf.5:404 msgid "Default: 50" msgstr "Voreingestellt: 50" # type: TP #. type: TP -#: davfs2.conf.5:412 +#: davfs2.conf.5:405 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:418 +#: davfs2.conf.5:411 msgid "" "B<@PROGRAM_NAME@> 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 " @@ -1184,20 +1161,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:420 +#: davfs2.conf.5:413 msgid "Default: 1024" msgstr "Voreingestellt: 1024" # type: TP #. type: TP -#: davfs2.conf.5:421 +#: davfs2.conf.5:414 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:426 +#: davfs2.conf.5:419 msgid "" "After B<@PROGRAM_NAME@> has got information about files in a directory it " "considers it valid for this time in seconds. Note: This does not affect " @@ -1209,14 +1186,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:429 +#: davfs2.conf.5:422 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:436 +#: davfs2.conf.5:429 msgid "" "When a file or directory is opened by an application, B<@PROGRAM_NAME@> will " "first check the server for a newer version. But some applications do open " @@ -1232,14 +1209,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:439 +#: davfs2.conf.5:432 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:446 +#: davfs2.conf.5:439 msgid "" "When a file that has been changed is closed, B<@PROGRAM_NAME@> will wait " "that many seconds before it will upload it to the server. This will avoid " @@ -1255,14 +1232,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:449 +#: davfs2.conf.5:442 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:456 +#: davfs2.conf.5:449 msgid "" "When a file is opened, B<@PROGRAM_NAME@> will have to check the server " "whether there is a newer version. Graphical User Interfaces tend to open " @@ -1279,21 +1256,21 @@ msgstr "" # type: SH #. type: SH -#: davfs2.conf.5:460 +#: davfs2.conf.5:453 #, no-wrap msgid "Debugging Options" msgstr "Debugging Optionen" # type: TP #. type: TP -#: davfs2.conf.5:462 +#: davfs2.conf.5:455 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:470 +#: davfs2.conf.5:463 msgid "" "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 " @@ -1311,7 +1288,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:474 +#: davfs2.conf.5:467 msgid "" "Unlike other options, this option is cumulative. If there are several debug " "entries with different values, all of them will be applied. Also debug " @@ -1325,7 +1302,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:477 +#: davfs2.conf.5:470 msgid "" "B Debug messages let the log-files grow quickly. Never use this " "option in normal operation of mount.davfs." @@ -1335,53 +1312,53 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:479 +#: davfs2.conf.5:472 msgid "Default: no debugging messages" msgstr "Voreinstellung: keine Debug-Meldungen." # type: Plain text #. type: TP -#: davfs2.conf.5:480 +#: davfs2.conf.5:473 #, no-wrap msgid "B" msgstr "B" # type: TP #. type: TP -#: davfs2.conf.5:482 +#: davfs2.conf.5:475 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:485 +#: davfs2.conf.5:478 msgid "Command line and configuration options." msgstr "Kommando-Zeile und Kofigurationsoptionen." # type: TP #. type: TP -#: davfs2.conf.5:485 +#: davfs2.conf.5:478 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:488 +#: davfs2.conf.5:481 msgid "Upcalls from the kernel file system." msgstr "Anfragen vom Kernel-Dateisystem." # type: TP #. type: TP -#: davfs2.conf.5:488 +#: davfs2.conf.5:481 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:491 +#: davfs2.conf.5:484 msgid "Cache operations like adding and removing nodes." msgstr "" "Cache-Operationen wie das Erzeugen und Löschen von Dateien und " @@ -1389,85 +1366,85 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:491 +#: davfs2.conf.5:484 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:494 +#: davfs2.conf.5:487 msgid "HTTP headers." msgstr "HTTP-Header." # type: TP #. type: TP -#: davfs2.conf.5:494 +#: davfs2.conf.5:487 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:497 +#: davfs2.conf.5:490 msgid "Parsing of the XML-body of WebDAV-requests." msgstr "Analysieren von XML-Daten in WebDAV-Anfragen." # type: TP #. type: TP -#: davfs2.conf.5:497 +#: davfs2.conf.5:490 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:500 +#: davfs2.conf.5:493 msgid "Negotiation of authentication." msgstr "Aushandeln der Authentifizierung." # type: TP #. type: TP -#: davfs2.conf.5:500 +#: davfs2.conf.5:493 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:503 +#: davfs2.conf.5:496 msgid "Information about locks." msgstr "Informationen über Sperren." # type: TP #. type: TP -#: davfs2.conf.5:503 +#: davfs2.conf.5:496 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:506 +#: davfs2.conf.5:499 msgid "TLS/SSL related stuff like certificates." msgstr "TLS/SSL-Informatinen, z.B. Zertifikate." # type: TP #. type: TP -#: davfs2.conf.5:506 +#: davfs2.conf.5:499 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:509 +#: davfs2.conf.5:502 msgid "Complete body of HTTP-responses." msgstr "Der komplette Datenteil von HTTP-Antworten." # type: Plain text #. type: Plain text -#: davfs2.conf.5:512 +#: davfs2.conf.5:505 msgid "" "Also print confidential information, which is usually omitted or obscured." msgstr "" @@ -1475,27 +1452,27 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:512 +#: davfs2.conf.5:505 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:515 +#: davfs2.conf.5:508 msgid "Includes config, kernel, cache and http." msgstr "Beinhaltet config, kernel, cache und http." # type: SH #. type: SH -#: davfs2.conf.5:518 mount.davfs.8:533 umount.davfs.8:79 +#: davfs2.conf.5:511 mount.davfs.8:533 umount.davfs.8:79 #, no-wrap msgid "AUTHORS" msgstr "AUTOREN" # type: Plain text #. type: Plain text -#: davfs2.conf.5:522 +#: davfs2.conf.5:515 msgid "" "This man page was written by by Werner Baumann Ewerner." "baumann@onlinehome.deE." @@ -1505,27 +1482,27 @@ msgstr "" # type: SH #. type: SH -#: davfs2.conf.5:524 mount.davfs.8:550 umount.davfs.8:84 +#: davfs2.conf.5:517 mount.davfs.8:550 umount.davfs.8:84 #, no-wrap msgid "DAVFS2 HOME" msgstr "DAVFS2 HOME" # type: TH #. type: Plain text -#: davfs2.conf.5:527 mount.davfs.8:553 umount.davfs.8:87 +#: davfs2.conf.5:520 mount.davfs.8:553 umount.davfs.8:87 msgid "@PACKAGE_BUGREPORT@" msgstr "@PACKAGE_BUGREPORT@" # type: SH #. type: SH -#: davfs2.conf.5:529 mount.davfs.8:555 umount.davfs.8:89 +#: davfs2.conf.5:522 mount.davfs.8:555 umount.davfs.8:89 #, no-wrap msgid "SEE ALSO" msgstr "SIEHE AUCH" # type: Plain text #. type: Plain text -#: davfs2.conf.5:535 +#: davfs2.conf.5:528 msgid "" "B<@PROGRAM_NAME@>(8), B(8), B(8), B(8), " "B(5)" diff --git a/man/de/mount.davfs.8.po b/man/de/mount.davfs.8.po index 9c93e33..e3d96a6 100644 --- a/man/de/mount.davfs.8.po +++ b/man/de/mount.davfs.8.po @@ -1,13 +1,13 @@ # #-#-#-#-# mount.davfs.8.po (davfs2) #-#-#-#-# # German translation of mount.davfs man page. -# Copyright (C) 2007 Werner Baumann +# Copyright (C) 2007, 2013 Werner Baumann # Werner Baumann , 2007. # msgid "" msgstr "" "Project-Id-Version: davfs2 1.4.0\n" -"POT-Creation-Date: 2012-03-18 12:02+0100\n" -"PO-Revision-Date: 2012-03-18 12:03+0100\n" +"POT-Creation-Date: 2013-08-09 12:15+0300\n" +"PO-Revision-Date: 2013-08-09 13:03+0100\n" "Last-Translator: Werner Baumann \n" "Language-Team: \n" "Language: \n" @@ -38,27 +38,27 @@ msgstr "BESCHREIBUNG" # type: SH #. type: SH -#: davfs2.conf.5:518 mount.davfs.8:533 umount.davfs.8:79 +#: davfs2.conf.5:511 mount.davfs.8:533 umount.davfs.8:79 #, no-wrap msgid "AUTHORS" msgstr "AUTOREN" # type: SH #. type: SH -#: davfs2.conf.5:524 mount.davfs.8:550 umount.davfs.8:84 +#: davfs2.conf.5:517 mount.davfs.8:550 umount.davfs.8:84 #, no-wrap msgid "DAVFS2 HOME" msgstr "DAVFS2 HOME" # type: TH #. type: Plain text -#: davfs2.conf.5:527 mount.davfs.8:553 umount.davfs.8:87 +#: davfs2.conf.5:520 mount.davfs.8:553 umount.davfs.8:87 msgid "@PACKAGE_BUGREPORT@" msgstr "@PACKAGE_BUGREPORT@" # type: SH #. type: SH -#: davfs2.conf.5:529 mount.davfs.8:555 umount.davfs.8:89 +#: davfs2.conf.5:522 mount.davfs.8:555 umount.davfs.8:89 #, no-wrap msgid "SEE ALSO" msgstr "SIEHE AUCH" @@ -157,13 +157,13 @@ msgstr "" msgid "" "B<@PACKAGE@> supports B (if the neon library supports it) and " "proxies. B<@PROGRAM_NAME@> 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." +"the virtual file system by using the fuse kernel files system. Currently " +"FUSE_KERNEL_VERSION 7 is supported." msgstr "" "B<@PACKAGE@> unterstützt B (falls die Neon-Bibliothek es " -"unterstützt) und Verbindungen über einen Proxy. Es wird über das coda oder " -"das fuse Kernel-Dateisystem in das virtuelle Dateisystem eingebunden. " -"Derzeit werden CODA_KERNEL_VERSION 3 und FUSE_KERNEL_VERSION 7 unterstützt." +"unterstützt) und Verbindungen über einen Proxy. Es wird über das fuse Kernel-" +"Dateisystem in das virtuelle Dateisystem eingebunden. Derzeit wird die " +"FUSE_KERNEL_VERSION 7 unterstützt." # type: Plain text #. type: Plain text diff --git a/man/es/davfs2.conf.5.po b/man/es/davfs2.conf.5.po index dffc8f8..8e0b09a 100644 --- a/man/es/davfs2.conf.5.po +++ b/man/es/davfs2.conf.5.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: davfs2.conf.5\n" -"POT-Creation-Date: 2012-02-01 18:51+0100\n" +"POT-Creation-Date: 2013-08-09 12:15+0300\n" "PO-Revision-Date: 2007-04-26 01:24-0300\n" "Last-Translator: Luciano Bello \n" "Language-Team: Español \n" @@ -281,7 +281,7 @@ msgstr "Predeterminado: @USER@" # type: Plain text #. type: Plain text -#: davfs2.conf.5:96 davfs2.conf.5:106 davfs2.conf.5:135 davfs2.conf.5:144 +#: davfs2.conf.5:96 davfs2.conf.5:106 davfs2.conf.5:128 davfs2.conf.5:137 msgid "B" msgstr "B" @@ -315,35 +315,12 @@ msgstr "Predeterminado: @GROUP@" #. type: TP #: davfs2.conf.5:107 #, no-wrap -msgid "B" -msgstr "B" - -# type: Plain text -#. type: Plain text -#: davfs2.conf.5:111 -msgid "" -"Which kernel file system to use, to integrate into the virtual file system. " -"Possible values are I and I." -msgstr "" -"Qué sistema de archivos del kernel utilizar para integrar con el sistema de " -"archivos virtual. Los posibles valores son I y I." - -# type: Plain text -#. type: Plain text -#: davfs2.conf.5:113 -msgid "Default: fuse" -msgstr "Predeterminado: fuse" - -# type: TP -#. type: TP -#: davfs2.conf.5:114 -#, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:119 +#: davfs2.conf.5:112 msgid "" "Size in KiByte of the buffer used to communicate with the kernel file " "system. Only usefull with I, where read and write operations may " @@ -355,27 +332,27 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:121 +#: davfs2.conf.5:114 msgid "Default: 16" msgstr "Predeterminado: 16" # type: SH #. type: SH -#: davfs2.conf.5:123 +#: davfs2.conf.5:116 #, no-wrap msgid "WebDAV Related Options" msgstr "Opciones Relacionadas con WebDAV" # type: TP #. type: TP -#: davfs2.conf.5:125 +#: davfs2.conf.5:118 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:131 +#: davfs2.conf.5:124 #, fuzzy msgid "" "Whether to use a proxy to connect to the WebDAV server. 0 = no, 1 = yes. If " @@ -388,21 +365,21 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:133 davfs2.conf.5:212 davfs2.conf.5:219 davfs2.conf.5:297 -#: davfs2.conf.5:438 +#: davfs2.conf.5:126 davfs2.conf.5:205 davfs2.conf.5:212 davfs2.conf.5:290 +#: davfs2.conf.5:431 msgid "Default: 1" msgstr "Predeterminado: 1" # type: TP #. type: TP -#: davfs2.conf.5:136 +#: davfs2.conf.5:129 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:142 +#: davfs2.conf.5:135 msgid "" "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 " @@ -414,14 +391,14 @@ msgstr "" "I" #. type: TP -#: davfs2.conf.5:145 +#: davfs2.conf.5:138 #, no-wrap msgid "B" msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:151 davfs2.conf.5:175 +#: davfs2.conf.5:144 davfs2.conf.5:168 #, fuzzy msgid "" "Name of a certificate file in PEM format. The name of the file may be given " @@ -436,7 +413,7 @@ msgstr "" "I<@SYS_CONF_DIR@/@CERTS_DIR@/@CLICERTS_DIR@> serán buscados." #. type: Plain text -#: davfs2.conf.5:157 +#: davfs2.conf.5:150 msgid "" "This option is useful when the certificate presented by the server cannot be " "verified using the system's data base of trusted certificate authorities " @@ -446,7 +423,7 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:162 +#: davfs2.conf.5:155 msgid "" "B Even if the server's certificate is trusted that does not mean it " "is accepted. Additionally the certificate's date must be valid and either " @@ -455,31 +432,31 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:163 +#: davfs2.conf.5:156 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: davfs2.conf.5:166 +#: davfs2.conf.5:159 msgid "Same as B but badly named." msgstr "" # type: TP #. type: Plain text -#: davfs2.conf.5:168 +#: davfs2.conf.5:161 msgid "B" msgstr "B" # type: TP #. type: TP -#: davfs2.conf.5:169 +#: davfs2.conf.5:162 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: davfs2.conf.5:181 +#: davfs2.conf.5:174 msgid "" "Usefull when the server's certificate can't be verified or is even invalid, " "but B that you can trust this certificate. When the server " @@ -489,12 +466,12 @@ msgid "" msgstr "" #. type: Plain text -#: davfs2.conf.5:183 +#: davfs2.conf.5:176 msgid "This is the preferred option for self signed server certificates." msgstr "" #. type: Plain text -#: davfs2.conf.5:186 +#: davfs2.conf.5:179 msgid "" "No other ways to verify the certificate will be tried and the certificate " "will not be checked for validity." @@ -502,14 +479,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:187 +#: davfs2.conf.5:180 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:194 +#: davfs2.conf.5:187 msgid "" "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 " @@ -525,14 +502,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:195 davfs2.conf.5:509 +#: davfs2.conf.5:188 davfs2.conf.5:502 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:200 +#: davfs2.conf.5:193 msgid "" "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 " @@ -545,13 +522,13 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:202 +#: davfs2.conf.5:195 msgid "Default: ~/.@PACKAGE@/@SECRETSFILE@" msgstr "Predeterminado: ~/.@PACKAGE@/@SECRETSFILE@" # type: Plain text #. type: Plain text -#: davfs2.conf.5:205 +#: davfs2.conf.5:198 msgid "" "B The system wide secrets file " "is allways I<@SYS_CONF_DIR@/@SECRETSFILE@>." @@ -562,14 +539,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:206 +#: davfs2.conf.5:199 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:210 +#: davfs2.conf.5:203 #, fuzzy msgid "" "Ask the user interactively for credentials and passwords if not found in the " @@ -581,14 +558,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:213 +#: davfs2.conf.5:206 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:217 +#: davfs2.conf.5:210 msgid "" "Whether to lock files on the server when they are opened for writing. 0 = " "no, 1 = yes." @@ -598,14 +575,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:220 +#: davfs2.conf.5:213 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:225 +#: davfs2.conf.5:218 msgid "" "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 " @@ -617,20 +594,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:227 +#: davfs2.conf.5:220 msgid "Default: the username from the credentials" msgstr "Predeterminado: el nombre de usuario utilizado en las credenciales" # type: TP #. type: TP -#: davfs2.conf.5:228 +#: davfs2.conf.5:221 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:232 +#: davfs2.conf.5:225 msgid "" "How long in seconds locks should be valid, before the server removes them. " "The server may ignore this and set its own timeout value." @@ -641,20 +618,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:234 +#: davfs2.conf.5:227 msgid "Default: 1800" msgstr "Predeterminado: 1800" # type: TP #. type: TP -#: davfs2.conf.5:235 +#: davfs2.conf.5:228 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:240 +#: davfs2.conf.5:233 msgid "" "That many seconds before the lock times out, B<@PROGRAM_NAME@> will try to " "refresh the lock. The value should be substantially greater than " @@ -666,20 +643,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:242 davfs2.conf.5:428 +#: davfs2.conf.5:235 davfs2.conf.5:421 msgid "Default: 60" msgstr "Predeterminado: 60" # type: TP #. type: TP -#: davfs2.conf.5:243 +#: davfs2.conf.5:236 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:249 +#: davfs2.conf.5:242 msgid "" "To avoid uploading big files that will be refused by the server, " "B<@PROGRAM_NAME@> uses the header I to get the o.k. " @@ -693,21 +670,21 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:251 davfs2.conf.5:259 davfs2.conf.5:277 davfs2.conf.5:287 -#: davfs2.conf.5:304 davfs2.conf.5:458 +#: davfs2.conf.5:244 davfs2.conf.5:252 davfs2.conf.5:270 davfs2.conf.5:280 +#: davfs2.conf.5:297 davfs2.conf.5:451 msgid "Default: 0" msgstr "Predeterminado: 0" # type: TP #. type: TP -#: davfs2.conf.5:252 +#: davfs2.conf.5:245 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:257 +#: davfs2.conf.5:250 msgid "" "Some servers do not handle If-Match and If-None-Match-headers correctly. " "This otion tells B<@PROGRAM_NAME@> to use HEAD instead of thes headers. 0 = " @@ -716,14 +693,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:260 +#: davfs2.conf.5:253 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:269 +#: davfs2.conf.5:262 msgid "" "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 " @@ -736,7 +713,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:273 +#: davfs2.conf.5:266 msgid "" "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 " @@ -745,20 +722,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:275 +#: davfs2.conf.5:268 msgid "0 = no, 1 = yes." msgstr "0 = no, 1 = sí." # type: TP #. type: TP -#: davfs2.conf.5:278 +#: davfs2.conf.5:271 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:285 +#: davfs2.conf.5:278 msgid "" "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 " @@ -768,14 +745,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:288 +#: davfs2.conf.5:281 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:295 +#: davfs2.conf.5:288 msgid "" "If option B is set: use HEAD-requests to check for existence " "or modification of a file to avoid unintended overwriting what somebody else " @@ -785,14 +762,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:298 +#: davfs2.conf.5:291 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:302 +#: davfs2.conf.5:295 msgid "" "Some servers send wrong information about their capabilities in the DAV-" "header. In this case the header should be ignored." @@ -800,14 +777,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:305 +#: davfs2.conf.5:298 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:311 +#: davfs2.conf.5:304 msgid "" "When extracting file names from the path component of the URL, " "B<@PROGRAM_NAME@> will assume they are encoded using this character set and " @@ -822,7 +799,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:319 +#: davfs2.conf.5:312 msgid "" "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 " @@ -843,20 +820,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:321 +#: davfs2.conf.5:314 msgid "Default: no character set conversion" msgstr "Predeterminado: no convertir el mapa de caracteres" # type: TP #. type: TP -#: davfs2.conf.5:322 +#: davfs2.conf.5:315 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:328 +#: davfs2.conf.5:321 msgid "" "When creating a TCP connection to the server B<@PROGRAM_NAME@> will wait " "that many seconds for an answer before assuming an error. If a value of '0' " @@ -866,7 +843,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:331 +#: davfs2.conf.5:324 msgid "" "This parameter only takes effect if the version of neon in use (neon version " "E 0.26) and the OS support non-blocking I/O." @@ -874,20 +851,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:333 davfs2.conf.5:448 +#: davfs2.conf.5:326 davfs2.conf.5:441 msgid "Default: 10" msgstr "Predeterminado: 10" # type: TP #. type: TP -#: davfs2.conf.5:334 +#: davfs2.conf.5:327 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:338 +#: davfs2.conf.5:331 msgid "" "How long in seconds B<@PROGRAM_NAME@> will wait for an answer from the " "server before assuming an error." @@ -897,20 +874,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:340 davfs2.conf.5:348 +#: davfs2.conf.5:333 davfs2.conf.5:341 msgid "Default: 30" msgstr "Predeterminado: 30" # type: TP #. type: TP -#: davfs2.conf.5:341 +#: davfs2.conf.5:334 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:346 +#: davfs2.conf.5:339 msgid "" "When B<@PROGRAM_NAME@> can not reach the server it will try again after " "B seconds. For subsequent retries the interval will be increased up " @@ -922,33 +899,33 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:349 +#: davfs2.conf.5:342 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:352 +#: davfs2.conf.5:345 msgid "Maximum value of the retry interval." msgstr "Máximo valor para el intervalo de reintento." # type: Plain text #. type: Plain text -#: davfs2.conf.5:354 +#: davfs2.conf.5:347 msgid "Default: 300" msgstr "Predeterminado: 300" # type: TP #. type: TP -#: davfs2.conf.5:355 +#: davfs2.conf.5:348 #, no-wrap msgid "B" msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:359 +#: davfs2.conf.5:352 msgid "" "When uploading a changed file fails temporarily B<@PROGRAM_NAME@> will retry " "with increasing intervals, but not more often than this." @@ -956,7 +933,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:364 +#: davfs2.conf.5:357 msgid "" "With a bad connection this will cause additional traffic. To reduce traffic " "caused by unsuccessful attempts option B can be set. But " @@ -965,21 +942,21 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:366 +#: davfs2.conf.5:359 #, fuzzy msgid "Default: 15" msgstr "Predeterminado: 1" # type: TP #. type: TP -#: davfs2.conf.5:367 +#: davfs2.conf.5:360 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:373 +#: davfs2.conf.5:366 msgid "" "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 " @@ -989,19 +966,19 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:375 +#: davfs2.conf.5:368 msgid "add_header Translate F" msgstr "add_header Translate F" # type: Plain text #. type: Plain text -#: davfs2.conf.5:377 +#: davfs2.conf.5:370 msgid "B<@PROGRAM_NAME@> will add header \"Translate: F\" on all requests." msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:381 +#: davfs2.conf.5:374 msgid "" "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@/" @@ -1010,21 +987,21 @@ msgstr "" # type: SH #. type: SH -#: davfs2.conf.5:383 +#: davfs2.conf.5:376 #, no-wrap msgid "Cache Related Options" msgstr "Opciones Relacionadas al Caché " # type: TP #. type: TP -#: davfs2.conf.5:385 +#: davfs2.conf.5:378 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:390 +#: davfs2.conf.5:383 msgid "" "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 " @@ -1037,20 +1014,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:392 +#: davfs2.conf.5:385 msgid "Default: lost+found" msgstr "Predeterminado: lost+found" # type: TP #. type: TP -#: davfs2.conf.5:393 +#: davfs2.conf.5:386 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:397 +#: davfs2.conf.5:390 msgid "" "The directory where B<@PROGRAM_NAME@> will store cached files. For every " "mount point a subdirectory will be created." @@ -1060,7 +1037,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:401 +#: davfs2.conf.5:394 msgid "" "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 " @@ -1072,20 +1049,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:403 +#: davfs2.conf.5:396 msgid "Defaults: @SYS_CACHE_DIR@ and ~/.@PACKAGE@/cache" msgstr "Predeterminado: @SYS_CACHE_DIR@ y ~/.@PACKAGE@/cache" # type: TP #. type: TP -#: davfs2.conf.5:404 +#: davfs2.conf.5:397 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:409 +#: davfs2.conf.5:402 msgid "" "The amount of disk space in MiByte that may be used. B<@PROGRAM_NAME@> will " "always take enough space to cache open files, ignoring this value if " @@ -1097,20 +1074,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:411 +#: davfs2.conf.5:404 msgid "Default: 50" msgstr "Predeterminado: 50" # type: TP #. type: TP -#: davfs2.conf.5:412 +#: davfs2.conf.5:405 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:418 +#: davfs2.conf.5:411 msgid "" "B<@PROGRAM_NAME@> 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 " @@ -1125,20 +1102,20 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:420 +#: davfs2.conf.5:413 msgid "Default: 1024" msgstr "Predeterminado: 1024" # type: TP #. type: TP -#: davfs2.conf.5:421 +#: davfs2.conf.5:414 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:426 +#: davfs2.conf.5:419 #, fuzzy msgid "" "After B<@PROGRAM_NAME@> has got information about files in a directory it " @@ -1152,14 +1129,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:429 +#: davfs2.conf.5:422 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:436 +#: davfs2.conf.5:429 msgid "" "When a file or directory is opened by an application, B<@PROGRAM_NAME@> will " "first check the server for a newer version. But some applications do open " @@ -1176,14 +1153,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:439 +#: davfs2.conf.5:432 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:446 +#: davfs2.conf.5:439 msgid "" "When a file that has been changed is closed, B<@PROGRAM_NAME@> will wait " "that many seconds before it will upload it to the server. This will avoid " @@ -1194,14 +1171,14 @@ msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:449 +#: davfs2.conf.5:442 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:456 +#: davfs2.conf.5:449 msgid "" "When a file is opened, B<@PROGRAM_NAME@> will have to check the server " "whether there is a newer version. Graphical User Interfaces tend to open " @@ -1218,21 +1195,21 @@ msgstr "" # type: SH #. type: SH -#: davfs2.conf.5:460 +#: davfs2.conf.5:453 #, fuzzy, no-wrap msgid "Debugging Options" msgstr "Opciones Generales" # type: TP #. type: TP -#: davfs2.conf.5:462 +#: davfs2.conf.5:455 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:470 +#: davfs2.conf.5:463 msgid "" "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 " @@ -1244,7 +1221,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:474 +#: davfs2.conf.5:467 msgid "" "Unlike other options, this option is cumulative. If there are several debug " "entries with different values, all of them will be applied. Also debug " @@ -1254,7 +1231,7 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:477 +#: davfs2.conf.5:470 msgid "" "B Debug messages let the log-files grow quickly. Never use this " "option in normal operation of mount.davfs." @@ -1262,165 +1239,165 @@ msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:479 +#: davfs2.conf.5:472 msgid "Default: no debugging messages" msgstr "" # type: Plain text #. type: TP -#: davfs2.conf.5:480 +#: davfs2.conf.5:473 #, no-wrap msgid "B" msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:482 +#: davfs2.conf.5:475 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:485 +#: davfs2.conf.5:478 #, fuzzy msgid "Command line and configuration options." msgstr "B" # type: TP #. type: TP -#: davfs2.conf.5:485 +#: davfs2.conf.5:478 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:488 +#: davfs2.conf.5:481 msgid "Upcalls from the kernel file system." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:488 +#: davfs2.conf.5:481 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:491 +#: davfs2.conf.5:484 msgid "Cache operations like adding and removing nodes." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:491 +#: davfs2.conf.5:484 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:494 +#: davfs2.conf.5:487 msgid "HTTP headers." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:494 +#: davfs2.conf.5:487 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:497 +#: davfs2.conf.5:490 msgid "Parsing of the XML-body of WebDAV-requests." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:497 +#: davfs2.conf.5:490 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:500 +#: davfs2.conf.5:493 msgid "Negotiation of authentication." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:500 +#: davfs2.conf.5:493 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:503 +#: davfs2.conf.5:496 msgid "Information about locks." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:503 +#: davfs2.conf.5:496 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:506 +#: davfs2.conf.5:499 msgid "TLS/SSL related stuff like certificates." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:506 +#: davfs2.conf.5:499 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:509 +#: davfs2.conf.5:502 msgid "Complete body of HTTP-responses." msgstr "" # type: Plain text #. type: Plain text -#: davfs2.conf.5:512 +#: davfs2.conf.5:505 msgid "" "Also print confidential information, which is usually omitted or obscured." msgstr "" # type: TP #. type: TP -#: davfs2.conf.5:512 +#: davfs2.conf.5:505 #, no-wrap msgid "B" msgstr "B" # type: Plain text #. type: Plain text -#: davfs2.conf.5:515 +#: davfs2.conf.5:508 msgid "Includes config, kernel, cache and http." msgstr "" # type: SH #. type: SH -#: davfs2.conf.5:518 mount.davfs.8:533 umount.davfs.8:79 +#: davfs2.conf.5:511 mount.davfs.8:533 umount.davfs.8:79 #, no-wrap msgid "AUTHORS" msgstr "AUTORES" # type: Plain text #. type: Plain text -#: davfs2.conf.5:522 +#: davfs2.conf.5:515 msgid "" "This man page was written by by Werner Baumann Ewerner." "baumann@onlinehome.deE." @@ -1430,27 +1407,27 @@ msgstr "" # type: SH #. type: SH -#: davfs2.conf.5:524 mount.davfs.8:550 umount.davfs.8:84 +#: davfs2.conf.5:517 mount.davfs.8:550 umount.davfs.8:84 #, no-wrap msgid "DAVFS2 HOME" msgstr "DAVFS2 HOME" # type: TH #. type: Plain text -#: davfs2.conf.5:527 mount.davfs.8:553 umount.davfs.8:87 +#: davfs2.conf.5:520 mount.davfs.8:553 umount.davfs.8:87 msgid "@PACKAGE_BUGREPORT@" msgstr "@PACKAGE_BUGREPORT@" # type: SH #. type: SH -#: davfs2.conf.5:529 mount.davfs.8:555 umount.davfs.8:89 +#: davfs2.conf.5:522 mount.davfs.8:555 umount.davfs.8:89 #, no-wrap msgid "SEE ALSO" msgstr "VER TAMBIÉN" # type: Plain text #. type: Plain text -#: davfs2.conf.5:535 +#: davfs2.conf.5:528 msgid "" "B<@PROGRAM_NAME@>(8), B(8), B(8), B(8), " "B(5)" diff --git a/man/mount.davfs.8 b/man/mount.davfs.8 index 4596b03..a706717 100644 --- a/man/mount.davfs.8 +++ b/man/mount.davfs.8 @@ -39,8 +39,8 @@ 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. +virtual file system by using the fuse kernel files system. +Currently FUSE_KERNEL_VERSION 7 is supported. .PP \fB@PROGRAM_NAME@\fR is usually invoked by the \fBmount\fR(8) command when diff --git a/man/mount.davfs.8.pot b/man/mount.davfs.8.pot index e6e6e6d..e070929 100644 --- a/man/mount.davfs.8.pot +++ b/man/mount.davfs.8.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2012-03-18 12:02+0100\n" +"POT-Creation-Date: 2013-08-09 12:15+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,24 +35,24 @@ msgid "DESCRIPTION" msgstr "" #. type: SH -#: davfs2.conf.5:518 mount.davfs.8:533 umount.davfs.8:79 +#: davfs2.conf.5:511 mount.davfs.8:533 umount.davfs.8:79 #, no-wrap msgid "AUTHORS" msgstr "" #. type: SH -#: davfs2.conf.5:524 mount.davfs.8:550 umount.davfs.8:84 +#: davfs2.conf.5:517 mount.davfs.8:550 umount.davfs.8:84 #, no-wrap msgid "DAVFS2 HOME" msgstr "" #. type: Plain text -#: davfs2.conf.5:527 mount.davfs.8:553 umount.davfs.8:87 +#: davfs2.conf.5:520 mount.davfs.8:553 umount.davfs.8:87 msgid "@PACKAGE_BUGREPORT@" msgstr "" #. type: SH -#: davfs2.conf.5:529 mount.davfs.8:555 umount.davfs.8:89 +#: davfs2.conf.5:522 mount.davfs.8:555 umount.davfs.8:89 #, no-wrap msgid "SEE ALSO" msgstr "" @@ -130,8 +130,8 @@ msgstr "" msgid "" "B<@PACKAGE@> supports B (if the neon library supports it) and " "proxies. B<@PROGRAM_NAME@> 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." +"the virtual file system by using the fuse kernel files system. Currently " +"FUSE_KERNEL_VERSION 7 is supported." msgstr "" #. type: Plain text diff --git a/man/po4a.conf b/man/po4a.conf index 12e02ad..ac8af5a 100644 --- a/man/po4a.conf +++ b/man/po4a.conf @@ -22,7 +22,7 @@ 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" + opt_es:"-k 74 -L UTF-8" [type:man] mount.davfs.8 \ de:de/mount.davfs.8 add_de:de/mount.davfs.8.translator \ diff --git a/po/POTFILES.in b/po/POTFILES.in index a43ae60..907aa42 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,7 +1,5 @@ # 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 diff --git a/po/cs.po b/po/cs.po index 7e2a9d5..d908887 100644 --- a/po/cs.po +++ b/po/cs.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://savannah.nongnu.org/support/?" "func=additem&group=davfs2\n" -"POT-Creation-Date: 2012-02-01 18:13+0100\n" +"POT-Creation-Date: 2013-08-09 12:39+0200\n" "PO-Revision-Date: 2007-05-03 19:50+0200\n" "Last-Translator: Vítězslav Kotrla \n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bitX-Generator: KBabel 1.11.4\n" "X-Generator: KBabel 1.11.4\n" -#: src/cache.c:662 +#: src/cache.c:656 #, c-format msgid "" "connection timed out two times;\n" @@ -26,12 +26,12 @@ msgstr "" "spojení vypršelo dvakrát;\n" "zkouším to ještě jednou a naposledy" -#: src/cache.c:667 +#: src/cache.c:661 #, c-format msgid "Last try succeeded.\n" msgstr "Poslední pokus byl úspěšný.\n" -#: src/cache.c:670 +#: src/cache.c:664 #, c-format msgid "" "server temporarily unreachable;\n" @@ -40,7 +40,7 @@ msgstr "" "server je dočasně nedostupný;\n" "přesto připojuji" -#: src/cache.c:673 +#: src/cache.c:667 #, c-format msgid "" "Mounting failed.\n" @@ -49,211 +49,177 @@ msgstr "" "Připojení selhalo;\n" "%s" -#: src/cache.c:713 +#: src/cache.c:706 #, c-format msgid "can't replace %s with %s" msgstr "nemohu nahradit %s pomocí %s" -#: src/cache.c:717 +#: src/cache.c:710 #, c-format msgid "error writing new index file %s" msgstr "chyba při zápisu nového indexového souboru %s" -#: src/cache.c:721 +#: src/cache.c:714 #, c-format msgid "can't create new index file for %s" msgstr "nemohu vytvořit nový indexový soubor pro %s" -#: src/cache.c:943 +#: src/cache.c:925 #, c-format msgid "" "File %s exists on the server but should not. Maybe it is an error in the " "server's LOCK impementation. You may try option 'use_locks 0' in davfs2.conf." msgstr "" -#: src/cache.c:2565 src/cache.c:2598 +#: src/cache.c:2512 src/cache.c:2545 #, c-format msgid "can't create cache file %s" msgstr "nemohu vytvořit soubor vyrovnávací paměti %s" -#: src/cache.c:2613 +#: src/cache.c:2560 #, c-format msgid "error writing directory %s" msgstr "chyba při zápisu adresáře %s" -#: src/cache.c:2781 src/mount_davfs.c:1162 +#: src/cache.c:2723 src/mount_davfs.c:1013 #, c-format msgid "can't read user data base" msgstr "nemohu přečíst údaje o uživatelích" -#: src/cache.c:2793 +#: src/cache.c:2735 #, c-format msgid "can't open cache directory %s" msgstr "nemohu otevřít kešovací adresář %s" -#: src/cache.c:2808 +#: src/cache.c:2750 #, c-format msgid "can't create cache directory %s" msgstr "nemohu vytvořit kešovací adresář %s" -#: src/cache.c:2815 +#: src/cache.c:2757 #, c-format msgid "can't access cache directory %s" msgstr "nemohu přistoupit ke kešovacímu adresáři %s" -#: src/cache.c:2818 +#: src/cache.c:2760 #, c-format msgid "wrong owner of cache directory %s" msgstr "chybný vlastník kešovacího adresáře %s" -#: src/cache.c:2822 +#: src/cache.c:2764 #, c-format msgid "wrong permissions set for cache directory %s" msgstr "pro kešovací adresář %s nastaveno chybné oprávnění" -#: src/cache.c:2852 +#: src/cache.c:2794 msgid "found orphaned file in cache:" msgstr "" -#: src/cache.c:2925 +#: src/cache.c:2867 #, c-format msgid "error parsing %s" msgstr "chyba při zpracování %s" -#: src/cache.c:2926 +#: src/cache.c:2868 #, c-format msgid " at line %i" msgstr "" -#: src/cache.c:2971 +#: src/cache.c:2913 #, 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:173 src/dav_fuse.c:173 -msgid "can't allocate message buffer" -msgstr "nemohu alokovat buffer pro zprávu" - -#: src/kernel_interface.c:114 -#, c-format -msgid "trying fuse kernel file system" -msgstr "zkouším jaderný souborový systém fuse" - -#: src/kernel_interface.c:121 -#, c-format -msgid "fuse device opened successfully" -msgstr "zařízení fuse otevřeno úspěšně" - -#: src/kernel_interface.c:133 -#, c-format -msgid "trying coda kernel file system" -msgstr "zkouším jaderný souborový systém coda" - -#: src/kernel_interface.c:137 -#, c-format -msgid "coda device opened successfully" -msgstr "zařízení coda otevřeno úspěšně" - -#: src/kernel_interface.c:145 -#, c-format -msgid "unknown kernel file system %s" -msgstr "neznámý jaderný souborový systém %s" - -#: src/kernel_interface.c:189 -#, c-format -msgid "no free coda device to mount" -msgstr "pro připojení není volné žádné coda zařízení" - -#: src/kernel_interface.c:198 -#, c-format -msgid "CODA_KERNEL_VERSION %u not supported" -msgstr "CODA_KERNEL_VERSION %u není podporováno" - -#: src/kernel_interface.c:235 +#: src/kernel_interface.c:209 #, c-format msgid "can't open fuse device" msgstr "nemohu otevřít fuse zařízení" -#: src/kernel_interface.c:259 -#, c-format -msgid "can't mount using fuse kernel file system" -msgstr "nemohu připojit jaderný souborový systém fuse" +#: src/kernel_interface.c:217 +#, fuzzy, c-format +msgid "mounting failed" +msgstr "odpojení selhalo" -#: src/mount_davfs.c:316 +#: src/kernel_interface.c:226 +#, c-format +msgid "can't allocate message buffer" +msgstr "nemohu alokovat buffer pro zprávu" + +#: src/mount_davfs.c:294 #, c-format msgid "can't start daemon process" msgstr "nemohu spustit proces na pozadí" -#: src/mount_davfs.c:338 +#: src/mount_davfs.c:316 msgid "can't release root privileges" msgstr "nemohu uvolnit oprávnění uživatele root" -#: src/mount_davfs.c:358 +#: src/mount_davfs.c:333 msgid "failed to release tty properly" msgstr "" -#: src/mount_davfs.c:370 +#: src/mount_davfs.c:345 #, c-format msgid "can't write pid file %s" msgstr "nemohu zapsat pid souboru %s" -#: src/mount_davfs.c:388 +#: src/mount_davfs.c:362 #, c-format msgid "unmounting %s" msgstr "odpojuji %s" -#: src/mount_davfs.c:390 +#: src/mount_davfs.c:364 msgid "unmounting failed" msgstr "odpojení selhalo" -#: src/mount_davfs.c:442 +#: src/mount_davfs.c:435 #, c-format msgid "can't change group id" msgstr "nemohu změnit id skupiny" -#: src/mount_davfs.c:483 src/mount_davfs.c:577 src/mount_davfs.c:603 +#: src/mount_davfs.c:473 src/mount_davfs.c:567 src/mount_davfs.c:593 #, c-format msgid "can't create directory %s" msgstr "nemohu vytvořit adresář %s" -#: src/mount_davfs.c:487 src/mount_davfs.c:581 src/mount_davfs.c:607 -#: src/mount_davfs.c:612 src/mount_davfs.c:620 +#: src/mount_davfs.c:477 src/mount_davfs.c:571 src/mount_davfs.c:597 +#: src/mount_davfs.c:602 src/mount_davfs.c:610 #, c-format msgid "can't access directory %s" msgstr "nemohu přistupovat k adresáři %s" -#: src/mount_davfs.c:493 src/mount_davfs.c:587 +#: src/mount_davfs.c:483 src/mount_davfs.c:577 #, 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:498 src/mount_davfs.c:593 +#: src/mount_davfs.c:488 src/mount_davfs.c:583 #, c-format msgid "can't change group of directory %s" msgstr "nemohu změnit skupinu adresáře %s" -#: src/mount_davfs.c:505 src/mount_davfs.c:561 +#: src/mount_davfs.c:495 src/mount_davfs.c:551 #, c-format msgid "file %s has wrong owner" msgstr "soubor %s má chybného vlastníka" -#: src/mount_davfs.c:509 src/mount_davfs.c:566 +#: src/mount_davfs.c:499 src/mount_davfs.c:556 #, c-format msgid "file %s has wrong permissions" msgstr "soubor %s má chybná oprávnění" -#: src/mount_davfs.c:638 src/mount_davfs.c:692 +#: src/mount_davfs.c:628 src/mount_davfs.c:680 #, c-format msgid "can't open file %s" msgstr "nemohu otevřít soubor %s" -#: src/mount_davfs.c:643 +#: src/mount_davfs.c:633 #, c-format msgid "%s is already mounted on %s" msgstr "%s už je připojeno jako %s" -#: src/mount_davfs.c:665 +#: src/mount_davfs.c:655 #, c-format msgid "" "found PID file %s.\n" @@ -264,97 +230,82 @@ msgstr "" "Buď %s používá jiný proces, nebo\n" "jiné připojení skončilo neobvykle" -#: src/mount_davfs.c:709 +#: src/mount_davfs.c:697 #, c-format msgid "no entry for %s found in %s" msgstr "pro %s nebyla v %s nalezena žádná položka" -#: src/mount_davfs.c:713 +#: src/mount_davfs.c:701 #, c-format msgid "different URL in %s" msgstr "v %s je jiné URL" -#: src/mount_davfs.c:716 +#: src/mount_davfs.c:704 #, c-format msgid "different file system type in %s" msgstr "v %s je jiný souborový systém" -#: src/mount_davfs.c:727 +#: src/mount_davfs.c:715 #, c-format msgid "different config file in %s" msgstr "v %s je jiný konfigurační soubor" -#: src/mount_davfs.c:733 +#: src/mount_davfs.c:721 #, fuzzy, c-format msgid "different username in %s" msgstr "v %s je odlišný dir_mode" -#: src/mount_davfs.c:737 +#: src/mount_davfs.c:725 #, fuzzy, c-format msgid "neither option `user' nor option `users' set in %s" msgstr "volba 'user' není v %s nastavena" -#: src/mount_davfs.c:740 +#: src/mount_davfs.c:728 #, c-format msgid "different mount options in %s" msgstr "v %s jsou jiné parametry připojení" -#: src/mount_davfs.c:743 +#: src/mount_davfs.c:731 #, c-format msgid "different uid in %s" msgstr "v %s je odlišné uid" -#: src/mount_davfs.c:745 +#: src/mount_davfs.c:733 #, c-format msgid "different gid in %s" msgstr "v %s je odlišné gid" -#: src/mount_davfs.c:747 +#: src/mount_davfs.c:735 #, c-format msgid "different dir_mode in %s" msgstr "v %s je odlišný dir_mode" -#: src/mount_davfs.c:749 +#: src/mount_davfs.c:737 #, c-format msgid "different file_mode in %s" msgstr "v %s je odlišný file_mode" -#: src/mount_davfs.c:770 +#: src/mount_davfs.c:757 #, c-format 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:782 +#: src/mount_davfs.c:769 #, c-format 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:793 +#: src/mount_davfs.c:780 #, 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:814 -#, c-format -msgid "can't mount %s on %s" -msgstr "není možno připojit %s do %s" - -#: src/mount_davfs.c:816 -#, c-format -msgid "kernel does not know file system %s" -msgstr "kernel nezná souborový systém %s" - -#: src/mount_davfs.c:818 -#, c-format -msgid "mount point is busy" -msgstr "přípojný bod je zaneprázdněn" - -#: src/mount_davfs.c:837 src/mount_davfs.c:1275 +#: src/mount_davfs.c:800 src/mount_davfs.c:1139 #, c-format msgid "can't change effective user id" msgstr "nemohu změnit identifikátor efektivního uživatele" -#: src/mount_davfs.c:908 src/umount_davfs.c:92 +#: src/mount_davfs.c:844 src/umount_davfs.c:92 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -365,87 +316,67 @@ msgstr "" "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:924 src/umount_davfs.c:117 +#: src/mount_davfs.c:860 src/umount_davfs.c:117 #, c-format msgid "unknown error parsing arguments" msgstr "neznámá chyba při zpracování argumentů" -#: src/mount_davfs.c:933 src/umount_davfs.c:123 +#: src/mount_davfs.c:869 src/umount_davfs.c:123 #, c-format msgid "missing argument" msgstr "chybějící argument" -#: src/mount_davfs.c:946 +#: src/mount_davfs.c:882 #, 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:949 src/umount_davfs.c:125 +#: src/mount_davfs.c:885 src/umount_davfs.c:125 #, c-format msgid "too many arguments" msgstr "příliš mnoho argumentů" -#: src/mount_davfs.c:956 +#: src/mount_davfs.c:892 #, c-format 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:961 +#: src/mount_davfs.c:897 #, c-format msgid "no WebDAV-server specified" msgstr "nebyl zadán žádný WebDAV server" -#: src/mount_davfs.c:964 +#: src/mount_davfs.c:900 #, c-format msgid "invalid URL" msgstr "neplatné URL" -#: src/mount_davfs.c:1005 +#: src/mount_davfs.c:930 #, c-format msgid "user %s does not exist" msgstr "uživatel %s neexistuje" -#: src/mount_davfs.c:1013 +#: src/mount_davfs.c:938 #, c-format msgid "group %s does not exist" msgstr "skupina %s neexistuje" -#: src/mount_davfs.c:1042 src/mount_davfs.c:1069 -#, c-format -msgid "can't read server certificate %s" -msgstr "nemohu přečíst serverový cerifikát %s" - -#: src/mount_davfs.c:1099 src/webdav.c:432 -#, c-format -msgid "can't read client certificate %s" -msgstr "nelze přečíst klientský certifikát %s" - -#: src/mount_davfs.c:1104 -#, c-format -msgid "client certificate file %s has wrong owner" -msgstr "klientský certifikát %s má chybného vlastníka" - -#: src/mount_davfs.c:1110 -#, 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:1153 +#: src/mount_davfs.c:1004 #, c-format msgid "program is not setuid root" msgstr "program není spuštěn jako setuid root" -#: src/mount_davfs.c:1171 +#: src/mount_davfs.c:1022 #, c-format msgid "can't read group data base" msgstr "nemohu přečíst údaje o skupinách" -#: src/mount_davfs.c:1201 src/mount_davfs.c:1214 src/mount_davfs.c:1216 -#: src/mount_davfs.c:1234 src/mount_davfs.c:1236 src/webdav.c:439 +#: src/mount_davfs.c:1049 src/mount_davfs.c:1062 src/mount_davfs.c:1064 +#: src/mount_davfs.c:1082 src/mount_davfs.c:1084 src/mount_davfs.c:1099 msgid "Password: " msgstr "Heslo: " -#: src/mount_davfs.c:1205 +#: src/mount_davfs.c:1053 #, fuzzy, c-format msgid "" "Please enter the username to authenticate with proxy\n" @@ -455,11 +386,11 @@ msgstr "" "%s (pokud žádné zadat nechcete, pouze stiskněte enter).\n" "Uživatelské jméno: " -#: src/mount_davfs.c:1207 src/mount_davfs.c:1227 +#: src/mount_davfs.c:1055 src/mount_davfs.c:1075 msgid "Username:" msgstr "" -#: src/mount_davfs.c:1211 +#: src/mount_davfs.c:1059 #, c-format msgid "" "Please enter the password to authenticate user %s with proxy\n" @@ -468,7 +399,7 @@ 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:1225 +#: src/mount_davfs.c:1073 #, fuzzy, c-format msgid "" "Please enter the username to authenticate with server\n" @@ -478,7 +409,7 @@ msgstr "" "%s (nebo pouze stiskně enter, pokud nic zadat nechcete).\n" "Uživatelské jméno: " -#: src/mount_davfs.c:1231 +#: src/mount_davfs.c:1079 #, c-format msgid "" "Please enter the password to authenticate user %s with server\n" @@ -487,60 +418,94 @@ 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:1303 +#: src/mount_davfs.c:1097 +#, 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/mount_davfs.c:1104 +#, c-format +msgid "can't decrypt client certificate %s" +msgstr "nemohu dešifrovat klientský certifikát %s" + +#: src/mount_davfs.c:1167 #, c-format msgid "pid %i, got signal %i" msgstr "pid %i dostal signál %i" -#: src/mount_davfs.c:1343 +#: src/mount_davfs.c:1206 #, c-format 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:1369 +#: src/mount_davfs.c:1232 #, 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:1372 +#: src/mount_davfs.c:1235 #, 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:1375 +#: src/mount_davfs.c:1238 #, 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:1652 +#: src/mount_davfs.c:1513 #, c-format msgid "option %s requires argument" msgstr "volba %s vyžaduje argument" -#: src/mount_davfs.c:1744 +#: src/mount_davfs.c:1605 #, c-format msgid "Unknown option %s.\n" msgstr "Neznámá volba %s.\n" -#: src/mount_davfs.c:2100 src/mount_davfs.c:2330 +#: src/mount_davfs.c:1976 +#, fuzzy, c-format +msgid "can't read certificate %s" +msgstr "nelze přečíst klientský certifikát %s" + +#: src/mount_davfs.c:2008 src/mount_davfs.c:2021 +#, c-format +msgid "can't read client certificate %s" +msgstr "nelze přečíst klientský certifikát %s" + +#: src/mount_davfs.c:2012 +#, c-format +msgid "client certificate file %s has wrong owner" +msgstr "klientský certifikát %s má chybného vlastníka" + +#: src/mount_davfs.c:2016 +#, 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:2038 src/mount_davfs.c:2266 #, fuzzy, c-format msgid "opening %s failed" msgstr "odpojení selhalo" -#: src/mount_davfs.c:2121 src/mount_davfs.c:2166 src/mount_davfs.c:2258 -#: src/mount_davfs.c:2346 src/mount_davfs.c:2413 +#: src/mount_davfs.c:2059 src/mount_davfs.c:2104 src/mount_davfs.c:2196 +#: src/mount_davfs.c:2293 src/mount_davfs.c:2351 src/mount_davfs.c:2364 #, c-format msgid "malformed line" msgstr "špatně zapsaný řádek" -#: src/mount_davfs.c:2236 src/mount_davfs.c:2252 +#: src/mount_davfs.c:2174 src/mount_davfs.c:2190 #, c-format msgid "unknown option" msgstr "neznámá volba" -#: src/mount_davfs.c:2545 +#: src/mount_davfs.c:2496 #, c-format msgid "" "Usage:\n" @@ -553,7 +518,7 @@ msgstr "" " %s -h,--help : vytiskne tuto zprávu\n" "\n" -#: src/mount_davfs.c:2549 +#: src/mount_davfs.c:2500 #, c-format msgid "" "To mount a WebDAV-resource don't call %s directly, but use\n" @@ -562,7 +527,7 @@ msgstr "" "Pro připojení zdroje WebDAV nevolejte přímo %s, ale\n" "použijte místo toho `mount'.\n" -#: src/mount_davfs.c:2551 +#: src/mount_davfs.c:2502 #, c-format msgid "" " mount : or\n" @@ -573,7 +538,7 @@ msgstr "" " mount : připojí zdroj WebDAV tak, jak je zadáno\n" " v /etc/fstab.\n" -#: src/mount_davfs.c:2554 +#: src/mount_davfs.c:2505 #, c-format msgid "" " mount -t davfs [-o options]\n" @@ -590,7 +555,7 @@ msgstr "" " označuje seznam voleb oddělených čárkou.\n" "\n" -#: src/mount_davfs.c:2559 +#: src/mount_davfs.c:2510 #, c-format msgid "" "Recognised options:\n" @@ -609,7 +574,7 @@ msgstr "" " 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:2565 +#: src/mount_davfs.c:2516 #, c-format msgid "" " ro : mount read-only\n" @@ -724,95 +689,81 @@ msgstr "" msgid "neon library does not support TLS/SSL" msgstr "knihovna neon nepodporuje TLS/SSL" -#: src/webdav.c:437 -#, 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:451 -#, c-format -msgid "can't decrypt client certificate %s" -msgstr "nemohu dešifrovat klientský certifikát %s" - -#: src/webdav.c:505 src/webdav.c:508 +#: src/webdav.c:475 src/webdav.c:478 #, c-format msgid "mounting failed; the server does not support WebDAV" msgstr "připojení selhalo; server nepodporuje WebDAV" -#: src/webdav.c:516 +#: src/webdav.c:486 #, c-format msgid "warning: the server does not support locks" msgstr "varování: server nepodporuje zámky" -#: src/webdav.c:1596 +#: src/webdav.c:1566 msgid "authentication failure:" msgstr "selhání autentizace:" -#: src/webdav.c:1634 +#: src/webdav.c:1604 #, c-format msgid "%i can't open cache file" msgstr "%i nemůže otevřít soubor vyrovnávací paměti" -#: src/webdav.c:1642 +#: src/webdav.c:1612 #, 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:1952 src/webdav.c:1981 src/webdav.c:2018 +#: src/webdav.c:1922 src/webdav.c:1951 src/webdav.c:1988 #, c-format msgid "the server certificate is not trusted" msgstr "certifikát serveru je nedůvěryhodný" -#: src/webdav.c:1961 src/webdav.c:1964 +#: src/webdav.c:1931 src/webdav.c:1934 #, c-format msgid "error processing server certificate" msgstr "chyba při zpracování certifikátu serveru" -#: src/webdav.c:1975 src/webdav.c:2009 +#: src/webdav.c:1945 src/webdav.c:1979 #, c-format msgid "the server certificate is not yet valid" msgstr "certifikát serveru zatím není platný" -#: src/webdav.c:1977 src/webdav.c:2012 +#: src/webdav.c:1947 src/webdav.c:1982 #, c-format msgid "the server certificate has expired" msgstr "platnost certifikátu serveru vypršela" -#: src/webdav.c:1979 src/webdav.c:2015 +#: src/webdav.c:1949 src/webdav.c:1985 #, c-format msgid "the server certificate does not match the server name" msgstr "certifikát serveru nedopovídá jménu serveru" -#: src/webdav.c:1983 src/webdav.c:2021 +#: src/webdav.c:1953 src/webdav.c:1991 #, c-format msgid "unknown certificate error" msgstr "neznámá chyba certifikátu" -#: src/webdav.c:1984 +#: src/webdav.c:1954 #, c-format msgid " issuer: %s" msgstr " vydavatel: %s" -#: src/webdav.c:1986 +#: src/webdav.c:1956 #, c-format msgid " subject: %s" msgstr " subjekt: %s" -#: src/webdav.c:1988 +#: src/webdav.c:1958 #, c-format msgid " identity: %s" msgstr " identita: %s" -#: src/webdav.c:1990 +#: src/webdav.c:1960 #, c-format msgid " fingerprint: %s" msgstr " otisk: %s" -#: src/webdav.c:1992 +#: src/webdav.c:1962 #, c-format msgid "" "You only should accept this certificate, if you can\n" @@ -823,30 +774,66 @@ msgstr "" "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:1995 +#: src/webdav.c:1965 #, c-format msgid "Accept certificate for this session? [y,N] " msgstr "Přijmout certifikát pro toto sezení? [y,N] " -#: src/webdav.c:2022 +#: src/webdav.c:1992 #, c-format msgid " issuer: %s" msgstr " vydavatel: %s" -#: src/webdav.c:2023 +#: src/webdav.c:1993 #, c-format msgid " subject: %s" msgstr " subjekt: %s" -#: src/webdav.c:2024 +#: src/webdav.c:1994 #, c-format msgid " identity: %s" msgstr " identita: %s" -#: src/webdav.c:2027 +#: src/webdav.c:1997 msgid " accepted by user" msgstr " přijat uživatelem" +#~ msgid "trying fuse kernel file system" +#~ msgstr "zkouším jaderný souborový systém fuse" + +#~ msgid "fuse device opened successfully" +#~ msgstr "zařízení fuse otevřeno úspěšně" + +#~ msgid "trying coda kernel file system" +#~ msgstr "zkouším jaderný souborový systém coda" + +#~ msgid "coda device opened successfully" +#~ msgstr "zařízení coda otevřeno úspěšně" + +#~ msgid "unknown kernel file system %s" +#~ msgstr "neznámý jaderný souborový systém %s" + +#~ msgid "no free coda device to mount" +#~ msgstr "pro připojení není volné žádné coda zařízení" + +#~ msgid "CODA_KERNEL_VERSION %u not supported" +#~ msgstr "CODA_KERNEL_VERSION %u není podporováno" + +#~ msgid "can't mount using fuse kernel file system" +#~ msgstr "nemohu připojit jaderný souborový systém fuse" + +#~ msgid "can't mount %s on %s" +#~ msgstr "není možno připojit %s do %s" + +#~ msgid "kernel does not know file system %s" +#~ msgstr "kernel nezná souborový systém %s" + +#~ msgid "mount point is busy" +#~ msgstr "přípojný bod je zaneprázdněn" + +#~ msgid "can't read server certificate %s" +#~ msgstr "nemohu přečíst serverový cerifikát %s" + #~ msgid "can't get home directory for uid %i" #~ msgstr "nemohu zjistit domovský adresář pro uid %i" diff --git a/po/davfs2.pot b/po/davfs2.pot index 1064cd4..761ea43 100644 --- a/po/davfs2.pot +++ b/po/davfs2.pot @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: davfs2 1.4.6\n" "Report-Msgid-Bugs-To: http://savannah.nongnu.org/support/?" "func=additem&group=davfs2\n" -"POT-Creation-Date: 2012-02-01 18:13+0100\n" +"POT-Creation-Date: 2013-08-09 12:39+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,236 +18,202 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/cache.c:662 +#: src/cache.c:656 #, c-format msgid "" "connection timed out two times;\n" "trying one last time" msgstr "" -#: src/cache.c:667 +#: src/cache.c:661 #, c-format msgid "Last try succeeded.\n" msgstr "" -#: src/cache.c:670 +#: src/cache.c:664 #, c-format msgid "" "server temporarily unreachable;\n" "mounting anyway" msgstr "" -#: src/cache.c:673 +#: src/cache.c:667 #, c-format msgid "" "Mounting failed.\n" "%s" msgstr "" -#: src/cache.c:713 +#: src/cache.c:706 #, c-format msgid "can't replace %s with %s" msgstr "" -#: src/cache.c:717 +#: src/cache.c:710 #, c-format msgid "error writing new index file %s" msgstr "" -#: src/cache.c:721 +#: src/cache.c:714 #, c-format msgid "can't create new index file for %s" msgstr "" -#: src/cache.c:943 +#: src/cache.c:925 #, c-format msgid "" "File %s exists on the server but should not. Maybe it is an error in the " "server's LOCK impementation. You may try option 'use_locks 0' in davfs2.conf." msgstr "" -#: src/cache.c:2565 src/cache.c:2598 +#: src/cache.c:2512 src/cache.c:2545 #, c-format msgid "can't create cache file %s" msgstr "" -#: src/cache.c:2613 +#: src/cache.c:2560 #, c-format msgid "error writing directory %s" msgstr "" -#: src/cache.c:2781 src/mount_davfs.c:1162 +#: src/cache.c:2723 src/mount_davfs.c:1013 #, c-format msgid "can't read user data base" msgstr "" -#: src/cache.c:2793 +#: src/cache.c:2735 #, c-format msgid "can't open cache directory %s" msgstr "" -#: src/cache.c:2808 +#: src/cache.c:2750 #, c-format msgid "can't create cache directory %s" msgstr "" -#: src/cache.c:2815 +#: src/cache.c:2757 #, c-format msgid "can't access cache directory %s" msgstr "" -#: src/cache.c:2818 +#: src/cache.c:2760 #, c-format msgid "wrong owner of cache directory %s" msgstr "" -#: src/cache.c:2822 +#: src/cache.c:2764 #, c-format msgid "wrong permissions set for cache directory %s" msgstr "" -#: src/cache.c:2852 +#: src/cache.c:2794 msgid "found orphaned file in cache:" msgstr "" -#: src/cache.c:2925 +#: src/cache.c:2867 #, c-format msgid "error parsing %s" msgstr "" -#: src/cache.c:2926 +#: src/cache.c:2868 #, c-format msgid " at line %i" msgstr "" -#: src/cache.c:2971 +#: src/cache.c:2913 #, c-format msgid "open files exceed max cache size by %llu MiBytes" msgstr "" -#: src/dav_coda.c:173 src/dav_fuse.c:173 -msgid "can't allocate message buffer" -msgstr "" - -#: src/kernel_interface.c:114 -#, c-format -msgid "trying fuse kernel file system" -msgstr "" - -#: src/kernel_interface.c:121 -#, c-format -msgid "fuse device opened successfully" -msgstr "" - -#: src/kernel_interface.c:133 -#, c-format -msgid "trying coda kernel file system" -msgstr "" - -#: src/kernel_interface.c:137 -#, c-format -msgid "coda device opened successfully" -msgstr "" - -#: src/kernel_interface.c:145 -#, c-format -msgid "unknown kernel file system %s" -msgstr "" - -#: src/kernel_interface.c:189 -#, c-format -msgid "no free coda device to mount" -msgstr "" - -#: src/kernel_interface.c:198 -#, c-format -msgid "CODA_KERNEL_VERSION %u not supported" -msgstr "" - -#: src/kernel_interface.c:235 +#: src/kernel_interface.c:209 #, c-format msgid "can't open fuse device" msgstr "" -#: src/kernel_interface.c:259 +#: src/kernel_interface.c:217 #, c-format -msgid "can't mount using fuse kernel file system" +msgid "mounting failed" msgstr "" -#: src/mount_davfs.c:316 +#: src/kernel_interface.c:226 +#, c-format +msgid "can't allocate message buffer" +msgstr "" + +#: src/mount_davfs.c:294 #, c-format msgid "can't start daemon process" msgstr "" -#: src/mount_davfs.c:338 +#: src/mount_davfs.c:316 msgid "can't release root privileges" msgstr "" -#: src/mount_davfs.c:358 +#: src/mount_davfs.c:333 msgid "failed to release tty properly" msgstr "" -#: src/mount_davfs.c:370 +#: src/mount_davfs.c:345 #, c-format msgid "can't write pid file %s" msgstr "" -#: src/mount_davfs.c:388 +#: src/mount_davfs.c:362 #, c-format msgid "unmounting %s" msgstr "" -#: src/mount_davfs.c:390 +#: src/mount_davfs.c:364 msgid "unmounting failed" msgstr "" -#: src/mount_davfs.c:442 +#: src/mount_davfs.c:435 #, c-format msgid "can't change group id" msgstr "" -#: src/mount_davfs.c:483 src/mount_davfs.c:577 src/mount_davfs.c:603 +#: src/mount_davfs.c:473 src/mount_davfs.c:567 src/mount_davfs.c:593 #, c-format msgid "can't create directory %s" msgstr "" -#: src/mount_davfs.c:487 src/mount_davfs.c:581 src/mount_davfs.c:607 -#: src/mount_davfs.c:612 src/mount_davfs.c:620 +#: src/mount_davfs.c:477 src/mount_davfs.c:571 src/mount_davfs.c:597 +#: src/mount_davfs.c:602 src/mount_davfs.c:610 #, c-format msgid "can't access directory %s" msgstr "" -#: src/mount_davfs.c:493 src/mount_davfs.c:587 +#: src/mount_davfs.c:483 src/mount_davfs.c:577 #, c-format msgid "can't change mode of directory %s" msgstr "" -#: src/mount_davfs.c:498 src/mount_davfs.c:593 +#: src/mount_davfs.c:488 src/mount_davfs.c:583 #, c-format msgid "can't change group of directory %s" msgstr "" -#: src/mount_davfs.c:505 src/mount_davfs.c:561 +#: src/mount_davfs.c:495 src/mount_davfs.c:551 #, c-format msgid "file %s has wrong owner" msgstr "" -#: src/mount_davfs.c:509 src/mount_davfs.c:566 +#: src/mount_davfs.c:499 src/mount_davfs.c:556 #, c-format msgid "file %s has wrong permissions" msgstr "" -#: src/mount_davfs.c:638 src/mount_davfs.c:692 +#: src/mount_davfs.c:628 src/mount_davfs.c:680 #, c-format msgid "can't open file %s" msgstr "" -#: src/mount_davfs.c:643 +#: src/mount_davfs.c:633 #, c-format msgid "%s is already mounted on %s" msgstr "" -#: src/mount_davfs.c:665 +#: src/mount_davfs.c:655 #, c-format msgid "" "found PID file %s.\n" @@ -255,268 +221,265 @@ msgid "" "or another mount process ended irregular" msgstr "" -#: src/mount_davfs.c:709 +#: src/mount_davfs.c:697 #, c-format msgid "no entry for %s found in %s" msgstr "" -#: src/mount_davfs.c:713 +#: src/mount_davfs.c:701 #, c-format msgid "different URL in %s" msgstr "" -#: src/mount_davfs.c:716 +#: src/mount_davfs.c:704 #, c-format msgid "different file system type in %s" msgstr "" -#: src/mount_davfs.c:727 +#: src/mount_davfs.c:715 #, c-format msgid "different config file in %s" msgstr "" -#: src/mount_davfs.c:733 +#: src/mount_davfs.c:721 #, c-format msgid "different username in %s" msgstr "" -#: src/mount_davfs.c:737 +#: src/mount_davfs.c:725 #, c-format msgid "neither option `user' nor option `users' set in %s" msgstr "" -#: src/mount_davfs.c:740 +#: src/mount_davfs.c:728 #, c-format msgid "different mount options in %s" msgstr "" -#: src/mount_davfs.c:743 +#: src/mount_davfs.c:731 #, c-format msgid "different uid in %s" msgstr "" -#: src/mount_davfs.c:745 +#: src/mount_davfs.c:733 #, c-format msgid "different gid in %s" msgstr "" -#: src/mount_davfs.c:747 +#: src/mount_davfs.c:735 #, c-format msgid "different dir_mode in %s" msgstr "" -#: src/mount_davfs.c:749 +#: src/mount_davfs.c:737 #, c-format msgid "different file_mode in %s" msgstr "" -#: src/mount_davfs.c:770 +#: src/mount_davfs.c:757 #, c-format msgid "you can't set file owner different from your uid" msgstr "" -#: src/mount_davfs.c:782 +#: src/mount_davfs.c:769 #, c-format msgid "you must be member of the group of the file system" msgstr "" -#: src/mount_davfs.c:793 +#: src/mount_davfs.c:780 #, c-format msgid "user %s must be member of group %s" msgstr "" -#: src/mount_davfs.c:814 -#, c-format -msgid "can't mount %s on %s" -msgstr "" - -#: src/mount_davfs.c:816 -#, c-format -msgid "kernel does not know file system %s" -msgstr "" - -#: src/mount_davfs.c:818 -#, c-format -msgid "mount point is busy" -msgstr "" - -#: src/mount_davfs.c:837 src/mount_davfs.c:1275 +#: src/mount_davfs.c:800 src/mount_davfs.c:1139 #, c-format msgid "can't change effective user id" msgstr "" -#: src/mount_davfs.c:908 src/umount_davfs.c:92 +#: src/mount_davfs.c:844 src/umount_davfs.c:92 #, 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:924 src/umount_davfs.c:117 +#: src/mount_davfs.c:860 src/umount_davfs.c:117 #, c-format msgid "unknown error parsing arguments" msgstr "" -#: src/mount_davfs.c:933 src/umount_davfs.c:123 +#: src/mount_davfs.c:869 src/umount_davfs.c:123 #, c-format msgid "missing argument" msgstr "" -#: src/mount_davfs.c:946 +#: src/mount_davfs.c:882 #, c-format msgid "can't evaluate path of mount point %s" msgstr "" -#: src/mount_davfs.c:949 src/umount_davfs.c:125 +#: src/mount_davfs.c:885 src/umount_davfs.c:125 #, c-format msgid "too many arguments" msgstr "" -#: src/mount_davfs.c:956 +#: src/mount_davfs.c:892 #, c-format msgid "A relative mount point must lie within your home directory" msgstr "" -#: src/mount_davfs.c:961 +#: src/mount_davfs.c:897 #, c-format msgid "no WebDAV-server specified" msgstr "" -#: src/mount_davfs.c:964 +#: src/mount_davfs.c:900 #, c-format msgid "invalid URL" msgstr "" -#: src/mount_davfs.c:1005 +#: src/mount_davfs.c:930 #, c-format msgid "user %s does not exist" msgstr "" -#: src/mount_davfs.c:1013 +#: src/mount_davfs.c:938 #, c-format msgid "group %s does not exist" msgstr "" -#: src/mount_davfs.c:1042 src/mount_davfs.c:1069 -#, c-format -msgid "can't read server certificate %s" -msgstr "" - -#: src/mount_davfs.c:1099 src/webdav.c:432 -#, c-format -msgid "can't read client certificate %s" -msgstr "" - -#: src/mount_davfs.c:1104 -#, c-format -msgid "client certificate file %s has wrong owner" -msgstr "" - -#: src/mount_davfs.c:1110 -#, c-format -msgid "client certificate file %s has wrong permissions" -msgstr "" - -#: src/mount_davfs.c:1153 +#: src/mount_davfs.c:1004 #, c-format msgid "program is not setuid root" msgstr "" -#: src/mount_davfs.c:1171 +#: src/mount_davfs.c:1022 #, c-format msgid "can't read group data base" msgstr "" -#: src/mount_davfs.c:1201 src/mount_davfs.c:1214 src/mount_davfs.c:1216 -#: src/mount_davfs.c:1234 src/mount_davfs.c:1236 src/webdav.c:439 +#: src/mount_davfs.c:1049 src/mount_davfs.c:1062 src/mount_davfs.c:1064 +#: src/mount_davfs.c:1082 src/mount_davfs.c:1084 src/mount_davfs.c:1099 msgid "Password: " msgstr "" -#: src/mount_davfs.c:1205 +#: src/mount_davfs.c:1053 #, c-format msgid "" "Please enter the username to authenticate with proxy\n" "%s or hit enter for none.\n" msgstr "" -#: src/mount_davfs.c:1207 src/mount_davfs.c:1227 +#: src/mount_davfs.c:1055 src/mount_davfs.c:1075 msgid "Username:" msgstr "" -#: src/mount_davfs.c:1211 +#: src/mount_davfs.c:1059 #, 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:1225 +#: src/mount_davfs.c:1073 #, c-format msgid "" "Please enter the username to authenticate with server\n" "%s or hit enter for none.\n" msgstr "" -#: src/mount_davfs.c:1231 +#: src/mount_davfs.c:1079 #, 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:1303 +#: src/mount_davfs.c:1097 +#, c-format +msgid "" +"Please enter the password to decrypt client\n" +"certificate %s.\n" +msgstr "" + +#: src/mount_davfs.c:1104 +#, c-format +msgid "can't decrypt client certificate %s" +msgstr "" + +#: src/mount_davfs.c:1167 #, c-format msgid "pid %i, got signal %i" msgstr "" -#: src/mount_davfs.c:1343 +#: src/mount_davfs.c:1206 #, c-format msgid "" "Warning: can't write entry into mtab, but will mount the file system anyway" msgstr "" -#: src/mount_davfs.c:1369 +#: src/mount_davfs.c:1232 #, c-format msgid "option %s has invalid argument;it must be a decimal number" msgstr "" -#: src/mount_davfs.c:1372 +#: src/mount_davfs.c:1235 #, c-format msgid "option %s has invalid argument;it must be an octal number" msgstr "" -#: src/mount_davfs.c:1375 +#: src/mount_davfs.c:1238 #, c-format msgid "option %s has invalid argument;it must be a number" msgstr "" -#: src/mount_davfs.c:1652 +#: src/mount_davfs.c:1513 #, c-format msgid "option %s requires argument" msgstr "" -#: src/mount_davfs.c:1744 +#: src/mount_davfs.c:1605 #, c-format msgid "Unknown option %s.\n" msgstr "" -#: src/mount_davfs.c:2100 src/mount_davfs.c:2330 +#: src/mount_davfs.c:1976 +#, c-format +msgid "can't read certificate %s" +msgstr "" + +#: src/mount_davfs.c:2008 src/mount_davfs.c:2021 +#, c-format +msgid "can't read client certificate %s" +msgstr "" + +#: src/mount_davfs.c:2012 +#, c-format +msgid "client certificate file %s has wrong owner" +msgstr "" + +#: src/mount_davfs.c:2016 +#, c-format +msgid "client certificate file %s has wrong permissions" +msgstr "" + +#: src/mount_davfs.c:2038 src/mount_davfs.c:2266 #, c-format msgid "opening %s failed" msgstr "" -#: src/mount_davfs.c:2121 src/mount_davfs.c:2166 src/mount_davfs.c:2258 -#: src/mount_davfs.c:2346 src/mount_davfs.c:2413 +#: src/mount_davfs.c:2059 src/mount_davfs.c:2104 src/mount_davfs.c:2196 +#: src/mount_davfs.c:2293 src/mount_davfs.c:2351 src/mount_davfs.c:2364 #, c-format msgid "malformed line" msgstr "" -#: src/mount_davfs.c:2236 src/mount_davfs.c:2252 +#: src/mount_davfs.c:2174 src/mount_davfs.c:2190 #, c-format msgid "unknown option" msgstr "" -#: src/mount_davfs.c:2545 +#: src/mount_davfs.c:2496 #, c-format msgid "" "Usage:\n" @@ -525,14 +488,14 @@ msgid "" "\n" msgstr "" -#: src/mount_davfs.c:2549 +#: src/mount_davfs.c:2500 #, c-format msgid "" "To mount a WebDAV-resource don't call %s directly, but use\n" "`mount' instead.\n" msgstr "" -#: src/mount_davfs.c:2551 +#: src/mount_davfs.c:2502 #, c-format msgid "" " mount : or\n" @@ -540,7 +503,7 @@ msgid "" " /etc/fstab.\n" msgstr "" -#: src/mount_davfs.c:2554 +#: src/mount_davfs.c:2505 #, c-format msgid "" " mount -t davfs [-o options]\n" @@ -551,7 +514,7 @@ msgid "" "\n" msgstr "" -#: src/mount_davfs.c:2559 +#: src/mount_davfs.c:2510 #, c-format msgid "" "Recognised options:\n" @@ -562,7 +525,7 @@ msgid "" " dir_mode= : default directory mode (octal)\n" msgstr "" -#: src/mount_davfs.c:2565 +#: src/mount_davfs.c:2516 #, c-format msgid "" " ro : mount read-only\n" @@ -652,93 +615,81 @@ msgstr "" msgid "neon library does not support TLS/SSL" msgstr "" -#: src/webdav.c:437 -#, c-format -msgid "" -"Please enter the password to decrypt client\n" -"certificate %s.\n" -msgstr "" - -#: src/webdav.c:451 -#, c-format -msgid "can't decrypt client certificate %s" -msgstr "" - -#: src/webdav.c:505 src/webdav.c:508 +#: src/webdav.c:475 src/webdav.c:478 #, c-format msgid "mounting failed; the server does not support WebDAV" msgstr "" -#: src/webdav.c:516 +#: src/webdav.c:486 #, c-format msgid "warning: the server does not support locks" msgstr "" -#: src/webdav.c:1596 +#: src/webdav.c:1566 msgid "authentication failure:" msgstr "" -#: src/webdav.c:1634 +#: src/webdav.c:1604 #, c-format msgid "%i can't open cache file" msgstr "" -#: src/webdav.c:1642 +#: src/webdav.c:1612 #, c-format msgid "%i error writing to cache file" msgstr "" -#: src/webdav.c:1952 src/webdav.c:1981 src/webdav.c:2018 +#: src/webdav.c:1922 src/webdav.c:1951 src/webdav.c:1988 #, c-format msgid "the server certificate is not trusted" msgstr "" -#: src/webdav.c:1961 src/webdav.c:1964 +#: src/webdav.c:1931 src/webdav.c:1934 #, c-format msgid "error processing server certificate" msgstr "" -#: src/webdav.c:1975 src/webdav.c:2009 +#: src/webdav.c:1945 src/webdav.c:1979 #, c-format msgid "the server certificate is not yet valid" msgstr "" -#: src/webdav.c:1977 src/webdav.c:2012 +#: src/webdav.c:1947 src/webdav.c:1982 #, c-format msgid "the server certificate has expired" msgstr "" -#: src/webdav.c:1979 src/webdav.c:2015 +#: src/webdav.c:1949 src/webdav.c:1985 #, c-format msgid "the server certificate does not match the server name" msgstr "" -#: src/webdav.c:1983 src/webdav.c:2021 +#: src/webdav.c:1953 src/webdav.c:1991 #, c-format msgid "unknown certificate error" msgstr "" -#: src/webdav.c:1984 +#: src/webdav.c:1954 #, c-format msgid " issuer: %s" msgstr "" -#: src/webdav.c:1986 +#: src/webdav.c:1956 #, c-format msgid " subject: %s" msgstr "" -#: src/webdav.c:1988 +#: src/webdav.c:1958 #, c-format msgid " identity: %s" msgstr "" -#: src/webdav.c:1990 +#: src/webdav.c:1960 #, c-format msgid " fingerprint: %s" msgstr "" -#: src/webdav.c:1992 +#: src/webdav.c:1962 #, c-format msgid "" "You only should accept this certificate, if you can\n" @@ -746,26 +697,26 @@ msgid "" "or there might be a man-in-the-middle-attack.\n" msgstr "" -#: src/webdav.c:1995 +#: src/webdav.c:1965 #, c-format msgid "Accept certificate for this session? [y,N] " msgstr "" -#: src/webdav.c:2022 +#: src/webdav.c:1992 #, c-format msgid " issuer: %s" msgstr "" -#: src/webdav.c:2023 +#: src/webdav.c:1993 #, c-format msgid " subject: %s" msgstr "" -#: src/webdav.c:2024 +#: src/webdav.c:1994 #, c-format msgid " identity: %s" msgstr "" -#: src/webdav.c:2027 +#: src/webdav.c:1997 msgid " accepted by user" msgstr "" diff --git a/po/de.po b/po/de.po index 3f0113f..ef3dd8c 100644 --- a/po/de.po +++ b/po/de.po @@ -1,5 +1,5 @@ # davfs2 messages de. -# Copyright (C) 2008, 2009 Werner Baumann +# Copyright (C) 2008, 2009, 2013 Werner Baumann # This file is distributed under the same license as the PACKAGE package. # Werner Baumann , 2009. # @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: davfs2 1.5.0\n" "Report-Msgid-Bugs-To: http://savannah.nongnu.org/support/?" "func=additem&group=davfs2\n" -"POT-Creation-Date: 2012-02-01 18:13+0100\n" -"PO-Revision-Date: 2012-02-01 19:14+0100\n" +"POT-Creation-Date: 2013-08-09 12:39+0200\n" +"PO-Revision-Date: 2013-08-09 12:49+0100\n" "Last-Translator: Werner Baumann \n" "Language-Team: \n" "Language: de\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/cache.c:662 +#: src/cache.c:656 #, c-format msgid "" "connection timed out two times;\n" @@ -26,12 +26,12 @@ msgstr "" "die Verbindung wurde zweimal wegen Zeitüberschreitung abgebrochen;\n" "ich versuche es zum letzten mal" -#: src/cache.c:667 +#: src/cache.c:661 #, c-format msgid "Last try succeeded.\n" msgstr "Der letzte Versuch war erfolgreich.\n" -#: src/cache.c:670 +#: src/cache.c:664 #, c-format msgid "" "server temporarily unreachable;\n" @@ -40,7 +40,7 @@ msgstr "" "der Server ist zur Zeit nicht erreichbar;\n" "das Dateisystem wird trotzdem eingehängt" -#: src/cache.c:673 +#: src/cache.c:667 #, c-format msgid "" "Mounting failed.\n" @@ -49,22 +49,22 @@ msgstr "" "das Einhängen schlug fehl;\n" "%s" -#: src/cache.c:713 +#: src/cache.c:706 #, c-format msgid "can't replace %s with %s" msgstr "kann %s nicht durch %s ersetzen" -#: src/cache.c:717 +#: src/cache.c:710 #, c-format msgid "error writing new index file %s" msgstr "Fehler beim Schreiben der neuen Indexdatei %s" -#: src/cache.c:721 +#: src/cache.c:714 #, c-format msgid "can't create new index file for %s" msgstr "kann keine neue Indexdatei für %s erzeugen" -#: src/cache.c:943 +#: src/cache.c:925 #, c-format msgid "" "File %s exists on the server but should not. Maybe it is an error in the " @@ -74,191 +74,156 @@ msgstr "" "behandelt der Server LOCK-Requests fehlerhaft. Du kannst es mit der Option " "'use_locks 0' in davfs2.conf versuchen." -#: src/cache.c:2565 src/cache.c:2598 +#: src/cache.c:2512 src/cache.c:2545 #, c-format msgid "can't create cache file %s" msgstr "kann die Cachedatei %s nicht erzeugen" -#: src/cache.c:2613 +#: src/cache.c:2560 #, c-format msgid "error writing directory %s" msgstr "Fehler beim Schreiben des Verzeichnisses %s" -#: src/cache.c:2781 src/mount_davfs.c:1162 +#: src/cache.c:2723 src/mount_davfs.c:1013 #, c-format msgid "can't read user data base" msgstr "kann die Benutzerdatenbank nicht lesen" -#: src/cache.c:2793 +#: src/cache.c:2735 #, c-format msgid "can't open cache directory %s" msgstr "kann das Cacheverzeichnis %s nicht öffnen" -#: src/cache.c:2808 +#: src/cache.c:2750 #, c-format msgid "can't create cache directory %s" msgstr "kann das Cacheverzeichnis %s nicht erzeugen" -#: src/cache.c:2815 +#: src/cache.c:2757 #, c-format msgid "can't access cache directory %s" msgstr "Zugriff auf das Cachverzeichnis %s verweigert" -#: src/cache.c:2818 +#: src/cache.c:2760 #, c-format msgid "wrong owner of cache directory %s" msgstr "das Cacheverzeichnis %s hat den falschen Besitzer" -#: src/cache.c:2822 +#: src/cache.c:2764 #, c-format msgid "wrong permissions set for cache directory %s" msgstr "das Cachverzeichnis %s hat die falschen Dateirechte" -#: src/cache.c:2852 +#: src/cache.c:2794 msgid "found orphaned file in cache:" msgstr "fand verwaiste Datei im Cache:" -#: src/cache.c:2925 +#: src/cache.c:2867 #, c-format msgid "error parsing %s" msgstr "Syntaxfehler in %s" -#: src/cache.c:2926 +#: src/cache.c:2868 #, c-format msgid " at line %i" msgstr " in Zeile %i" -#: src/cache.c:2971 +#: src/cache.c:2913 #, 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:173 src/dav_fuse.c:173 -msgid "can't allocate message buffer" -msgstr "kein Speicher für den Nachrichtenpuffer verfügbar" - -#: src/kernel_interface.c:114 -#, c-format -msgid "trying fuse kernel file system" -msgstr "ich versuche es mit dem Kernel-Dateisystem fuse" - -#: src/kernel_interface.c:121 -#, c-format -msgid "fuse device opened successfully" -msgstr "fuse-Gerätedatei erfolgreich geöffnet" - -#: src/kernel_interface.c:133 -#, c-format -msgid "trying coda kernel file system" -msgstr "ich versuche es mit dem Kernel-Dateisystem coda" - -#: src/kernel_interface.c:137 -#, c-format -msgid "coda device opened successfully" -msgstr "coda-Gerätedatei erfolgreich geöffnet" - -#: src/kernel_interface.c:145 -#, c-format -msgid "unknown kernel file system %s" -msgstr "das Kernel-Dateisystem %s ist unbekannt" - -#: src/kernel_interface.c:189 -#, c-format -msgid "no free coda device to mount" -msgstr "keine freie coda-Gerätedatei gefunden" - -#: src/kernel_interface.c:198 -#, c-format -msgid "CODA_KERNEL_VERSION %u not supported" -msgstr "CODA_KERNEL_VERSION %u wird nicht unterstützt" - -#: src/kernel_interface.c:235 +#: src/kernel_interface.c:209 #, c-format msgid "can't open fuse device" msgstr "kann die fuse-Gerätedatei nicht öffnen" -#: src/kernel_interface.c:259 +#: src/kernel_interface.c:217 #, c-format -msgid "can't mount using fuse kernel file system" -msgstr "" -"mit Kernel-Dateisystem fuse kann das Dateisystem nicht eingehängt werden" +msgid "mounting failed" +msgstr "das Aushängen schlug fehl" -#: src/mount_davfs.c:316 +#: src/kernel_interface.c:226 +#, c-format +msgid "can't allocate message buffer" +msgstr "kein Speicher für den Nachrichtenpuffer verfügbar" + +#: src/mount_davfs.c:294 #, c-format msgid "can't start daemon process" msgstr "kann den Hintergrundprozess nicht starten" -#: src/mount_davfs.c:338 +#: src/mount_davfs.c:316 msgid "can't release root privileges" msgstr "ich werde die root-Rechte nicht los" -#: src/mount_davfs.c:358 +#: src/mount_davfs.c:333 msgid "failed to release tty properly" msgstr "kann das Terminal nicht freigeben" -#: src/mount_davfs.c:370 +#: src/mount_davfs.c:345 #, c-format msgid "can't write pid file %s" msgstr "kann die PID-Datei %s nicht schreiben" -#: src/mount_davfs.c:388 +#: src/mount_davfs.c:362 #, c-format msgid "unmounting %s" msgstr "hänge %s aus" -#: src/mount_davfs.c:390 +#: src/mount_davfs.c:364 msgid "unmounting failed" msgstr "das Aushängen schlug fehl" -#: src/mount_davfs.c:442 +#: src/mount_davfs.c:435 #, c-format msgid "can't change group id" msgstr "kann die Gruppenkennung nicht ändern" -#: src/mount_davfs.c:483 src/mount_davfs.c:577 src/mount_davfs.c:603 +#: src/mount_davfs.c:473 src/mount_davfs.c:567 src/mount_davfs.c:593 #, c-format msgid "can't create directory %s" msgstr "kann das Verzeichnis %s nicht erzeugen" -#: src/mount_davfs.c:487 src/mount_davfs.c:581 src/mount_davfs.c:607 -#: src/mount_davfs.c:612 src/mount_davfs.c:620 +#: src/mount_davfs.c:477 src/mount_davfs.c:571 src/mount_davfs.c:597 +#: src/mount_davfs.c:602 src/mount_davfs.c:610 #, c-format msgid "can't access directory %s" msgstr "Zugriff auf das Verzeichnis %s verweigert" -#: src/mount_davfs.c:493 src/mount_davfs.c:587 +#: src/mount_davfs.c:483 src/mount_davfs.c:577 #, c-format msgid "can't change mode of directory %s" msgstr "kann die Rechte des Verzeichnisses %s nicht ändern" -#: src/mount_davfs.c:498 src/mount_davfs.c:593 +#: src/mount_davfs.c:488 src/mount_davfs.c:583 #, c-format msgid "can't change group of directory %s" msgstr "kann die Gruppenkennung des Verneichnisses %s nicht ändern" -#: src/mount_davfs.c:505 src/mount_davfs.c:561 +#: src/mount_davfs.c:495 src/mount_davfs.c:551 #, c-format msgid "file %s has wrong owner" msgstr "die Datei %s hat den falschen Besitzer" -#: src/mount_davfs.c:509 src/mount_davfs.c:566 +#: src/mount_davfs.c:499 src/mount_davfs.c:556 #, c-format msgid "file %s has wrong permissions" msgstr "die Dateirechte für %s sind falsch" -#: src/mount_davfs.c:638 src/mount_davfs.c:692 +#: src/mount_davfs.c:628 src/mount_davfs.c:680 #, c-format msgid "can't open file %s" msgstr "kann die Datei %s nicht öffnen" -#: src/mount_davfs.c:643 +#: src/mount_davfs.c:633 #, c-format msgid "%s is already mounted on %s" msgstr "%s ist bereits auf %s eingehängt" -#: src/mount_davfs.c:665 +#: src/mount_davfs.c:655 #, c-format msgid "" "found PID file %s.\n" @@ -269,99 +234,84 @@ msgstr "" "Möglicherweise wird %s von einem anderen Prozess benutzt,\n" "oder ein anderer Mount-Prozess endete irregulär" -#: src/mount_davfs.c:709 +#: src/mount_davfs.c:697 #, c-format msgid "no entry for %s found in %s" msgstr "für %s ist kein Eintrag in %s" -#: src/mount_davfs.c:713 +#: src/mount_davfs.c:701 #, c-format msgid "different URL in %s" msgstr "in %s ist eine andere URL angegeben" -#: src/mount_davfs.c:716 +#: src/mount_davfs.c:704 #, c-format msgid "different file system type in %s" msgstr "in %s ist ein anderer Dateisystemtyp angegeben" -#: src/mount_davfs.c:727 +#: src/mount_davfs.c:715 #, c-format msgid "different config file in %s" msgstr "in %s ist eine andere Konfigurationsdatei angegeben" -#: src/mount_davfs.c:733 +#: src/mount_davfs.c:721 #, c-format msgid "different username in %s" msgstr "in %s ist ein anderer Benutzername angegeben" -#: src/mount_davfs.c:737 +#: src/mount_davfs.c:725 #, c-format msgid "neither option `user' nor option `users' set in %s" msgstr "in %s ist weder die Option „user” noch die Option „users” angegeben" -#: src/mount_davfs.c:740 +#: src/mount_davfs.c:728 #, c-format msgid "different mount options in %s" msgstr "in %s sind andere Mount-Optionen angegeben" -#: src/mount_davfs.c:743 +#: src/mount_davfs.c:731 #, c-format msgid "different uid in %s" msgstr "in %s ist eine andere uid angegeben" -#: src/mount_davfs.c:745 +#: src/mount_davfs.c:733 #, c-format msgid "different gid in %s" msgstr "in %s ist eine andere gid angegeben" -#: src/mount_davfs.c:747 +#: src/mount_davfs.c:735 #, c-format msgid "different dir_mode in %s" msgstr "in %s ist ein anderer dir_mode angegeben" -#: src/mount_davfs.c:749 +#: src/mount_davfs.c:737 #, c-format msgid "different file_mode in %s" msgstr "in %s ist ein anderer file_mode angegeben" -#: src/mount_davfs.c:770 +#: src/mount_davfs.c:757 #, c-format 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:782 +#: src/mount_davfs.c:769 #, c-format 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:793 +#: src/mount_davfs.c:780 #, 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:814 -#, c-format -msgid "can't mount %s on %s" -msgstr "kann %s nicht auf %s einhängen" - -#: src/mount_davfs.c:816 -#, c-format -msgid "kernel does not know file system %s" -msgstr "der Kernel kenn das Dateisystem %s nicht" - -#: src/mount_davfs.c:818 -#, c-format -msgid "mount point is busy" -msgstr "das Einhängepunkt wird anderweitig benutzt" - -#: src/mount_davfs.c:837 src/mount_davfs.c:1275 +#: src/mount_davfs.c:800 src/mount_davfs.c:1139 #, c-format msgid "can't change effective user id" msgstr "kann die effektive Benutzer-ID nicht ändern" -#: src/mount_davfs.c:908 src/umount_davfs.c:92 +#: src/mount_davfs.c:844 src/umount_davfs.c:92 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -372,91 +322,67 @@ msgstr "" "gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE " "ZWECKE.\n" -#: src/mount_davfs.c:924 src/umount_davfs.c:117 +#: src/mount_davfs.c:860 src/umount_davfs.c:117 #, c-format msgid "unknown error parsing arguments" msgstr "Fehler beim Analysieren der Befehlsargumente" -#: src/mount_davfs.c:933 src/umount_davfs.c:123 +#: src/mount_davfs.c:869 src/umount_davfs.c:123 #, c-format msgid "missing argument" msgstr "zu wenig Argumente" -#: src/mount_davfs.c:946 +#: src/mount_davfs.c:882 #, 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:949 src/umount_davfs.c:125 +#: src/mount_davfs.c:885 src/umount_davfs.c:125 #, c-format msgid "too many arguments" msgstr "zu viele Argumente" -#: src/mount_davfs.c:956 +#: src/mount_davfs.c:892 #, c-format 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:961 +#: src/mount_davfs.c:897 #, c-format msgid "no WebDAV-server specified" msgstr "es wurde kein WebDAV-Server angegeben" -#: src/mount_davfs.c:964 +#: src/mount_davfs.c:900 #, c-format msgid "invalid URL" msgstr "die URL ist ungültig" -#: src/mount_davfs.c:1005 +#: src/mount_davfs.c:930 #, c-format msgid "user %s does not exist" msgstr "der Benutzer %s existiert nicht" -#: src/mount_davfs.c:1013 +#: src/mount_davfs.c:938 #, c-format msgid "group %s does not exist" msgstr "die Gruppe %s existiert nicht" -#: src/mount_davfs.c:1042 src/mount_davfs.c:1069 -#, c-format -msgid "can't read server certificate %s" -msgstr "kann das Server-Zertifikat %s nicht lesen" - -#: src/mount_davfs.c:1099 src/webdav.c:432 -#, c-format -msgid "can't read client certificate %s" -msgstr "kann das Client-Zertifikat %s nicht lesen" - -#: src/mount_davfs.c:1104 -#, 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:1110 -#, 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:1153 +#: src/mount_davfs.c:1004 #, c-format msgid "program is not setuid root" msgstr "die Programmdatei hat das setuid-Bit nicht gesetzt" -#: src/mount_davfs.c:1171 +#: src/mount_davfs.c:1022 #, c-format msgid "can't read group data base" msgstr "kann die Gruppendatenbank nicht lesen" -#: src/mount_davfs.c:1201 src/mount_davfs.c:1214 src/mount_davfs.c:1216 -#: src/mount_davfs.c:1234 src/mount_davfs.c:1236 src/webdav.c:439 +#: src/mount_davfs.c:1049 src/mount_davfs.c:1062 src/mount_davfs.c:1064 +#: src/mount_davfs.c:1082 src/mount_davfs.c:1084 src/mount_davfs.c:1099 msgid "Password: " msgstr "Passwort:" -#: src/mount_davfs.c:1205 +#: src/mount_davfs.c:1053 #, c-format msgid "" "Please enter the username to authenticate with proxy\n" @@ -465,11 +391,11 @@ msgstr "" "Gib bitte den Benutzernamen für den Proxy %s an; wenn du keinen angeben " "willst, drücke Return.\n" -#: src/mount_davfs.c:1207 src/mount_davfs.c:1227 +#: src/mount_davfs.c:1055 src/mount_davfs.c:1075 msgid "Username:" msgstr "Benutzername:" -#: src/mount_davfs.c:1211 +#: src/mount_davfs.c:1059 #, c-format msgid "" "Please enter the password to authenticate user %s with proxy\n" @@ -478,7 +404,7 @@ 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:1225 +#: src/mount_davfs.c:1073 #, c-format msgid "" "Please enter the username to authenticate with server\n" @@ -487,7 +413,7 @@ msgstr "" "Gib bitte den Benutzernamen für den Server %s an; wenn du keinen angeben " "willst, drücke Return.\n" -#: src/mount_davfs.c:1231 +#: src/mount_davfs.c:1079 #, c-format msgid "" "Please enter the password to authenticate user %s with server\n" @@ -496,12 +422,26 @@ 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:1303 +#: src/mount_davfs.c:1097 +#, 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/mount_davfs.c:1104 +#, c-format +msgid "can't decrypt client certificate %s" +msgstr "kann das Zertifikat %s nicht entschlüsseln" + +#: src/mount_davfs.c:1167 #, c-format msgid "pid %i, got signal %i" msgstr "PID %i, erhielt Signal %i" -#: src/mount_davfs.c:1343 +#: src/mount_davfs.c:1206 #, c-format msgid "" "Warning: can't write entry into mtab, but will mount the file system anyway" @@ -509,48 +449,72 @@ msgstr "" "Warnung: kann keinen Eintrag in die mtab schreiben, häne das Dateisystem " "trotzdem ein." -#: src/mount_davfs.c:1369 +#: src/mount_davfs.c:1232 #, 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:1372 +#: src/mount_davfs.c:1235 #, 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:1375 +#: src/mount_davfs.c:1238 #, 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:1652 +#: src/mount_davfs.c:1513 #, c-format msgid "option %s requires argument" msgstr "die Option %s verlangt ein Argument" -#: src/mount_davfs.c:1744 +#: src/mount_davfs.c:1605 #, c-format msgid "Unknown option %s.\n" msgstr "unbekannte Option %s.\n" -#: src/mount_davfs.c:2100 src/mount_davfs.c:2330 +#: src/mount_davfs.c:1976 +#, c-format +msgid "can't read certificate %s" +msgstr "kann das Zertifikat %s nicht lesen" + +#: src/mount_davfs.c:2008 src/mount_davfs.c:2021 +#, c-format +msgid "can't read client certificate %s" +msgstr "kann das Client-Zertifikat %s nicht lesen" + +#: src/mount_davfs.c:2012 +#, 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:2016 +#, 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:2038 src/mount_davfs.c:2266 #, c-format msgid "opening %s failed" msgstr "konnte %s nicht öffnen" -#: src/mount_davfs.c:2121 src/mount_davfs.c:2166 src/mount_davfs.c:2258 -#: src/mount_davfs.c:2346 src/mount_davfs.c:2413 +#: src/mount_davfs.c:2059 src/mount_davfs.c:2104 src/mount_davfs.c:2196 +#: src/mount_davfs.c:2293 src/mount_davfs.c:2351 src/mount_davfs.c:2364 #, c-format msgid "malformed line" msgstr "Syntaxfehler in der Zeile" -#: src/mount_davfs.c:2236 src/mount_davfs.c:2252 +#: src/mount_davfs.c:2174 src/mount_davfs.c:2190 #, c-format msgid "unknown option" msgstr "unbekannte Option" -#: src/mount_davfs.c:2545 +#: src/mount_davfs.c:2496 #, c-format msgid "" "Usage:\n" @@ -563,7 +527,7 @@ msgstr "" " %s -h, --help : diese Hilfe anzeigen\n" "\n" -#: src/mount_davfs.c:2549 +#: src/mount_davfs.c:2500 #, c-format msgid "" "To mount a WebDAV-resource don't call %s directly, but use\n" @@ -572,7 +536,7 @@ 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:2551 +#: src/mount_davfs.c:2502 #, c-format msgid "" " mount : or\n" @@ -583,7 +547,7 @@ msgstr "" " mount : hänge die WebDAV-Resource entsprechend den\n" " Angaben in /etc/fstab ein.\n" -#: src/mount_davfs.c:2554 +#: src/mount_davfs.c:2505 #, c-format msgid "" " mount -t davfs [-o options]\n" @@ -600,7 +564,7 @@ msgstr "" " Kommas unterteilte Liste von Optionen.\n" "\n" -#: src/mount_davfs.c:2559 +#: src/mount_davfs.c:2510 #, c-format msgid "" "Recognised options:\n" @@ -617,7 +581,7 @@ msgstr "" " file_mode= : Standard-Rechte für Dateien (oktal)\n" " dir_mode= : Standard-Rechte für Verzeichnisse (oktal)\n" -#: src/mount_davfs.c:2565 +#: src/mount_davfs.c:2516 #, c-format msgid "" " ro : mount read-only\n" @@ -735,95 +699,81 @@ msgstr "kann die Ausgabe für neon-Log-Meldungen nicht öffnen" msgid "neon library does not support TLS/SSL" msgstr "die Neon-Bibliothek uterstützt TLS/SSL nicht" -#: src/webdav.c:437 -#, 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:451 -#, c-format -msgid "can't decrypt client certificate %s" -msgstr "kann das Zertifikat %s nicht entschlüsseln" - -#: src/webdav.c:505 src/webdav.c:508 +#: src/webdav.c:475 src/webdav.c:478 #, c-format msgid "mounting failed; the server does not support WebDAV" msgstr "das Einhängen schlug fehl; der Server unterstützt WebDAV nicht" -#: src/webdav.c:516 +#: src/webdav.c:486 #, c-format msgid "warning: the server does not support locks" msgstr "Warnung: der Server kann Dateien nicht sperren" -#: src/webdav.c:1596 +#: src/webdav.c:1566 msgid "authentication failure:" msgstr "Authentifizierungsfehler" -#: src/webdav.c:1634 +#: src/webdav.c:1604 #, c-format msgid "%i can't open cache file" msgstr "%i kann die Cache-Datei nicht öffnen" -#: src/webdav.c:1642 +#: src/webdav.c:1612 #, c-format msgid "%i error writing to cache file" msgstr "%i Fehler beim Schreiben der Cache-Datei" -#: src/webdav.c:1952 src/webdav.c:1981 src/webdav.c:2018 +#: src/webdav.c:1922 src/webdav.c:1951 src/webdav.c:1988 #, c-format msgid "the server certificate is not trusted" msgstr "wir trauen dem Zertifikat nicht" -#: src/webdav.c:1961 src/webdav.c:1964 +#: src/webdav.c:1931 src/webdav.c:1934 #, c-format msgid "error processing server certificate" msgstr "Fehler beim Analysieren des Server-Zertifikats" -#: src/webdav.c:1975 src/webdav.c:2009 +#: src/webdav.c:1945 src/webdav.c:1979 #, c-format msgid "the server certificate is not yet valid" msgstr "das Server-Zertifikat ist noch nicht gültig" -#: src/webdav.c:1977 src/webdav.c:2012 +#: src/webdav.c:1947 src/webdav.c:1982 #, c-format msgid "the server certificate has expired" msgstr "das Server-Zertifikat ist nicht mehr gültig" -#: src/webdav.c:1979 src/webdav.c:2015 +#: src/webdav.c:1949 src/webdav.c:1985 #, c-format msgid "the server certificate does not match the server name" msgstr "das Server-Zertifikat passt nicht zum Namen des Servers" -#: src/webdav.c:1983 src/webdav.c:2021 +#: src/webdav.c:1953 src/webdav.c:1991 #, c-format msgid "unknown certificate error" msgstr "Fehler beim Analysieren des Server-Zertifikats" -#: src/webdav.c:1984 +#: src/webdav.c:1954 #, c-format msgid " issuer: %s" msgstr " Aussteller: %s" -#: src/webdav.c:1986 +#: src/webdav.c:1956 #, c-format msgid " subject: %s" msgstr " Inhaber: %s" -#: src/webdav.c:1988 +#: src/webdav.c:1958 #, c-format msgid " identity: %s" msgstr " Name: %s" -#: src/webdav.c:1990 +#: src/webdav.c:1960 #, c-format msgid " fingerprint: %s" msgstr " Fingerabdruck: %s" -#: src/webdav.c:1992 +#: src/webdav.c:1962 #, c-format msgid "" "You only should accept this certificate, if you can\n" @@ -834,26 +784,28 @@ msgstr "" "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:1995 +#: src/webdav.c:1965 #, c-format msgid "Accept certificate for this session? [y,N] " msgstr "Ich akzeptiere das Zertifikat für diese Sitzung [j,N]: " -#: src/webdav.c:2022 +#: src/webdav.c:1992 #, c-format msgid " issuer: %s" msgstr " Aussteller des Zertifikats: %s" -#: src/webdav.c:2023 +#: src/webdav.c:1993 #, c-format msgid " subject: %s" msgstr " Inhaber des Zertifikats: %s" -#: src/webdav.c:2024 +#: src/webdav.c:1994 #, c-format msgid " identity: %s" msgstr " Name: %s" -#: src/webdav.c:2027 +#: src/webdav.c:1997 msgid " accepted by user" msgstr " durch den Benutzer akzeptiert" + + diff --git a/src/Makefile.am b/src/Makefile.am index 252ce1b..44a4e17 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -26,9 +26,9 @@ 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 \ +mount_davfs_SOURCES = cache.c \ + kernel_interface.c mount_davfs.c webdav.c \ + cache.h defaults.h fuse_kernel.h \ kernel_interface.h mount_davfs.h webdav.h umount_davfs_SOURCES = umount_davfs.c defaults.h diff --git a/src/cache.c b/src/cache.c index c084653..3ed19da 100644 --- a/src/cache.c +++ b/src/cache.c @@ -223,11 +223,6 @@ static off_t write_dir_entry_dummy(int fd, off_t off, const dav_node *node, } static dav_write_dir_entry_fn write_dir_entry = write_dir_entry_dummy; -/* Points to a flag in the kernel interface module. If set to 1, at the end of - the upcall the kernel dentries will be flushed. */ -static int flush_dummy; -static int *flush = &flush_dummy; - /* Whether to create debug messages. */ static int debug; @@ -365,7 +360,7 @@ get_child(const dav_node *parent, const char *name) } static dav_handle * -get_file_handle(dav_node * node, int fd, int accmode, pid_t pid, pid_t pgid); +get_file_handle(dav_node * node, int fd); static int has_permission(const dav_node *node, uid_t uid, int how); @@ -473,8 +468,7 @@ set_cache_file_times(dav_node *node) } static int -open_file(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, - uid_t uid); +open_file(int *fd, dav_node *node, int flags); static int update_cache_file(dav_node *node); @@ -685,7 +679,6 @@ dav_close_cache(int got_sigterm) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Closing cache"); write_dir_entry = &write_dir_entry_dummy; - flush = &flush_dummy; clean_tree(root, !got_sigterm); @@ -725,18 +718,11 @@ dav_close_cache(int got_sigterm) size_t -dav_register_kernel_interface(dav_write_dir_entry_fn write_fn, int *flush_flag, - unsigned int *blksize) +dav_register_kernel_interface(dav_write_dir_entry_fn write_fn) { if (write_fn) write_dir_entry = write_fn; - if (flush_flag) - flush = flush_flag; - - if (blksize) - *blksize = fs_stat->bsize; - return alignment; } @@ -797,7 +783,6 @@ dav_tidy_cache(void) delete_cache_file(node->parent); node->parent->utime = 0; remove_node(node); - *flush = 1; } } } else if (is_locked(node) && !is_dirty(node) && !is_created(node) @@ -842,9 +827,7 @@ dav_close(dav_node *node, int fd, int flags, pid_t pid, pid_t pgid) if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " close %s", node->path); - dav_handle *fh = get_file_handle(node, fd, - is_dir(node) ? O_RDWR : flags & O_ACCMODE, - pid, pgid); + dav_handle *fh = get_file_handle(node, fd); if (!fh) return EBADF; @@ -853,7 +836,6 @@ dav_close(dav_node *node, int fd, int flags, pid_t pid, pid_t pgid) if (!node->parent && node != root && !is_open(node)) { remove_from_table(node); delete_node(node); - *flush = 1; return 0; } @@ -894,7 +876,6 @@ dav_close(dav_node *node, int fd, int flags, pid_t pid, pid_t pgid) delete_cache_file(node->parent); node->parent->utime = 0; remove_node(node); - *flush = 1; } } } @@ -953,7 +934,6 @@ dav_create(dav_node **nodep, dav_node *parent, const char *name, uid_t uid, &(*nodep)->mime_type); (*nodep)->utime = (*nodep)->smtime; delete_cache_file(parent); - *flush = 1; parent->mtime = (*nodep)->mtime; parent->ctime = (*nodep)->mtime; add_to_changed(*nodep); @@ -1117,7 +1097,6 @@ dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid, (*nodep)->smtime = (*nodep)->mtime; (*nodep)->utime = (*nodep)->mtime; delete_cache_file(parent); - *flush = 1; parent->mtime = (*nodep)->mtime; parent->ctime = (*nodep)->mtime; } else { @@ -1129,8 +1108,7 @@ dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid, int -dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid, - int open_create) +dav_open(int *fd, dav_node *node, int flags, uid_t uid, int open_create) { if (!is_valid(node)) return ENOENT; @@ -1157,7 +1135,7 @@ dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid, if (create_dir_cache_file(node) != 0) return EIO; node->atime = time(NULL); - return open_file(fd, node, O_RDWR, pid, pgid, uid); + return open_file(fd, node, O_RDWR); } int ret = 0; @@ -1165,7 +1143,7 @@ dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid, ret = update_cache_file(node); if (!ret) - ret = open_file(fd, node, flags & O_ACCMODE, pid, pgid, uid); + ret = open_file(fd, node, flags & O_ACCMODE); } else { @@ -1177,14 +1155,12 @@ dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid, ret = create_cache_file(node); if (!ret) { ret = open_file(fd, node, - flags & (O_ACCMODE | O_TRUNC | O_APPEND), - pid, pgid, uid); + flags & (O_ACCMODE | O_TRUNC | O_APPEND)); } } else if (!ret) { ret = update_cache_file(node); if (!ret) - ret = open_file(fd, node, flags & (O_ACCMODE | O_APPEND), - pid, pgid, uid); + ret = open_file(fd, node, flags & (O_ACCMODE | O_APPEND)); } if (!ret) @@ -1202,7 +1178,7 @@ dav_read(ssize_t *len, dav_node * node, int fd, char *buf, size_t size, if (!exists(node)) return ENOENT; - dav_handle *fh = get_file_handle(node, fd, 0, 0, 0); + dav_handle *fh = get_file_handle(node, fd); if (!fh) return EBADF; if (fh->flags == O_WRONLY) @@ -1247,7 +1223,6 @@ dav_remove(dav_node *parent, const char *name, uid_t uid) if (!node) { delete_cache_file(parent); parent->utime = 0; - *flush = 1; return ENOENT; } if (is_dir(node)) @@ -1277,7 +1252,6 @@ dav_remove(dav_node *parent, const char *name, uid_t uid) delete_cache_file(parent); parent->mtime = time(NULL); parent->ctime = parent->mtime; - *flush = 1; return 0; } @@ -1309,7 +1283,6 @@ dav_rename(dav_node *src_parent, const char *src_name, dav_node *dst_parent, if (!src) { delete_cache_file(src_parent); src_parent->utime = 0; - *flush = 1; return ENOENT; } if (src == backup || (dst && is_backup(dst))) @@ -1341,7 +1314,6 @@ dav_rename(dav_node *src_parent, const char *src_name, dav_node *dst_parent, delete_cache_file(dst_parent); dst_parent->mtime = time(NULL); dst_parent->ctime = dst_parent->mtime; - *flush = 1; } return ret; @@ -1366,7 +1338,6 @@ dav_rmdir(dav_node *parent, const char *name, uid_t uid) if (!node) { delete_cache_file(parent); parent->utime = 0; - *flush = 1; return ENOENT; } if (node == backup) @@ -1382,7 +1353,6 @@ dav_rmdir(dav_node *parent, const char *name, uid_t uid) delete_cache_file(parent); parent->mtime = time(NULL); parent->ctime = parent->mtime; - *flush = 1; } return ret; @@ -1595,7 +1565,7 @@ dav_write(size_t *written, dav_node * node, int fd, char *buf, size_t size, if (is_dir(node)) return EBADF; - dav_handle *fh = get_file_handle(node, fd, 0, 0, 0); + dav_handle *fh = get_file_handle(node, fd); if (!fh) return EBADF; if (fh->flags == O_RDONLY) @@ -1722,7 +1692,6 @@ backup_node(dav_node *orig) delete_cache_file(backup); backup->mtime = time(NULL); backup->ctime = backup->mtime; - *flush = 1; } @@ -2185,8 +2154,7 @@ remove_node(dav_node *node) function will do nothing. utime and retry will be updated. If the contents or the mtime of the dir has changed, the dir-cache-file - will be deleted and the flush flag will be set to force new lookups - by the kernel. */ + will be deleted. */ static int update_directory(dav_node *dir, time_t refresh) { @@ -2252,7 +2220,6 @@ update_directory(dav_node *dir, time_t refresh) if (changed) { delete_cache_file(dir); - *flush = 1; } if (debug) { @@ -2268,8 +2235,6 @@ update_directory(dav_node *dir, time_t refresh) If props is incompatibel with node or indicates a lost update problem, a new node is created from props and the old node is deleted, creating a local back up if necessary. - If nodes are removed or created, flag flush is set, to force new lookups - by the kernel. node : The node to be updated. It must not be the root node and have a valid parent. props : The properties retrieved from the server. They will be freed. @@ -2294,7 +2259,6 @@ update_node(dav_node *node, dav_props *props) || (!is_dir(node) && props->is_dir)) { add_node(node->parent, props); remove_node(node); - *flush = 1; return 1; } @@ -2302,14 +2266,12 @@ update_node(dav_node *node, dav_props *props) free(node->name); node->name = xstrdup(props->name); ret = 1; - *flush = 1; } if (is_created(node)) { if (!is_open(node) && (props->size > 0)) { add_node(node->parent, props); remove_node(node); - *flush = 1; return 1; } else { dav_delete_props(props); @@ -2328,11 +2290,9 @@ update_node(dav_node *node, dav_props *props) } else if (is_dirty(node)) { add_node(node->parent, props); remove_node(node); - *flush = 1; return 1; } else { delete_cache_file(node); - *flush = 1; } } else { node->utime = time(NULL); @@ -2348,7 +2308,6 @@ update_node(dav_node *node, dav_props *props) node->smtime = props->mtime; node->utime = 0; delete_cache_file(node); - *flush = 1; } if (props->ctime > node->ctime) node->ctime = props->ctime; @@ -2365,15 +2324,12 @@ update_node(dav_node *node, dav_props *props) node->mode |= (node->mode & S_IWGRP) ? S_IXGRP : 0; node->mode |= (node->mode & S_IWOTH) ? S_IXOTH : 0; node->mode &= ~file_umask; - *flush = 1; } else if (props->is_exec == 0 && (node->mode & (S_IXUSR | S_IXGRP | S_IXOTH))) { node->mode &= ~(S_IXUSR | S_IXGRP | S_IXOTH); - *flush = 1; } if (props->size && props->size != node->size) { node->size = props->size; - *flush = 1; } } @@ -2399,7 +2355,6 @@ update_path(dav_node *node, const char *src_path, const char *dst_path) if (!node->path || strstr(node->path, src_path) != node->path) { delete_cache_file(node->parent); node->parent->utime = 0; - *flush = 1; return; } @@ -2422,28 +2377,17 @@ exists(const dav_node *node) if (n) { return 1; } else { - *flush = 1; return 0; } } static dav_handle * -get_file_handle(dav_node * node, int fd, int accmode, pid_t pid, pid_t pgid) +get_file_handle(dav_node * node, int fd) { dav_handle *fh = node->handles; - if (fd) { - while (fh && fh->fd != fd) - fh = fh->next; - } else { - while (fh && (fh->flags != accmode || fh->pid != pid)) - fh = fh->next; - if (!fh) { - fh = node->handles; - while (fh && (fh->flags != accmode || fh->pgid != pgid)) - fh = fh->next; - } - } + while (fh && fh->fd != fd) + fh = fh->next; return fh; } @@ -2627,7 +2571,7 @@ create_dir_cache_file(dav_node *dir) of handles. return value : 0 on success, EIO if the file could not be opend. */ static int -open_file(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid) +open_file(int *fd, dav_node *node, int flags) { *fd = open(node->cache_path, flags, node->mode); if (*fd <= 0) @@ -2635,9 +2579,6 @@ open_file(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid) dav_handle *fh = (dav_handle *) xmalloc(sizeof(dav_handle)); fh->fd = *fd; fh->flags = O_ACCMODE & flags; - fh->pid = pid; - fh->pgid = pgid; - fh->uid = uid; fh->next = node->handles; node->handles = fh; if ((O_ACCMODE & flags) == O_WRONLY || (O_ACCMODE & flags) == O_RDWR) @@ -2683,7 +2624,6 @@ update_cache_file(dav_node *node) || ret == EPERM || ret == ENOSPC) { delete_cache_file(node->parent); node->parent->utime = 0; - *flush = 1; remove_node(node); ret = EIO; } @@ -2735,7 +2675,6 @@ update_cache_file(dav_node *node) if (ret == ENOENT) { delete_cache_file(node->parent); node->parent->utime = 0; - *flush = 1; remove_node(node); } delete_cache_file(node); diff --git a/src/cache.h b/src/cache.h index e3dc6b7..95f29bd 100644 --- a/src/cache.h +++ b/src/cache.h @@ -33,17 +33,12 @@ /*============*/ /* 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. */ + list. */ 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. */ }; @@ -207,11 +202,9 @@ 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); +dav_register_kernel_interface(dav_write_dir_entry_fn write_fn); /* Scans the hash table for file nodes to be saved them back on the server, @@ -333,8 +326,7 @@ dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid, /* 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. + fd. fd 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: @@ -346,8 +338,7 @@ dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid, O_CREATE. It allows dav_open to succeed if when the file mode would not allow this. */ int -dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid, - int open_create); +dav_open(int *fd, dav_node *node, int flags, uid_t uid, int open_create); /* Reads size bytes from file descriptor fd, starting at position offset and copies them into buf. diff --git a/src/coda.h b/src/coda.h deleted file mode 100644 index e410496..0000000 --- a/src/coda.h +++ /dev/null @@ -1,643 +0,0 @@ -/* 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 - diff --git a/src/dav_coda.c b/src/dav_coda.c deleted file mode 100644 index 0422b33..0000000 --- a/src/dav_coda.c +++ /dev/null @@ -1,824 +0,0 @@ -/* 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 -#ifdef HAVE_FCNTL_H -#include -#endif -#ifdef HAVE_LIBINTL_H -#include -#endif -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_STDDEF_H -#include -#endif -#ifdef HAVE_STDINT_H -#include -#endif -#include -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_SYSLOG_H -#include -#endif -#include -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#include - -#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 = ENOSYS; - 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 = ENOSYS; - 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 = ENOSYS; - 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 = ENOSYS; - len = sizeof(struct coda_out_hdr); - break; - case CODA_READLINK: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "CODA_READLINK:"); - oh->result = ENOSYS; - 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 = ENOSYS; - 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 = ENOSYS; - 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 = ENOSYS; - 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, 0); - - 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(); - if (!st) { - oh->result = ENOSYS; - return sizeof(struct coda_out_hdr); - } - - 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; -} diff --git a/src/dav_fuse.c b/src/dav_fuse.c deleted file mode 100644 index 2f5ef85..0000000 --- a/src/dav_fuse.c +++ /dev/null @@ -1,1137 +0,0 @@ -/* dav_fuse.c: interface to the fuse kernel module FUSE_KERNEL_VERSION 7. - 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 -#ifdef HAVE_FCNTL_H -#include -#endif -#ifdef HAVE_LIBINTL_H -#include -#endif -#ifdef HAVE_STDDEF_H -#include -#endif -#ifdef HAVE_STDINT_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_SYSLOG_H -#include -#endif -#include -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#endif - -#include - -#include "defaults.h" -#include "mount_davfs.h" -#include "cache.h" -#include "kernel_interface.h" -#include "fuse_kernel.h" - -#ifdef ENABLE_NLS -#define _(String) gettext(String) -#else -#define _(String) String -#endif - - -/* Data Types */ -/*============*/ - -/* There is no struct fuse_create_out in fuse_kernel.h. */ - -struct create_out { - struct fuse_entry_out entry; - struct fuse_open_out open; -}; - - -/* Private global variables */ -/*==========================*/ - -/* Buffer used for communication with the kernel module (in and out). */ -static size_t buf_size; -static char *buf; - -/* fuse wants the nodeid of the root node to be 1, so we have to translate - between the real nodeid and what fuse wants. */ -static uint64_t root; - -/* Send debug messages to syslog if != 0. */ -int debug; - - -/* Private function prototypes */ -/*=============================*/ - -/* Functions to handle upcalls fromthe kernel module. */ - -static uint32_t -fuse_access(void); - -static uint32_t -fuse_create(void); - -static uint32_t -fuse_getattr(void); - -static uint32_t -fuse_getxattr(void); - -static uint32_t -fuse_init(void); - -static uint32_t -fuse_listxattr(void); - -static uint32_t -fuse_lookup(void); - -static uint32_t -fuse_mkdir(void); - -static uint32_t -fuse_mknod(void); - -static uint32_t -fuse_open(void); - -static uint32_t -fuse_read(void); - -static uint32_t -fuse_release(void); - -static uint32_t -fuse_rename(void); - -static uint32_t -fuse_setattr(void); - -static uint32_t -fuse_stat(void); - -static uint32_t -fuse_write(void); - -/* 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 fuse_attr *attr, const dav_node *node); - - -/* Public functions */ -/*==================*/ - -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) -{ - debug = dbg; - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "fuse kernel version 7"); - - buf_size = bufsize; - buf = malloc(buf_size); - if (!buf) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR), - _("can't allocate message buffer")); - return; - } - - dav_register_kernel_interface(&write_dir_entry, NULL, NULL); - - 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 (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "SELECT: %i", ret); - - if (ret > 0) { - ssize_t bytes_read = read(device, buf, buf_size); - if (bytes_read <= 0) { - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "READ: %s", - strerror(errno)); - if (bytes_read == 0 || errno == EINTR || errno == EAGAIN || - errno == ENOENT) { - 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 fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - if (ih->nodeid == 1) - ih->nodeid = root; - - switch (ih->opcode) { - case FUSE_LOOKUP: - oh->len = fuse_lookup(); - break; - case FUSE_FORGET: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), - "FUSE_FORGET: no reply"); - oh->error = 0; - oh->len = 0; - break; - case FUSE_GETATTR: - oh->len = fuse_getattr(); - break; - case FUSE_SETATTR: - oh->len = fuse_setattr(); - break; - case FUSE_READLINK: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READLINK:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_SYMLINK: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_SYMLINK:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_MKNOD: - oh->len = fuse_mknod(); - break; - case FUSE_MKDIR: - oh->len = fuse_mkdir(); - break; - case FUSE_UNLINK: - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_UNLINK:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", - (unsigned long long) ih->nodeid, - (char *) (buf + sizeof(struct fuse_in_header))); - } - oh->error = dav_remove((dav_node *) ((size_t) ih->nodeid), - (char *) (buf + sizeof(struct fuse_in_header)), - ih->uid); - if (oh->error) - oh->error *= -1; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_RMDIR: - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RMDIR:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", - (unsigned long long) ih->nodeid, - (char *) (buf + sizeof(struct fuse_in_header))); - } - oh->error = dav_rmdir((dav_node *) ((size_t) ih->nodeid), - (char *) (buf + sizeof(struct fuse_in_header)), - ih->uid); - if (oh->error) - oh->error *= -1; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_RENAME: - oh->len = fuse_rename(); - break; - case FUSE_LINK: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LINK:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_OPEN: - oh->len = fuse_open(); - break; - case FUSE_READ: - oh->len = fuse_read(); - break; - case FUSE_WRITE: - oh->len = fuse_write(); - break; - case FUSE_STATFS: - oh->len = fuse_stat(); - break; - case FUSE_RELEASE: - oh->len = fuse_release(); - last_tidy_cache = 0; - break; - case FUSE_FSYNC: - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_FSYNC:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx", - (unsigned long long) ih->nodeid); - } - oh->error = dav_sync((dav_node *) ((size_t) ih->nodeid)); - if (oh->error) - oh->error *= -1; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_SETXATTR: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETXATTR:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_GETXATTR: - oh->len = fuse_getxattr(); - break; - case FUSE_LISTXATTR: - oh->len = fuse_listxattr(); - break; - case FUSE_REMOVEXATTR: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_REMOVEXATTR:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_FLUSH: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), - "FUSE_FLUSH: ignored"); - oh->error = 0; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_INIT: - oh->len = fuse_init(); - break; - case FUSE_OPENDIR: - oh->len = fuse_open(); - break; - case FUSE_READDIR: - oh->len = fuse_read(); - break; - case FUSE_RELEASEDIR: - oh->len = fuse_release(); - break; - case FUSE_FSYNCDIR: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_FSYNCDIR:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); - break; - case FUSE_ACCESS: - oh->len = fuse_access(); - break; - case FUSE_CREATE: - oh->len = fuse_create(); - break; - default: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), - "UNKNOWN FUSE CALL %i", ih->opcode); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); - break; - } - - if (debug && oh->len) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "RET: %s", - strerror(-oh->error)); - - ssize_t n = 0; - ssize_t w = 0; - while (n < oh->len && w >= 0) { - w = write(device, buf + n, oh->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); - } - - } -} - - -/* 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 -fuse_access(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_access_in *in = (struct fuse_access_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_ACCESS:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", - (unsigned long long) ih->nodeid, in->mask); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " uid %i", ih->uid); - } - - oh->error = dav_access((dav_node *) ((size_t) ih->nodeid), ih->uid, - in->mask); - - if (oh->error) - oh->error *= -1; - - return sizeof(struct fuse_out_header); -} - - -static uint32_t -fuse_create(void) -{ - struct fuse_in_header *ih= (struct fuse_in_header *) buf; - struct fuse_open_in *in = (struct fuse_open_in *) - (buf + sizeof(struct fuse_in_header)); - char *name = buf + sizeof(struct fuse_in_header) - + sizeof(struct fuse_open_in); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct create_out *out = (struct create_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_CREATE:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", - (unsigned long long) ih->nodeid, in->flags); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, mode 0%o", - ih->pid, in->mode); - } - - int created = 0; - dav_node *node = NULL; - oh->error = dav_lookup(&node, (dav_node *) ((size_t) ih->nodeid), name, - ih->uid); - - if (!oh->error) { - if (!node) { - oh->error = -EIO; - return sizeof(struct fuse_out_header); - } else if (in->flags & O_EXCL) { - oh->error = -EEXIST; - return sizeof(struct fuse_out_header); - } - } else if (oh->error == ENOENT) { - oh->error = dav_create(&node, (dav_node *) ((size_t) ih->nodeid), name, - ih->uid, in->mode & DAV_A_MASK); - if (oh->error || !node) { - if (!oh->error) - oh->error = EIO; - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - created = 1; - } else { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - int fd = 0; - oh->error = dav_open(&fd, node, in->flags & ~(O_EXCL | O_CREAT), ih->pid, - 0, ih->uid, 1); - - if (oh->error || !fd) { - if (created) - dav_remove((dav_node *) ((size_t) ih->nodeid), name, ih->uid); - if (!oh->error) - oh->error = EIO; - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - out->entry.nodeid = (size_t) node; - out->entry.generation = out->entry.nodeid; - out->entry.entry_valid = 1; - out->entry.attr_valid = 1; - out->entry.entry_valid_nsec = 0; - out->entry.attr_valid_nsec = 0; - set_attr(&out->entry.attr, node); - - out->open.open_flags = in->flags & (O_ACCMODE | O_APPEND); - out->open.fh = fd; - out->open.padding = 0; - - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fd %i", fd); - return sizeof(struct fuse_out_header) + sizeof(struct create_out); -} - - -static uint32_t -fuse_getattr(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_attr_out *out = (struct fuse_attr_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETATTR:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx", - (unsigned long long) ih->nodeid); - } - - oh->error = dav_getattr((dav_node *) ((size_t) ih->nodeid), ih->uid); - - if (oh->error) { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - set_attr(&out->attr, (dav_node *) ((size_t) ih->nodeid)); - out->attr_valid = 1; - out->attr_valid_nsec = 0; - out->dummy = 0; - - return sizeof(struct fuse_out_header) + sizeof(struct fuse_attr_out); -} - - -static uint32_t -fuse_getxattr(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_getxattr_in *in = (struct fuse_getxattr_in *) - (buf + sizeof(struct fuse_in_header)); - char *name = (char *) (buf + sizeof(struct fuse_in_header) - + sizeof(struct fuse_getxattr_in)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_getxattr_out *out = (struct fuse_getxattr_out *) - (buf + sizeof(struct fuse_out_header)); - char *value = (char *) (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETXATTR:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, %s, %i", - (unsigned long long) ih->nodeid, name, in->size); - } - - size_t size = in->size; - if (size == 0) { - oh->error = dav_getxattr((dav_node *) ((size_t) ih->nodeid), name, - value, &size, ih->uid); - if (oh->error) { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - out->size = size; - out->padding = 0; - return sizeof(struct fuse_out_header) - + sizeof(struct fuse_getxattr_out); - } else { - if (size > (buf_size - sizeof(struct fuse_out_header))) - size = buf_size - sizeof(struct fuse_out_header); - oh->error = dav_getxattr((dav_node *) ((size_t) ih->nodeid), name, - value, &size, ih->uid); - if (oh->error) { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - return sizeof(struct fuse_out_header) + size; - } -} - - -static uint32_t -fuse_init(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_init_in *in = (struct fuse_init_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_init_out *out = (struct fuse_init_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_INIT:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " version %i.%i", - in->major, in->minor); - } - - dav_node *node; - oh->error = dav_root(&node, ih->uid); - - if (oh->error || !node) { - if (!oh->error) - oh->error = EIO; - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - root = (size_t) node; - out->major = FUSE_KERNEL_VERSION; - out->minor = FUSE_KERNEL_MINOR_VERSION; - out->unused[0] = 0; - out->unused[1] = 0; - out->unused[2] = 0; - out->max_write = buf_size - sizeof(struct fuse_in_header) - - sizeof(struct fuse_write_in) - 4095; - - return sizeof(struct fuse_out_header) + sizeof(struct fuse_init_out); -} - - -static uint32_t -fuse_listxattr(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_getxattr_in *in = (struct fuse_getxattr_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_getxattr_out *out = (struct fuse_getxattr_out *) - (buf + sizeof(struct fuse_out_header)); - char *value = (char *) (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LISTXATTR:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, %i", - (unsigned long long) ih->nodeid, in->size); - } - - size_t size = in->size; - if (size == 0) { - oh->error = dav_listxattr((dav_node *) ((size_t) ih->nodeid), value, - &size, ih->uid); - if (oh->error) { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - out->size = size; - out->padding = 0; - return sizeof(struct fuse_out_header) - + sizeof(struct fuse_getxattr_out); - } else { - if (size > (buf_size - sizeof(struct fuse_out_header))) - size = buf_size - sizeof(struct fuse_out_header); - oh->error = dav_listxattr((dav_node *) ((size_t) ih->nodeid), value, - &size, ih->uid); - if (oh->error) { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - return sizeof(struct fuse_out_header) + size; - } -} - - -static uint32_t -fuse_lookup(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - char * name = (char *) (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_entry_out *out = (struct fuse_entry_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LOOKUP:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", - (unsigned long long) ih->nodeid, name); - } - - dav_node *node = NULL; - oh->error = dav_lookup(&node, (dav_node *) ((size_t) ih->nodeid), name, - ih->uid); - - if (oh->error || !node) { - if (!oh->error) - oh->error = EIO; - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - out->nodeid = (size_t) node; - out->generation = out->nodeid; - out->entry_valid = 1; - out->attr_valid = 1; - out->entry_valid_nsec = 0; - out->attr_valid_nsec = 0; - set_attr(&out->attr, node); - - return sizeof(struct fuse_out_header) + sizeof(struct fuse_entry_out); -} - - -static uint32_t -fuse_mkdir(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_mkdir_in *in = (struct fuse_mkdir_in *) - (buf + sizeof(struct fuse_in_header)); - char *name = (char *) (buf + sizeof(struct fuse_in_header) - + sizeof(struct fuse_mkdir_in)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_entry_out *out = (struct fuse_entry_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_MKDIR:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", - (unsigned long long) ih->nodeid, name); - } - - dav_node *node = NULL; - oh->error = dav_mkdir(&node, (dav_node *) ((size_t) ih->nodeid), name, - ih->uid, in->mode & DAV_A_MASK); - - if (oh->error || !node) { - if (!oh->error) - oh->error = EIO; - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - out->nodeid = (size_t) node; - out->generation = out->nodeid; - out->entry_valid = 1; - out->attr_valid = 1; - out->entry_valid_nsec = 0; - out->attr_valid_nsec = 0; - set_attr(&out->attr, node); - - return sizeof(struct fuse_out_header) + sizeof(struct fuse_entry_out); -} - - -static uint32_t -fuse_mknod(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_mknod_in *in = (struct fuse_mknod_in *) - (buf + sizeof(struct fuse_in_header)); - char *name = (char *) (buf + sizeof(struct fuse_in_header) - + sizeof(struct fuse_mknod_in)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_entry_out *out = (struct fuse_entry_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_MKNOD:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, m 0%o", - (unsigned long long) ih->nodeid, in->mode); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " %s", name); - } - - if (!S_ISREG(in->mode)) { - oh->error = -ENOTSUP; - return sizeof(struct fuse_out_header); - } - - dav_node *node = NULL; - oh->error = dav_create(&node, (dav_node *) ((size_t) ih->nodeid), name, - ih->uid, in->mode & DAV_A_MASK); - - if (oh->error || !node) { - if (!oh->error) - oh->error = EIO; - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - out->nodeid = (size_t) node; - out->generation = out->nodeid; - out->entry_valid = 1; - out->attr_valid = 1; - out->entry_valid_nsec = 0; - out->attr_valid_nsec = 0; - set_attr(&out->attr, node); - - return sizeof(struct fuse_out_header) + sizeof(struct fuse_entry_out); -} - - -static uint32_t -fuse_open(void) -{ - struct fuse_in_header *ih= (struct fuse_in_header *) buf; - struct fuse_open_in *in = (struct fuse_open_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_open_out *out = (struct fuse_open_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - if (ih->opcode == FUSE_OPENDIR) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_OPENDIR:"); - } else { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_OPEN:"); - } - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", - (unsigned long long) ih->nodeid, in->flags); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, mode 0%o", - ih->pid, in->mode); - } - - int fd = 0; - oh->error = dav_open(&fd, (dav_node *) ((size_t) ih->nodeid), in->flags, - ih->pid, 0, ih->uid, 0); - - if (oh->error || !fd) { - if (!oh->error) - oh->error = EIO; - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - out->open_flags = in->flags & (O_ACCMODE | O_APPEND); - out->fh = fd; - out->padding = 0; - - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fd %i", fd); - return sizeof(struct fuse_out_header) + sizeof(struct fuse_open_out); -} - - -static uint32_t -fuse_read(void) -{ - struct fuse_in_header *ih= (struct fuse_in_header *) buf; - struct fuse_read_in *in = (struct fuse_read_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - if (debug) { - if (ih->opcode == FUSE_READDIR) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READDIR:"); - } else { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READ:"); - } - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, fd %llu", - (unsigned long long) ih->nodeid, (unsigned long long) in->fh); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i", ih->pid); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " size %u, off %llu", - in->size, (unsigned long long) in->offset); - } - - if (in->size > (buf_size - sizeof(struct fuse_out_header))) { - oh->error = -EINVAL; - return sizeof(struct fuse_out_header); - } - - ssize_t len; - oh->error = dav_read(&len, (dav_node *) ((size_t) ih->nodeid), - in->fh, buf + sizeof(struct fuse_out_header), - in->size, in->offset); - - if (oh->error) - oh->error *= -1; - - return len + sizeof(struct fuse_out_header); -} - - -static uint32_t -fuse_release(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_release_in *in = (struct fuse_release_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - if (debug) { - if (ih->opcode == FUSE_RELEASEDIR) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RELEASEDIR:"); - } else { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RELEASE:"); - } - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", - (unsigned long long) ih->nodeid, in->flags); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, fd %llu", - ih->pid, (unsigned long long) in->fh); - } - - oh->error = dav_close((dav_node *) ((size_t) ih->nodeid), in->fh, - in->flags, ih->pid, 0); - - if (oh->error) - oh->error *= -1; - - return sizeof(struct fuse_out_header); -} - - -static uint32_t -fuse_rename(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_rename_in *in = (struct fuse_rename_in *) - (buf + sizeof(struct fuse_in_header)); - char *old = (char *) (buf + sizeof(struct fuse_in_header) - + sizeof(struct fuse_rename_in)); - char *new = old + strlen(old) + 1; - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RENAME:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " sp 0x%llx, %s", - (unsigned long long) ih->nodeid, old); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " dp 0x%llx, %s", - (unsigned long long) in->newdir, new); - } - - if (in->newdir == 1) - in->newdir = root; - oh->error = dav_rename((dav_node *) ((size_t) ih->nodeid), old, - (dav_node *) ((size_t) in->newdir), new, ih->uid); - - if (oh->error) - oh->error *= -1; - - return sizeof(struct fuse_out_header); -} - - -static uint32_t -fuse_setattr(void) -{ - struct fuse_in_header *ih = (struct fuse_in_header *) buf; - struct fuse_setattr_in *in = (struct fuse_setattr_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_attr_out *out = (struct fuse_attr_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_SETATTR:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, m 0%o", - (unsigned long long) ih->nodeid, in->mode); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " uid %i, gid %i", - in->uid, in->gid); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " sz %llu, at %llu,", - (unsigned long long) in->size, (unsigned long long) in->atime); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " mt %llu", - (unsigned long long) in->mtime); - } - - oh->error = dav_setattr((dav_node *) ((size_t) ih->nodeid), ih->uid, - in->valid & FATTR_MODE, in->mode, - in->valid & FATTR_UID, in->uid, - in->valid & FATTR_GID, in->gid, - in->valid & FATTR_ATIME, in->atime, - in->valid & FATTR_MTIME, in->mtime, - in->valid & FATTR_SIZE, in->size); - - if (oh->error) { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - set_attr(&out->attr, (dav_node *) ((size_t) ih->nodeid)); - out->attr_valid = 1; - out->attr_valid_nsec = 0; - out->dummy = 0; - - return sizeof(struct fuse_out_header) + sizeof(struct fuse_attr_out); -} - - -static uint32_t -fuse_stat(void) -{ - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_statfs_out *out = (struct fuse_statfs_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_STATFS:"); - - dav_stat *st = dav_statfs(); - if (!st) { - oh->error = -ENOSYS; - return sizeof(struct fuse_out_header); - } - - int nblocks = (buf_size - sizeof(struct fuse_in_header) - - sizeof(struct fuse_write_in) - 4095) / st->bsize; - if (nblocks > 1) { - out->st.blocks = st->blocks / nblocks; - out->st.bfree = st->bfree / nblocks; - out->st.bavail = st->bavail / nblocks; - out->st.bsize = st->bsize * nblocks; - } else { - out->st.blocks = st->blocks; - out->st.bfree = st->bfree; - out->st.bavail = st->bavail; - out->st.bsize = st->bsize; - } - out->st.files = st->files; - out->st.ffree = st->ffree; - out->st.namelen = st->namelen; - out->st.frsize = 0; - out->st.padding = 0; - int i; - for (i = 0; i < 6; i++) - out->st.spare[i] = 0; - - oh->error = 0; - return sizeof(struct fuse_out_header) + sizeof(struct fuse_statfs_out); -} - - -static uint32_t -fuse_write(void) -{ - struct fuse_in_header *ih= (struct fuse_in_header *) buf; - struct fuse_write_in *in = (struct fuse_write_in *) - (buf + sizeof(struct fuse_in_header)); - struct fuse_out_header *oh = (struct fuse_out_header *) buf; - struct fuse_write_out *out = (struct fuse_write_out *) - (buf + sizeof(struct fuse_out_header)); - if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_WRITE:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, fd %llu", - (unsigned long long) ih->nodeid, (unsigned long long) in->fh); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, flags 0%o", - ih->pid, in->write_flags); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " size %u, off %llu", - in->size, (unsigned long long) in->offset); - } - - if (in->size > (buf_size - sizeof(struct fuse_in_header) - - sizeof(struct fuse_write_in))) { - oh->error = -EINVAL; - return sizeof(struct fuse_out_header); - } - - size_t size; - oh->error = dav_write(&size, (dav_node *) ((size_t) ih->nodeid), - in->fh, buf + sizeof(struct fuse_in_header) - + sizeof(struct fuse_write_in), - in->size, in->offset); - - if (oh->error) { - oh->error *= -1; - return sizeof(struct fuse_out_header); - } - - out->size = size; - out->padding = 0; - - return sizeof(struct fuse_out_header) + sizeof(struct fuse_write_out); -} - - -/* Auxiliary functions. */ - -/* Writes a struct fuse_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) -{ - if (!name) - return off; - - struct fuse_dirent entry; - size_t head = offsetof(struct fuse_dirent, name); - size_t reclen = (head + strlen(name) + sizeof(uint64_t) -1) - & ~(sizeof(uint64_t) - 1); - - entry.ino = (((size_t) node) == root) ? 1 : (size_t) node; - entry.off = off + reclen; - entry.namelen = strlen(name); - entry.type = (node->mode & S_IFMT) >> 12; - - 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.namelen)) { - ret = write(fd, name + size - head, entry.namelen - size + head); - size += ret; - } - if (size != (head + entry.namelen)) - return -1; - - ret = 0; - while (ret >= 0 && size < reclen) { - ret = write(fd, "\0", 1); - size += ret; - } - if (size != reclen) - return -1; - - return off + reclen; -} - - -static void -set_attr(struct fuse_attr *attr, const dav_node *node) -{ - attr->ino = (((size_t) node) == root) ? 1 : (size_t) node; - attr->size = node->size; - attr->blocks = (node->size + 511) / 512; - attr->atime = node->atime; - attr->mtime = node->mtime; - attr->ctime = node->ctime; - attr->atimensec = 0; - attr->mtimensec = 0; - attr->ctimensec = 0; - attr->mode = node->mode; - if (S_ISDIR(node->mode)) { - attr->nlink = node->nref; - } else { - attr->nlink = 1; - } - attr->uid = node->uid; - attr->gid = node->gid; - attr->rdev = 0; -} diff --git a/src/kernel_interface.c b/src/kernel_interface.c index 2ed5731..3adbc84 100644 --- a/src/kernel_interface.c +++ b/src/kernel_interface.c @@ -1,5 +1,5 @@ -/* kernel_interface.c: interface to fuse and coda kernel mocule. - Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann +/* dav_fuse.c: interface to the fuse kernel module FUSE_KERNEL_VERSION 7. + Copyright (C) 2006, 2007, 2008. 2009 Werner Baumann This file is part of davfs2. @@ -20,6 +20,7 @@ #include "config.h" +#include #include #ifdef HAVE_FCNTL_H #include @@ -43,6 +44,7 @@ #ifdef HAVE_SYSLOG_H #include #endif +#include #ifdef HAVE_UNISTD_H #include #endif @@ -62,9 +64,8 @@ #include "defaults.h" #include "mount_davfs.h" #include "cache.h" -#include "coda.h" -#include "fuse_kernel.h" #include "kernel_interface.h" +#include "fuse_kernel.h" #ifdef ENABLE_NLS #define _(String) gettext(String) @@ -73,157 +74,130 @@ #endif +/* Data Types */ +/*============*/ + +/* There is no struct fuse_create_out in fuse_kernel.h. */ + +struct create_out { + struct fuse_entry_out entry; + struct fuse_open_out open; +}; + + /* Private constants */ /*===================*/ -/* Name, major number and minor number of the devices to communicate with the +/* Name of the device 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 global variables */ +/*==========================*/ + +/* File descriptor of the fuse device. */ +static int fuse_device; + +/* Buffer used for communication with the kernel module (in and out). */ +static size_t buf_size; +static char *buf; + +/* Time to wait for upcalls before calling dav_tidy_cache(). */ +static time_t idle_time; + +/* Send debug messages to syslog if dbg != 0. */ +static int debug; + +/* fuse wants the nodeid of the root node to be 1, so we have to translate + between the real nodeid and what fuse wants. */ +static uint64_t root; /* Private function prototypes */ /*=============================*/ -static int -init_coda(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata); +/* Functions to handle upcalls fromthe kernel module. */ -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); +static uint32_t +fuse_access(void); + +static uint32_t +fuse_create(void); + +static uint32_t +fuse_getattr(void); + +static uint32_t +fuse_getxattr(void); + +static uint32_t +fuse_init(void); + +static uint32_t +fuse_listxattr(void); + +static uint32_t +fuse_lookup(void); + +static uint32_t +fuse_mkdir(void); + +static uint32_t +fuse_mknod(void); + +static uint32_t +fuse_open(void); + +static uint32_t +fuse_read(void); + +static uint32_t +fuse_release(void); + +static uint32_t +fuse_rename(void); + +static uint32_t +fuse_setattr(void); + +static uint32_t +fuse_stat(void); + +static uint32_t +fuse_write(void); + +/* 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 fuse_attr *attr, const dav_node *node); /* 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) +void +dav_init_kernel_interface(const char *url, const char *mpoint, + const dav_args *args) { - if (!*kernel_fs) - *kernel_fs = xstrdup("fuse"); + debug = args->debug & DAV_DBG_KERNEL; + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "Initializing kernel interface"); - 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->fsuid, args->fsgid, args->dir_mode) - == 0) { - free(*kernel_fs); - *kernel_fs = xstrdup("fuse"); - 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->fsuid, args->fsgid, 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 = xstrdup("coda"); - error(0, 0, _("coda device opened successfully")); - } else { - exit(EXIT_FAILURE); - } - } - - } else { - - error(EXIT_FAILURE, 0, _("unknown kernel file system %s"), *kernel_fs); - } - - 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 = xasprintf("%s/%s%i", DAV_DEV_DIR, CODA_DEV_NAME, minor); - *dev = open(path, O_RDWR | O_NONBLOCK); - free(path); - ++minor; - } - - if (*dev <= 0 && system("/sbin/modprobe coda &>/dev/null") == 0) { - minor = 0; - while (*dev <= 0 && minor < MAX_CODADEVS) { - char *path = xasprintf("%s/%s%i", DAV_DEV_DIR, CODA_DEV_NAME, - minor); - *dev = open(path, O_RDWR | O_NONBLOCK); - if (*dev <= 0) { - if (mknod(path, S_IFCHR, makedev(CODA_MAJOR, minor)) == 0) { - if (chown(path, 0, 0) == 0 - && chmod(path, S_IRUSR | S_IWUSR) == 0) { - *dev = open(path, O_RDWR | O_NONBLOCK); - } else { - remove(path); - } - } - } - 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 = xmalloc(sizeof(struct coda_mount_data)); - 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 = xasprintf("%s/%s", DAV_DEV_DIR, FUSE_DEV_NAME); - *dev = open(path, O_RDWR | O_NONBLOCK); - if (*dev <= 0 && system("/sbin/modprobe fuse &>/dev/null") == 0) { - *dev = open(path, O_RDWR | O_NONBLOCK); + fuse_device = open(path, O_RDWR | O_NONBLOCK); + if (fuse_device <= 0 && system("/sbin/modprobe fuse &>/dev/null") == 0) { + fuse_device = open(path, O_RDWR | O_NONBLOCK); } - if (*dev <= 0) { + if (fuse_device <= 0) { if (mknod(path, S_IFCHR, makedev(FUSE_MAJOR, FUSE_MINOR)) == 0) { if (chown(path, 0, 0) == 0 && chmod(path, S_IRUSR | S_IWUSR) == 0) { - *dev = open(path, O_RDWR | O_NONBLOCK); + fuse_device = open(path, O_RDWR | O_NONBLOCK); } else { remove(path); } @@ -231,31 +205,986 @@ init_fuse(int *dev, dav_run_msgloop_fn *msg_loop, void **mdata, } free(path); - if (*dev <= 0) { - error(0, 0, _("can't open fuse device")); - return -1; - } + if (fuse_device <= 0) + error(EXIT_FAILURE, 0, _("can't open fuse device")); - if (*buf_size < (FUSE_MIN_READ_BUFFER + 4096)) { - *buf_size = FUSE_MIN_READ_BUFFER + 4096; - } + char *mdata = xasprintf("fd=%i,rootmode=%o,user_id=%i,group_id=%i," + "allow_other,max_read=%lu", fuse_device, + args->dir_mode, args->fsuid, args->fsgid, + (unsigned long int) (buf_size - 4096)); -#if SIZEOF_VOID_P == 8 - *mdata = xasprintf("fd=%i,rootmode=%o,user_id=%i,group_id=%i," - "allow_other,max_read=%lu", *dev, mode, owner, group, - (unsigned long int) (*buf_size - 4096)); -#else - *mdata = xasprintf("fd=%i,rootmode=%o,user_id=%i,group_id=%i," - "allow_other,max_read=%u", *dev, mode, owner, group, - (unsigned int) (*buf_size - 4096)); -#endif - if (mount(url, mpoint, "fuse", mopts, *mdata) == 0) { - *msg_loop = dav_fuse_loop; - return 0; - } + if (mount(url, mpoint, "fuse", args->mopts, mdata) != 0) + error(EXIT_FAILURE, errno, _("mounting failed")); - free(*mdata); - close(*dev); - error(0, 0, _("can't mount using fuse kernel file system")); - return -1; + free(mdata); + + buf_size = args->buf_size * 1024; + if (buf_size < (FUSE_MIN_READ_BUFFER + 4096)) + buf_size = FUSE_MIN_READ_BUFFER + 4096; + buf = malloc(buf_size); + if (!buf) + error(EXIT_FAILURE, errno, _("can't allocate message buffer")); + + idle_time = args->delay_upload; +} + + +void +dav_run_msgloop(volatile int *keep_on_running) +{ + dav_register_kernel_interface(&write_dir_entry); + + 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(fuse_device, &fds); + int ret = select(fuse_device + 1, &fds, NULL, NULL, &tv); + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "SELECT: %i", ret); + + if (ret > 0) { + ssize_t bytes_read = read(fuse_device, buf, buf_size); + if (bytes_read <= 0) { + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "READ: %s", + strerror(errno)); + if (bytes_read == 0 || errno == EINTR || errno == EAGAIN || + errno == ENOENT) { + 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 (!dav_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 fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + if (ih->nodeid == 1) + ih->nodeid = root; + + switch (ih->opcode) { + case FUSE_LOOKUP: + oh->len = fuse_lookup(); + break; + case FUSE_FORGET: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_FORGET: no reply"); + oh->error = 0; + oh->len = 0; + break; + case FUSE_GETATTR: + oh->len = fuse_getattr(); + break; + case FUSE_SETATTR: + oh->len = fuse_setattr(); + break; + case FUSE_READLINK: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READLINK:"); + oh->error = -ENOSYS; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_SYMLINK: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_SYMLINK:"); + oh->error = -ENOSYS; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_MKNOD: + oh->len = fuse_mknod(); + break; + case FUSE_MKDIR: + oh->len = fuse_mkdir(); + break; + case FUSE_UNLINK: + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_UNLINK:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", + (unsigned long long) ih->nodeid, + (char *) (buf + sizeof(struct fuse_in_header))); + } + oh->error = dav_remove((dav_node *) ((size_t) ih->nodeid), + (char *) (buf + sizeof(struct fuse_in_header)), + ih->uid); + if (oh->error) + oh->error *= -1; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_RMDIR: + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RMDIR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", + (unsigned long long) ih->nodeid, + (char *) (buf + sizeof(struct fuse_in_header))); + } + oh->error = dav_rmdir((dav_node *) ((size_t) ih->nodeid), + (char *) (buf + sizeof(struct fuse_in_header)), + ih->uid); + if (oh->error) + oh->error *= -1; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_RENAME: + oh->len = fuse_rename(); + break; + case FUSE_LINK: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LINK:"); + oh->error = -ENOSYS; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_OPEN: + oh->len = fuse_open(); + break; + case FUSE_READ: + oh->len = fuse_read(); + break; + case FUSE_WRITE: + oh->len = fuse_write(); + break; + case FUSE_STATFS: + oh->len = fuse_stat(); + break; + case FUSE_RELEASE: + oh->len = fuse_release(); + last_tidy_cache = 0; + break; + case FUSE_FSYNC: + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_FSYNC:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx", + (unsigned long long) ih->nodeid); + } + oh->error = dav_sync((dav_node *) ((size_t) ih->nodeid)); + if (oh->error) + oh->error *= -1; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_SETXATTR: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETXATTR:"); + oh->error = -ENOSYS; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_GETXATTR: + oh->len = fuse_getxattr(); + break; + case FUSE_LISTXATTR: + oh->len = fuse_listxattr(); + break; + case FUSE_REMOVEXATTR: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_REMOVEXATTR:"); + oh->error = -ENOSYS; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_FLUSH: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_FLUSH: ignored"); + oh->error = 0; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_INIT: + oh->len = fuse_init(); + break; + case FUSE_OPENDIR: + oh->len = fuse_open(); + break; + case FUSE_READDIR: + oh->len = fuse_read(); + break; + case FUSE_RELEASEDIR: + oh->len = fuse_release(); + break; + case FUSE_FSYNCDIR: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_FSYNCDIR:"); + oh->error = -ENOSYS; + oh->len = sizeof(struct fuse_out_header); + break; + case FUSE_ACCESS: + oh->len = fuse_access(); + break; + case FUSE_CREATE: + oh->len = fuse_create(); + break; + default: + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "UNKNOWN FUSE CALL %i", ih->opcode); + oh->error = -ENOSYS; + oh->len = sizeof(struct fuse_out_header); + break; + } + + if (debug && oh->len) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "RET: %s", + strerror(-oh->error)); + + ssize_t n = 0; + ssize_t w = 0; + while (n < oh->len && w >= 0) { + w = write(fuse_device, buf + n, oh->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); + } + + } +} + + +/* 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 +fuse_access(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_access_in *in = (struct fuse_access_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_ACCESS:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", + (unsigned long long) ih->nodeid, in->mask); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " uid %i", ih->uid); + } + + oh->error = dav_access((dav_node *) ((size_t) ih->nodeid), ih->uid, + in->mask); + + if (oh->error) + oh->error *= -1; + + return sizeof(struct fuse_out_header); +} + + +static uint32_t +fuse_create(void) +{ + struct fuse_in_header *ih= (struct fuse_in_header *) buf; + struct fuse_open_in *in = (struct fuse_open_in *) + (buf + sizeof(struct fuse_in_header)); + char *name = buf + sizeof(struct fuse_in_header) + + sizeof(struct fuse_open_in); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct create_out *out = (struct create_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_CREATE:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", + (unsigned long long) ih->nodeid, in->flags); + } + + int created = 0; + dav_node *node = NULL; + oh->error = dav_lookup(&node, (dav_node *) ((size_t) ih->nodeid), name, + ih->uid); + + if (!oh->error) { + if (!node) { + oh->error = -EIO; + return sizeof(struct fuse_out_header); + } else if (in->flags & O_EXCL) { + oh->error = -EEXIST; + return sizeof(struct fuse_out_header); + } + } else if (oh->error == ENOENT) { + oh->error = dav_create(&node, (dav_node *) ((size_t) ih->nodeid), name, + ih->uid, in->mode & DAV_A_MASK); + if (oh->error || !node) { + if (!oh->error) + oh->error = EIO; + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + created = 1; + } else { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + int fd = 0; + oh->error = dav_open(&fd, node, in->flags & ~(O_EXCL | O_CREAT), ih->uid, 1); + + if (oh->error || !fd) { + if (created) + dav_remove((dav_node *) ((size_t) ih->nodeid), name, ih->uid); + if (!oh->error) + oh->error = EIO; + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + out->entry.nodeid = (size_t) node; + out->entry.generation = out->entry.nodeid; + out->entry.entry_valid = 1; + out->entry.attr_valid = 1; + out->entry.entry_valid_nsec = 0; + out->entry.attr_valid_nsec = 0; + set_attr(&out->entry.attr, node); + + out->open.open_flags = in->flags & (O_ACCMODE | O_APPEND); + out->open.fh = fd; + out->open.padding = 0; + + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fd %i", fd); + return sizeof(struct fuse_out_header) + sizeof(struct create_out); +} + + +static uint32_t +fuse_getattr(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_attr_out *out = (struct fuse_attr_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETATTR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx", + (unsigned long long) ih->nodeid); + } + + oh->error = dav_getattr((dav_node *) ((size_t) ih->nodeid), ih->uid); + + if (oh->error) { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + set_attr(&out->attr, (dav_node *) ((size_t) ih->nodeid)); + out->attr_valid = 1; + out->attr_valid_nsec = 0; + out->dummy = 0; + + return sizeof(struct fuse_out_header) + sizeof(struct fuse_attr_out); +} + + +static uint32_t +fuse_getxattr(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_getxattr_in *in = (struct fuse_getxattr_in *) + (buf + sizeof(struct fuse_in_header)); + char *name = (char *) (buf + sizeof(struct fuse_in_header) + + sizeof(struct fuse_getxattr_in)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_getxattr_out *out = (struct fuse_getxattr_out *) + (buf + sizeof(struct fuse_out_header)); + char *value = (char *) (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETXATTR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, %s, %i", + (unsigned long long) ih->nodeid, name, in->size); + } + + size_t size = in->size; + if (size == 0) { + oh->error = dav_getxattr((dav_node *) ((size_t) ih->nodeid), name, + value, &size, ih->uid); + if (oh->error) { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + out->size = size; + out->padding = 0; + return sizeof(struct fuse_out_header) + + sizeof(struct fuse_getxattr_out); + } else { + if (size > (buf_size - sizeof(struct fuse_out_header))) + size = buf_size - sizeof(struct fuse_out_header); + oh->error = dav_getxattr((dav_node *) ((size_t) ih->nodeid), name, + value, &size, ih->uid); + if (oh->error) { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + return sizeof(struct fuse_out_header) + size; + } +} + + +static uint32_t +fuse_init(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_init_in *in = (struct fuse_init_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_init_out *out = (struct fuse_init_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_INIT:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " version %i.%i", + in->major, in->minor); + } + + dav_node *node; + oh->error = dav_root(&node, ih->uid); + + if (oh->error || !node) { + if (!oh->error) + oh->error = EIO; + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + root = (size_t) node; + out->major = FUSE_KERNEL_VERSION; + out->minor = FUSE_KERNEL_MINOR_VERSION; + out->unused[0] = 0; + out->unused[1] = 0; + out->unused[2] = 0; + out->max_write = buf_size - sizeof(struct fuse_in_header) + - sizeof(struct fuse_write_in) - 4095; + + return sizeof(struct fuse_out_header) + sizeof(struct fuse_init_out); +} + + +static uint32_t +fuse_listxattr(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_getxattr_in *in = (struct fuse_getxattr_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_getxattr_out *out = (struct fuse_getxattr_out *) + (buf + sizeof(struct fuse_out_header)); + char *value = (char *) (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LISTXATTR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, %i", + (unsigned long long) ih->nodeid, in->size); + } + + size_t size = in->size; + if (size == 0) { + oh->error = dav_listxattr((dav_node *) ((size_t) ih->nodeid), value, + &size, ih->uid); + if (oh->error) { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + out->size = size; + out->padding = 0; + return sizeof(struct fuse_out_header) + + sizeof(struct fuse_getxattr_out); + } else { + if (size > (buf_size - sizeof(struct fuse_out_header))) + size = buf_size - sizeof(struct fuse_out_header); + oh->error = dav_listxattr((dav_node *) ((size_t) ih->nodeid), value, + &size, ih->uid); + if (oh->error) { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + return sizeof(struct fuse_out_header) + size; + } +} + + +static uint32_t +fuse_lookup(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + char * name = (char *) (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_entry_out *out = (struct fuse_entry_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LOOKUP:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", + (unsigned long long) ih->nodeid, name); + } + + dav_node *node = NULL; + oh->error = dav_lookup(&node, (dav_node *) ((size_t) ih->nodeid), name, + ih->uid); + + if (oh->error || !node) { + if (!oh->error) + oh->error = EIO; + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + out->nodeid = (size_t) node; + out->generation = out->nodeid; + out->entry_valid = 1; + out->attr_valid = 1; + out->entry_valid_nsec = 0; + out->attr_valid_nsec = 0; + set_attr(&out->attr, node); + + return sizeof(struct fuse_out_header) + sizeof(struct fuse_entry_out); +} + + +static uint32_t +fuse_mkdir(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_mkdir_in *in = (struct fuse_mkdir_in *) + (buf + sizeof(struct fuse_in_header)); + char *name = (char *) (buf + sizeof(struct fuse_in_header) + + sizeof(struct fuse_mkdir_in)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_entry_out *out = (struct fuse_entry_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_MKDIR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, %s", + (unsigned long long) ih->nodeid, name); + } + + dav_node *node = NULL; + oh->error = dav_mkdir(&node, (dav_node *) ((size_t) ih->nodeid), name, + ih->uid, in->mode & DAV_A_MASK); + + if (oh->error || !node) { + if (!oh->error) + oh->error = EIO; + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + out->nodeid = (size_t) node; + out->generation = out->nodeid; + out->entry_valid = 1; + out->attr_valid = 1; + out->entry_valid_nsec = 0; + out->attr_valid_nsec = 0; + set_attr(&out->attr, node); + + return sizeof(struct fuse_out_header) + sizeof(struct fuse_entry_out); +} + + +static uint32_t +fuse_mknod(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_mknod_in *in = (struct fuse_mknod_in *) + (buf + sizeof(struct fuse_in_header)); + char *name = (char *) (buf + sizeof(struct fuse_in_header) + + sizeof(struct fuse_mknod_in)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_entry_out *out = (struct fuse_entry_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_MKNOD:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " p 0x%llx, m 0%o", + (unsigned long long) ih->nodeid, in->mode); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " %s", name); + } + + if (!S_ISREG(in->mode)) { + oh->error = -ENOTSUP; + return sizeof(struct fuse_out_header); + } + + dav_node *node = NULL; + oh->error = dav_create(&node, (dav_node *) ((size_t) ih->nodeid), name, + ih->uid, in->mode & DAV_A_MASK); + + if (oh->error || !node) { + if (!oh->error) + oh->error = EIO; + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + out->nodeid = (size_t) node; + out->generation = out->nodeid; + out->entry_valid = 1; + out->attr_valid = 1; + out->entry_valid_nsec = 0; + out->attr_valid_nsec = 0; + set_attr(&out->attr, node); + + return sizeof(struct fuse_out_header) + sizeof(struct fuse_entry_out); +} + + +static uint32_t +fuse_open(void) +{ + struct fuse_in_header *ih= (struct fuse_in_header *) buf; + struct fuse_open_in *in = (struct fuse_open_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_open_out *out = (struct fuse_open_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + if (ih->opcode == FUSE_OPENDIR) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_OPENDIR:"); + } else { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_OPEN:"); + } + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", + (unsigned long long) ih->nodeid, in->flags); + } + + int fd = 0; + oh->error = dav_open(&fd, (dav_node *) ((size_t) ih->nodeid), in->flags, + ih->uid, 0); + + if (oh->error || !fd) { + if (!oh->error) + oh->error = EIO; + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + out->open_flags = in->flags & (O_ACCMODE | O_APPEND); + out->fh = fd; + out->padding = 0; + + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fd %i", fd); + return sizeof(struct fuse_out_header) + sizeof(struct fuse_open_out); +} + + +static uint32_t +fuse_read(void) +{ + struct fuse_in_header *ih= (struct fuse_in_header *) buf; + struct fuse_read_in *in = (struct fuse_read_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + if (debug) { + if (ih->opcode == FUSE_READDIR) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READDIR:"); + } else { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READ:"); + } + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, fd %llu", + (unsigned long long) ih->nodeid, (unsigned long long) in->fh); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i", ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " size %u, off %llu", + in->size, (unsigned long long) in->offset); + } + + if (in->size > (buf_size - sizeof(struct fuse_out_header))) { + oh->error = -EINVAL; + return sizeof(struct fuse_out_header); + } + + ssize_t len; + oh->error = dav_read(&len, (dav_node *) ((size_t) ih->nodeid), + in->fh, buf + sizeof(struct fuse_out_header), + in->size, in->offset); + + if (oh->error) + oh->error *= -1; + + return len + sizeof(struct fuse_out_header); +} + + +static uint32_t +fuse_release(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_release_in *in = (struct fuse_release_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + if (debug) { + if (ih->opcode == FUSE_RELEASEDIR) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RELEASEDIR:"); + } else { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RELEASE:"); + } + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, f 0%o", + (unsigned long long) ih->nodeid, in->flags); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, fd %llu", + ih->pid, (unsigned long long) in->fh); + } + + oh->error = dav_close((dav_node *) ((size_t) ih->nodeid), in->fh, + in->flags, ih->pid, 0); + + if (oh->error) + oh->error *= -1; + + return sizeof(struct fuse_out_header); +} + + +static uint32_t +fuse_rename(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_rename_in *in = (struct fuse_rename_in *) + (buf + sizeof(struct fuse_in_header)); + char *old = (char *) (buf + sizeof(struct fuse_in_header) + + sizeof(struct fuse_rename_in)); + char *new = old + strlen(old) + 1; + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RENAME:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " sp 0x%llx, %s", + (unsigned long long) ih->nodeid, old); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " dp 0x%llx, %s", + (unsigned long long) in->newdir, new); + } + + if (in->newdir == 1) + in->newdir = root; + oh->error = dav_rename((dav_node *) ((size_t) ih->nodeid), old, + (dav_node *) ((size_t) in->newdir), new, ih->uid); + + if (oh->error) + oh->error *= -1; + + return sizeof(struct fuse_out_header); +} + + +static uint32_t +fuse_setattr(void) +{ + struct fuse_in_header *ih = (struct fuse_in_header *) buf; + struct fuse_setattr_in *in = (struct fuse_setattr_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_attr_out *out = (struct fuse_attr_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_SETATTR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, m 0%o", + (unsigned long long) ih->nodeid, in->mode); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " uid %i, gid %i", + in->uid, in->gid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " sz %llu, at %llu,", + (unsigned long long) in->size, (unsigned long long) in->atime); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " mt %llu", + (unsigned long long) in->mtime); + } + + oh->error = dav_setattr((dav_node *) ((size_t) ih->nodeid), ih->uid, + in->valid & FATTR_MODE, in->mode, + in->valid & FATTR_UID, in->uid, + in->valid & FATTR_GID, in->gid, + in->valid & FATTR_ATIME, in->atime, + in->valid & FATTR_MTIME, in->mtime, + in->valid & FATTR_SIZE, in->size); + + if (oh->error) { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + set_attr(&out->attr, (dav_node *) ((size_t) ih->nodeid)); + out->attr_valid = 1; + out->attr_valid_nsec = 0; + out->dummy = 0; + + return sizeof(struct fuse_out_header) + sizeof(struct fuse_attr_out); +} + + +static uint32_t +fuse_stat(void) +{ + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_statfs_out *out = (struct fuse_statfs_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_STATFS:"); + + dav_stat *st = dav_statfs(); + if (!st) { + oh->error = -ENOSYS; + return sizeof(struct fuse_out_header); + } + + int nblocks = (buf_size - sizeof(struct fuse_in_header) + - sizeof(struct fuse_write_in) - 4095) / st->bsize; + if (nblocks > 1) { + out->st.blocks = st->blocks / nblocks; + out->st.bfree = st->bfree / nblocks; + out->st.bavail = st->bavail / nblocks; + out->st.bsize = st->bsize * nblocks; + } else { + out->st.blocks = st->blocks; + out->st.bfree = st->bfree; + out->st.bavail = st->bavail; + out->st.bsize = st->bsize; + } + out->st.files = st->files; + out->st.ffree = st->ffree; + out->st.namelen = st->namelen; + out->st.frsize = 0; + out->st.padding = 0; + int i; + for (i = 0; i < 6; i++) + out->st.spare[i] = 0; + + oh->error = 0; + return sizeof(struct fuse_out_header) + sizeof(struct fuse_statfs_out); +} + + +static uint32_t +fuse_write(void) +{ + struct fuse_in_header *ih= (struct fuse_in_header *) buf; + struct fuse_write_in *in = (struct fuse_write_in *) + (buf + sizeof(struct fuse_in_header)); + struct fuse_out_header *oh = (struct fuse_out_header *) buf; + struct fuse_write_out *out = (struct fuse_write_out *) + (buf + sizeof(struct fuse_out_header)); + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_WRITE:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx, fd %llu", + (unsigned long long) ih->nodeid, (unsigned long long) in->fh); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " pid %i, flags 0%o", + ih->pid, in->write_flags); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " size %u, off %llu", + in->size, (unsigned long long) in->offset); + } + + if (in->size > (buf_size - sizeof(struct fuse_in_header) + - sizeof(struct fuse_write_in))) { + oh->error = -EINVAL; + return sizeof(struct fuse_out_header); + } + + size_t size; + oh->error = dav_write(&size, (dav_node *) ((size_t) ih->nodeid), + in->fh, buf + sizeof(struct fuse_in_header) + + sizeof(struct fuse_write_in), + in->size, in->offset); + + if (oh->error) { + oh->error *= -1; + return sizeof(struct fuse_out_header); + } + + out->size = size; + out->padding = 0; + + return sizeof(struct fuse_out_header) + sizeof(struct fuse_write_out); +} + + +/* Auxiliary functions. */ + +/* Writes a struct fuse_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) +{ + if (!name) + return off; + + struct fuse_dirent entry; + size_t head = offsetof(struct fuse_dirent, name); + size_t reclen = (head + strlen(name) + sizeof(uint64_t) -1) + & ~(sizeof(uint64_t) - 1); + + entry.ino = (((size_t) node) == root) ? 1 : (size_t) node; + entry.off = off + reclen; + entry.namelen = strlen(name); + entry.type = (node->mode & S_IFMT) >> 12; + + 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.namelen)) { + ret = write(fd, name + size - head, entry.namelen - size + head); + size += ret; + } + if (size != (head + entry.namelen)) + return -1; + + ret = 0; + while (ret >= 0 && size < reclen) { + ret = write(fd, "\0", 1); + size += ret; + } + if (size != reclen) + return -1; + + return off + reclen; +} + + +static void +set_attr(struct fuse_attr *attr, const dav_node *node) +{ + attr->ino = (((size_t) node) == root) ? 1 : (size_t) node; + attr->size = node->size; + attr->blocks = (node->size + 511) / 512; + attr->atime = node->atime; + attr->mtime = node->mtime; + attr->ctime = node->ctime; + attr->atimensec = 0; + attr->mtimensec = 0; + attr->ctimensec = 0; + attr->mode = node->mode; + if (S_ISDIR(node->mode)) { + attr->nlink = node->nref; + } else { + attr->nlink = 1; + } + attr->uid = node->uid; + attr->gid = node->gid; + attr->rdev = 0; } diff --git a/src/kernel_interface.h b/src/kernel_interface.h index 48be5e4..cfec5a9 100644 --- a/src/kernel_interface.h +++ b/src/kernel_interface.h @@ -22,29 +22,6 @@ #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 */ /*=====================*/ @@ -52,45 +29,18 @@ typedef void (*dav_run_msgloop_fn)(int device, size_t bufsize, time_t idle_time, 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); + args : arguments. */ +void +dav_init_kernel_interface(const char *url, const char *mpoint, + const dav_args *args); /* Message loop for fuse kernel module with major number 7. - Parameters see dav_run_msgloop_fn(). */ + keep_on_running : Pointer to run flag. */ 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); +dav_run_msgloop(volatile int *keep_on_running); #endif /* DAV_KERNEL_INTERFACE_H */ diff --git a/src/mount_davfs.c b/src/mount_davfs.c index 50d0db4..0e95c6d 100644 --- a/src/mount_davfs.c +++ b/src/mount_davfs.c @@ -102,9 +102,6 @@ static char *url; /* The canonicalized mointpoint. */ static char *mpoint; -/* The type of the kernel file system used. */ -static char *kernel_fs; - /* The file that holds information about mounted filesystems (/proc/mounts or /etc/mtab) */ static char *mounts; @@ -120,6 +117,9 @@ static volatile int keep_on_running = 1; terminate without uploading dirty files. */ static volatile int got_sigterm; +/* Send debug information about the configuration to the log file. */ +static int debug; + /* Private function prototypes */ /*=============================*/ @@ -144,12 +144,6 @@ check_permissions(dav_args *args); static void gain_privileges(const dav_args *args); -static int -do_mount(dav_args *args, void *mdata); - -static int -is_mounted(void); - static dav_args * parse_commandline(dav_args *args, int argc, char *argv[]); @@ -274,46 +268,24 @@ main(int argc, char *argv[]) dav_init_cache(args, mpoint); - int dev = 0; - dav_run_msgloop_fn run_msgloop = NULL; - void *mdata = NULL; - if (args->kernel_fs) - kernel_fs = xstrdup(args->kernel_fs); - size_t buf_size = args->buf_size * 1024; gain_privileges(args); - int mounted = dav_init_kernel_interface(&dev, &run_msgloop, &mdata, - &kernel_fs, &buf_size, url, mpoint, - args); + dav_init_kernel_interface(url, mpoint, args); release_privileges(args); - if (args->debug & DAV_DBG_CONFIG) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "kernel_fs: %s", kernel_fs); - if (args->debug & DAV_DBG_CONFIG) + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Writing mtab entry"); + write_mtab_entry(args); + + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Fork into daemon mode"); pid_t childpid = fork(); if (childpid > 0) { - if (args->debug & DAV_DBG_CONFIG) + if (debug) { syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Parent: parent pid: %i, child pid: %i", getpid(), childpid); - if (!mounted) { - if (args->debug & DAV_DBG_CONFIG) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), - "Parent: mounting filesystem"); - if (do_mount(args, mdata) != 0) { - kill(childpid, SIGTERM); - delete_args(args); - exit(EXIT_FAILURE); - } - } - - if (args->debug & DAV_DBG_CONFIG) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), - "Parent: writing mtab entry"); - write_mtab_entry(args); - - if (args->debug & DAV_DBG_CONFIG) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Parent: leaving now"); + } delete_args(args); exit(EXIT_SUCCESS); @@ -322,7 +294,7 @@ main(int argc, char *argv[]) error(EXIT_FAILURE, errno, _("can't start daemon process")); } - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Set signal handler"); struct sigaction action; action.sa_handler = termination_handler; @@ -335,7 +307,7 @@ main(int argc, char *argv[]) int ret = 0; - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Releasing root privileges"); gain_privileges(args); ret = setuid(args->uid); @@ -345,14 +317,11 @@ main(int argc, char *argv[]) kill(getppid(), SIGHUP); } - time_t idle_time = args->delay_upload; - if (!idle_time) - idle_time = DAV_DELAY_UPLOAD; - int debug = args->debug; delete_args(args); setsid(); + if (!ret) { - if (debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Releasing terminal"); close(STDIN_FILENO); close(STDOUT_FILENO); @@ -368,7 +337,7 @@ main(int argc, char *argv[]) } if (!ret) { - if (debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Writing pid file"); ret = save_pid(); if (ret) { @@ -379,31 +348,49 @@ main(int argc, char *argv[]) } if (!ret) { - if (debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Starting message loop"); - run_msgloop(dev, buf_size, idle_time, is_mounted, &keep_on_running, - debug & DAV_DBG_KERNEL); + dav_run_msgloop(&keep_on_running); } - if (debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Closing"); dav_close_cache(got_sigterm); dav_close_webdav(); - if (is_mounted()) { + if (dav_is_mounted()) { char *prog = xasprintf("/bin/umount -il %s", mpoint); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR), _("unmounting %s"), mpoint); if (system(prog) != 0) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR), _("unmounting failed")); } - if (debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Removing %s", pidfile); remove(pidfile); - if (debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Done."); return 0; } +int +dav_is_mounted(void) +{ + int found = 0; + FILE *mtab = setmntent(mounts, "r"); + if (mtab) { + struct mntent *mt = getmntent(mtab); + while (mt && !found) { + if (strcmp(mpoint, mt->mnt_dir) == 0 + && strcmp(url, mt->mnt_fsname) == 0) + found = 1; + mt = getmntent(mtab); + } + } + endmntent(mtab); + return found; +} + + char * dav_user_input_hidden(const char *prompt) { @@ -451,7 +438,7 @@ change_persona(dav_args *args) args->uid = args->dav_uid; release_privileges(args); - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "changing persona: euid %i, gid %i", geteuid(), getgid()); } @@ -476,7 +463,7 @@ check_dirs(dav_args *args) } else { mounts = _PATH_MOUNTED; } - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "mounts in: %s", mounts); gain_privileges(args); @@ -660,7 +647,7 @@ check_double_mounts(dav_args *args) } char *pidf = xasprintf("%s/%s.pid", DAV_SYS_RUN, mp); free(mp); - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "PID file: %s", pidf); FILE *file = fopen(pidf, "r"); @@ -768,7 +755,7 @@ check_permissions(dav_args *args) if (args->fsuid != args->uid) error(EXIT_FAILURE, 0, _("you can't set file owner different from your uid")); - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "uid ok"); if (args->gid != args->fsgid) { @@ -781,7 +768,7 @@ check_permissions(dav_args *args) error(EXIT_FAILURE, 0, _("you must be member of the group of the file system")); } - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "gid ok"); int i; @@ -792,36 +779,12 @@ check_permissions(dav_args *args) if (i == args->ngroups) error(EXIT_FAILURE, 0, _("user %s must be member of group %s"), args->uid_name, args->dav_group); - if (args->debug & DAV_DBG_CONFIG) + if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "memeber of group %s", args->dav_group); } -/* Calls the mount()-function to mount the file system. - Uses private global variables url and mpoint as device and mount point, - kernel_fs as file system type, mopts as mount options and mdata - as mount data. - return value : 0 on success, -1 if mount() fails. */ -static int -do_mount(dav_args *args, void *mdata) -{ - gain_privileges(args); - int ret = mount(url, mpoint, kernel_fs, args->mopts, mdata); - release_privileges(args); - - if (ret) { - error(0, errno, _("can't mount %s on %s"), url, mpoint); - if (errno == ENODEV) - error(0, 0, _("kernel does not know file system %s"), kernel_fs); - if (errno == EBUSY) - error(0, 0, _("mount point is busy")); - return -1; - } - return 0; -} - - /* Gains super user privileges. If an error occurs it prints an error message and calls exit(EXIT_FAILURE). */ static void @@ -838,29 +801,6 @@ gain_privileges(const dav_args *args) } -/* Checks wether the file system is mounted. - It uses information from the private global variables mounts (mtab-file), - url (must be device in the mtab entry) and mpoint (mount point). - return value : 0 - no matching entry in the mtab-file (not mounted) - 1 - matching entry in the mtab-file (mounted) */ -static int -is_mounted(void) -{ - int found = 0; - FILE *mtab = setmntent(mounts, "r"); - if (mtab) { - struct mntent *mt = getmntent(mtab); - while (mt && !found) { - if (strcmp(mpoint, mt->mnt_dir) == 0 - && strcmp(url, mt->mnt_fsname) == 0) - found = 1; - mt = getmntent(mtab); - } - } - endmntent(mtab); - return found; -} - /* Parses commandline arguments and options and stores them in args and the private global variables url and mpoint. For arguments and options please see the usage()-funktion. @@ -1044,7 +984,11 @@ parse_config(dav_args *args) if (!args->backup_dir) args->backup_dir = xstrdup(DAV_BACKUP_DIR); - if (args->debug & DAV_DBG_CONFIG) + if (!args->delay_upload) + args->delay_upload = DAV_DELAY_UPLOAD; + + debug = args->debug & DAV_DBG_CONFIG; + if (debug) log_dbg_config(args); } @@ -1364,8 +1308,6 @@ delete_args(dav_args *args) free(args->conf); if (args->add_mopts) free(args->add_mopts); - if (args->kernel_fs) - free(args->kernel_fs); if (args->scheme) free(args->scheme); if (args->host) @@ -1739,8 +1681,6 @@ log_dbg_config(dav_args *args) " mopts: %#lx", args->mopts); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " add_mopts: %s", args->add_mopts); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), - " kernel_fs: %s", args->kernel_fs); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " buf_size: %llu KiB", (unsigned long long) args->buf_size); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), @@ -2134,10 +2074,6 @@ read_config(dav_args *args, const char * filename, int system) if (args->dav_group) free(args->dav_group); args->dav_group = xstrdup(parmv[1]); - } else if (strcmp(parmv[0], "kernel_fs") == 0) { - if (args->kernel_fs) - free(args->kernel_fs); - args->kernel_fs = xstrdup(parmv[1]); } else if (strcmp(parmv[0], "buf_size") == 0) { args->buf_size = arg_to_int(parmv[1], 10, parmv[0]); } else if (strcmp(parmv[0], "trust_ca_cert") == 0 diff --git a/src/mount_davfs.h b/src/mount_davfs.h index 644b787..539d24b 100644 --- a/src/mount_davfs.h +++ b/src/mount_davfs.h @@ -51,7 +51,6 @@ typedef struct { 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 fsuid; /* Command line */ @@ -164,6 +163,15 @@ int main(int argc, char *argv[]); +/* Checks wether the file system is mounted. + It uses information from the private global variables mounts (mtab-file), + url (must be device in the mtab entry) and mpoint (mount point). + return value : 0 - no matching entry in the mtab-file (not mounted) + 1 - matching entry in the mtab-file (mounted) */ +int +dav_is_mounted(void); + + /* Prints prompt to stdout and reads a line from stdin. Echoing the user input to stdout is prohibited. A trailing newline is removed.