From 7097f3f583458a44b0ccacc2eee8d39b6e916b43 Mon Sep 17 00:00:00 2001 From: wbaumann Date: Sun, 8 Sep 2013 07:54:58 +0000 Subject: [PATCH] Updating to fuse kernel version 7.19 --- ChangeLog | 3 + po/cs.po | 260 ++++++++++----------- po/davfs2.pot | 260 ++++++++++----------- po/de.po | 262 +++++++++++---------- src/fuse_kernel.h | 429 +++++++++++++++++++++++++++++++--- src/kernel_interface.c | 510 ++++++++++++++++++++++++----------------- 6 files changed, 1102 insertions(+), 622 deletions(-) diff --git a/ChangeLog b/ChangeLog index 068f506..aa6e5f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ ChangeLog for davfs2 -------------------- +2013-09-08 Werner Baumann (werner.baumann@onlinehome.de) + * Updating to fuse kernel version 7.19. + 2013-08-15 Werner Baumann (werner.baumann@onlinehome.de) * cache.c: Fix has_permission (bug #33644). diff --git a/po/cs.po b/po/cs.po index d908887..c13fc5c 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: 2013-08-09 12:39+0200\n" +"POT-Creation-Date: 2013-09-01 18:45+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:656 +#: src/cache.c:650 #, 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:661 +#: src/cache.c:655 #, c-format msgid "Last try succeeded.\n" msgstr "Poslední pokus byl úspěšný.\n" -#: src/cache.c:664 +#: src/cache.c:658 #, 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:667 +#: src/cache.c:661 #, c-format msgid "" "Mounting failed.\n" @@ -49,177 +49,177 @@ msgstr "" "Připojení selhalo;\n" "%s" -#: src/cache.c:706 +#: src/cache.c:700 #, c-format msgid "can't replace %s with %s" msgstr "nemohu nahradit %s pomocí %s" -#: src/cache.c:710 +#: src/cache.c:704 #, c-format msgid "error writing new index file %s" msgstr "chyba při zápisu nového indexového souboru %s" -#: src/cache.c:714 +#: src/cache.c:708 #, c-format msgid "can't create new index file for %s" msgstr "nemohu vytvořit nový indexový soubor pro %s" -#: src/cache.c:925 +#: src/cache.c:911 #, 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:2512 src/cache.c:2545 +#: src/cache.c:2384 src/cache.c:2417 #, c-format msgid "can't create cache file %s" msgstr "nemohu vytvořit soubor vyrovnávací paměti %s" -#: src/cache.c:2560 +#: src/cache.c:2432 #, c-format msgid "error writing directory %s" msgstr "chyba při zápisu adresáře %s" -#: src/cache.c:2723 src/mount_davfs.c:1013 +#: src/cache.c:2594 src/mount_davfs.c:1011 #, c-format msgid "can't read user data base" msgstr "nemohu přečíst údaje o uživatelích" -#: src/cache.c:2735 +#: src/cache.c:2606 #, c-format msgid "can't open cache directory %s" msgstr "nemohu otevřít kešovací adresář %s" -#: src/cache.c:2750 +#: src/cache.c:2621 #, c-format msgid "can't create cache directory %s" msgstr "nemohu vytvořit kešovací adresář %s" -#: src/cache.c:2757 +#: src/cache.c:2628 #, c-format msgid "can't access cache directory %s" msgstr "nemohu přistoupit ke kešovacímu adresáři %s" -#: src/cache.c:2760 +#: src/cache.c:2631 #, c-format msgid "wrong owner of cache directory %s" msgstr "chybný vlastník kešovacího adresáře %s" -#: src/cache.c:2764 +#: src/cache.c:2635 #, c-format msgid "wrong permissions set for cache directory %s" msgstr "pro kešovací adresář %s nastaveno chybné oprávnění" -#: src/cache.c:2794 +#: src/cache.c:2665 msgid "found orphaned file in cache:" msgstr "" -#: src/cache.c:2867 +#: src/cache.c:2738 #, c-format msgid "error parsing %s" msgstr "chyba při zpracování %s" -#: src/cache.c:2868 +#: src/cache.c:2739 #, c-format msgid " at line %i" msgstr "" -#: src/cache.c:2913 +#: src/cache.c:2784 #, 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/kernel_interface.c:209 -#, c-format -msgid "can't open fuse device" -msgstr "nemohu otevřít fuse zařízení" - -#: src/kernel_interface.c:217 -#, fuzzy, c-format -msgid "mounting failed" -msgstr "odpojení selhalo" - -#: src/kernel_interface.c:226 +#: src/kernel_interface.c:219 #, c-format msgid "can't allocate message buffer" msgstr "nemohu alokovat buffer pro zprávu" -#: src/mount_davfs.c:294 +#: src/kernel_interface.c:246 +#, c-format +msgid "can't open fuse device" +msgstr "nemohu otevřít fuse zařízení" + +#: src/kernel_interface.c:254 +#, fuzzy, c-format +msgid "mounting failed" +msgstr "odpojení selhalo" + +#: src/mount_davfs.c:291 #, c-format msgid "can't start daemon process" msgstr "nemohu spustit proces na pozadí" -#: src/mount_davfs.c:316 +#: src/mount_davfs.c:313 msgid "can't release root privileges" msgstr "nemohu uvolnit oprávnění uživatele root" -#: src/mount_davfs.c:333 +#: src/mount_davfs.c:330 msgid "failed to release tty properly" msgstr "" -#: src/mount_davfs.c:345 +#: src/mount_davfs.c:342 #, c-format msgid "can't write pid file %s" msgstr "nemohu zapsat pid souboru %s" -#: src/mount_davfs.c:362 +#: src/mount_davfs.c:359 #, c-format msgid "unmounting %s" msgstr "odpojuji %s" -#: src/mount_davfs.c:364 +#: src/mount_davfs.c:361 msgid "unmounting failed" msgstr "odpojení selhalo" -#: src/mount_davfs.c:435 +#: src/mount_davfs.c:432 #, c-format msgid "can't change group id" msgstr "nemohu změnit id skupiny" -#: src/mount_davfs.c:473 src/mount_davfs.c:567 src/mount_davfs.c:593 +#: src/mount_davfs.c:470 src/mount_davfs.c:564 src/mount_davfs.c:590 #, c-format msgid "can't create directory %s" msgstr "nemohu vytvořit adresář %s" -#: 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 +#: src/mount_davfs.c:474 src/mount_davfs.c:568 src/mount_davfs.c:594 +#: src/mount_davfs.c:599 src/mount_davfs.c:607 #, c-format msgid "can't access directory %s" msgstr "nemohu přistupovat k adresáři %s" -#: src/mount_davfs.c:483 src/mount_davfs.c:577 +#: src/mount_davfs.c:480 src/mount_davfs.c:574 #, 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:488 src/mount_davfs.c:583 +#: src/mount_davfs.c:485 src/mount_davfs.c:580 #, c-format msgid "can't change group of directory %s" msgstr "nemohu změnit skupinu adresáře %s" -#: src/mount_davfs.c:495 src/mount_davfs.c:551 +#: src/mount_davfs.c:492 src/mount_davfs.c:548 #, c-format msgid "file %s has wrong owner" msgstr "soubor %s má chybného vlastníka" -#: src/mount_davfs.c:499 src/mount_davfs.c:556 +#: src/mount_davfs.c:496 src/mount_davfs.c:553 #, c-format msgid "file %s has wrong permissions" msgstr "soubor %s má chybná oprávnění" -#: src/mount_davfs.c:628 src/mount_davfs.c:680 +#: src/mount_davfs.c:625 src/mount_davfs.c:677 #, c-format msgid "can't open file %s" msgstr "nemohu otevřít soubor %s" -#: src/mount_davfs.c:633 +#: src/mount_davfs.c:630 #, c-format msgid "%s is already mounted on %s" msgstr "%s už je připojeno jako %s" -#: src/mount_davfs.c:655 +#: src/mount_davfs.c:652 #, c-format msgid "" "found PID file %s.\n" @@ -230,82 +230,82 @@ msgstr "" "Buď %s používá jiný proces, nebo\n" "jiné připojení skončilo neobvykle" -#: src/mount_davfs.c:697 +#: src/mount_davfs.c:694 #, c-format msgid "no entry for %s found in %s" msgstr "pro %s nebyla v %s nalezena žádná položka" -#: src/mount_davfs.c:701 +#: src/mount_davfs.c:698 #, c-format msgid "different URL in %s" msgstr "v %s je jiné URL" -#: src/mount_davfs.c:704 +#: src/mount_davfs.c:701 #, c-format msgid "different file system type in %s" msgstr "v %s je jiný souborový systém" -#: src/mount_davfs.c:715 +#: src/mount_davfs.c:712 #, c-format msgid "different config file in %s" msgstr "v %s je jiný konfigurační soubor" -#: src/mount_davfs.c:721 +#: src/mount_davfs.c:718 #, fuzzy, c-format msgid "different username in %s" msgstr "v %s je odlišný dir_mode" -#: src/mount_davfs.c:725 +#: src/mount_davfs.c:722 #, fuzzy, c-format msgid "neither option `user' nor option `users' set in %s" msgstr "volba 'user' není v %s nastavena" -#: src/mount_davfs.c:728 +#: src/mount_davfs.c:725 #, c-format msgid "different mount options in %s" msgstr "v %s jsou jiné parametry připojení" -#: src/mount_davfs.c:731 +#: src/mount_davfs.c:728 #, c-format msgid "different uid in %s" msgstr "v %s je odlišné uid" -#: src/mount_davfs.c:733 +#: src/mount_davfs.c:730 #, c-format msgid "different gid in %s" msgstr "v %s je odlišné gid" -#: src/mount_davfs.c:735 +#: src/mount_davfs.c:732 #, c-format msgid "different dir_mode in %s" msgstr "v %s je odlišný dir_mode" -#: src/mount_davfs.c:737 +#: src/mount_davfs.c:734 #, c-format msgid "different file_mode in %s" msgstr "v %s je odlišný file_mode" -#: src/mount_davfs.c:757 +#: src/mount_davfs.c:754 #, 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:769 +#: src/mount_davfs.c:766 #, 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:780 +#: src/mount_davfs.c:777 #, 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:800 src/mount_davfs.c:1139 +#: src/mount_davfs.c:797 src/mount_davfs.c:1137 #, c-format msgid "can't change effective user id" msgstr "nemohu změnit identifikátor efektivního uživatele" -#: src/mount_davfs.c:844 src/umount_davfs.c:92 +#: src/mount_davfs.c:841 src/umount_davfs.c:92 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -316,67 +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:860 src/umount_davfs.c:117 +#: src/mount_davfs.c:857 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:869 src/umount_davfs.c:123 +#: src/mount_davfs.c:866 src/umount_davfs.c:123 #, c-format msgid "missing argument" msgstr "chybějící argument" -#: src/mount_davfs.c:882 +#: src/mount_davfs.c:879 #, 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:885 src/umount_davfs.c:125 +#: src/mount_davfs.c:882 src/umount_davfs.c:125 #, c-format msgid "too many arguments" msgstr "příliš mnoho argumentů" -#: src/mount_davfs.c:892 +#: src/mount_davfs.c:889 #, 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:897 +#: src/mount_davfs.c:894 #, c-format msgid "no WebDAV-server specified" msgstr "nebyl zadán žádný WebDAV server" -#: src/mount_davfs.c:900 +#: src/mount_davfs.c:897 #, c-format msgid "invalid URL" msgstr "neplatné URL" -#: src/mount_davfs.c:930 +#: src/mount_davfs.c:927 #, c-format msgid "user %s does not exist" msgstr "uživatel %s neexistuje" -#: src/mount_davfs.c:938 +#: src/mount_davfs.c:935 #, c-format msgid "group %s does not exist" msgstr "skupina %s neexistuje" -#: src/mount_davfs.c:1004 +#: src/mount_davfs.c:1002 #, c-format msgid "program is not setuid root" msgstr "program není spuštěn jako setuid root" -#: src/mount_davfs.c:1022 +#: src/mount_davfs.c:1020 #, c-format msgid "can't read group data base" msgstr "nemohu přečíst údaje o skupinách" -#: 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 +#: src/mount_davfs.c:1047 src/mount_davfs.c:1060 src/mount_davfs.c:1062 +#: src/mount_davfs.c:1080 src/mount_davfs.c:1082 src/mount_davfs.c:1097 msgid "Password: " msgstr "Heslo: " -#: src/mount_davfs.c:1053 +#: src/mount_davfs.c:1051 #, fuzzy, c-format msgid "" "Please enter the username to authenticate with proxy\n" @@ -386,11 +386,11 @@ msgstr "" "%s (pokud žádné zadat nechcete, pouze stiskněte enter).\n" "Uživatelské jméno: " -#: src/mount_davfs.c:1055 src/mount_davfs.c:1075 +#: src/mount_davfs.c:1053 src/mount_davfs.c:1073 msgid "Username:" msgstr "" -#: src/mount_davfs.c:1059 +#: src/mount_davfs.c:1057 #, c-format msgid "" "Please enter the password to authenticate user %s with proxy\n" @@ -399,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:1073 +#: src/mount_davfs.c:1071 #, fuzzy, c-format msgid "" "Please enter the username to authenticate with server\n" @@ -409,7 +409,7 @@ msgstr "" "%s (nebo pouze stiskně enter, pokud nic zadat nechcete).\n" "Uživatelské jméno: " -#: src/mount_davfs.c:1079 +#: src/mount_davfs.c:1077 #, c-format msgid "" "Please enter the password to authenticate user %s with server\n" @@ -418,7 +418,7 @@ 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:1097 +#: src/mount_davfs.c:1095 #, c-format msgid "" "Please enter the password to decrypt client\n" @@ -427,85 +427,85 @@ msgstr "" "Zadejte prosím heslo pro dešifrování klientského\n" "certifikátu %s.\n" -#: src/mount_davfs.c:1104 +#: src/mount_davfs.c:1102 #, c-format msgid "can't decrypt client certificate %s" msgstr "nemohu dešifrovat klientský certifikát %s" -#: src/mount_davfs.c:1167 +#: src/mount_davfs.c:1165 #, c-format msgid "pid %i, got signal %i" msgstr "pid %i dostal signál %i" -#: src/mount_davfs.c:1206 +#: src/mount_davfs.c:1204 #, 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:1232 +#: src/mount_davfs.c:1230 #, 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:1235 +#: src/mount_davfs.c:1233 #, 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:1238 +#: src/mount_davfs.c:1236 #, 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:1513 +#: src/mount_davfs.c:1476 #, c-format msgid "option %s requires argument" msgstr "volba %s vyžaduje argument" -#: src/mount_davfs.c:1605 +#: src/mount_davfs.c:1568 #, c-format msgid "Unknown option %s.\n" msgstr "Neznámá volba %s.\n" -#: src/mount_davfs.c:1976 +#: src/mount_davfs.c:1937 #, 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 +#: src/mount_davfs.c:1969 src/mount_davfs.c:1982 #, c-format msgid "can't read client certificate %s" msgstr "nelze přečíst klientský certifikát %s" -#: src/mount_davfs.c:2012 +#: src/mount_davfs.c:1973 #, 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 +#: src/mount_davfs.c:1977 #, 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 +#: src/mount_davfs.c:1999 src/mount_davfs.c:2227 #, fuzzy, c-format msgid "opening %s failed" msgstr "odpojení selhalo" -#: 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 +#: src/mount_davfs.c:2020 src/mount_davfs.c:2065 src/mount_davfs.c:2157 +#: src/mount_davfs.c:2254 src/mount_davfs.c:2312 src/mount_davfs.c:2325 #, c-format msgid "malformed line" msgstr "špatně zapsaný řádek" -#: src/mount_davfs.c:2174 src/mount_davfs.c:2190 +#: src/mount_davfs.c:2135 src/mount_davfs.c:2151 #, c-format msgid "unknown option" msgstr "neznámá volba" -#: src/mount_davfs.c:2496 +#: src/mount_davfs.c:2457 #, c-format msgid "" "Usage:\n" @@ -518,7 +518,7 @@ msgstr "" " %s -h,--help : vytiskne tuto zprávu\n" "\n" -#: src/mount_davfs.c:2500 +#: src/mount_davfs.c:2461 #, c-format msgid "" "To mount a WebDAV-resource don't call %s directly, but use\n" @@ -527,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:2502 +#: src/mount_davfs.c:2463 #, c-format msgid "" " mount : or\n" @@ -538,7 +538,7 @@ msgstr "" " mount : připojí zdroj WebDAV tak, jak je zadáno\n" " v /etc/fstab.\n" -#: src/mount_davfs.c:2505 +#: src/mount_davfs.c:2466 #, c-format msgid "" " mount -t davfs [-o options]\n" @@ -555,7 +555,7 @@ msgstr "" " označuje seznam voleb oddělených čárkou.\n" "\n" -#: src/mount_davfs.c:2510 +#: src/mount_davfs.c:2471 #, c-format msgid "" "Recognised options:\n" @@ -574,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:2516 +#: src/mount_davfs.c:2477 #, c-format msgid "" " ro : mount read-only\n" @@ -674,96 +674,96 @@ msgstr "%s: čekám, než si %s (pid %s) sesynchronizuje vyrovnávací paměť. msgid "an error occured while waiting; please wait for %s to terminate" msgstr "při čekání došlo k chybě; čekejte prosím až %s skončí" -#: src/webdav.c:360 +#: src/webdav.c:337 #, fuzzy, c-format msgid "socket library initialization failed" msgstr "selhala inicializace knihovny socketů" -#: src/webdav.c:372 +#: src/webdav.c:349 #, c-format msgid "can't open stream to log neon-messages" msgstr "" -#: src/webdav.c:413 +#: src/webdav.c:380 #, c-format msgid "neon library does not support TLS/SSL" msgstr "knihovna neon nepodporuje TLS/SSL" -#: src/webdav.c:475 src/webdav.c:478 +#: src/webdav.c:440 src/webdav.c:443 #, c-format msgid "mounting failed; the server does not support WebDAV" msgstr "připojení selhalo; server nepodporuje WebDAV" -#: src/webdav.c:486 +#: src/webdav.c:451 #, c-format msgid "warning: the server does not support locks" msgstr "varování: server nepodporuje zámky" -#: src/webdav.c:1566 +#: src/webdav.c:1454 msgid "authentication failure:" msgstr "selhání autentizace:" -#: src/webdav.c:1604 +#: src/webdav.c:1492 #, c-format msgid "%i can't open cache file" msgstr "%i nemůže otevřít soubor vyrovnávací paměti" -#: src/webdav.c:1612 +#: src/webdav.c:1500 #, 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:1922 src/webdav.c:1951 src/webdav.c:1988 +#: src/webdav.c:1741 src/webdav.c:1770 src/webdav.c:1807 #, c-format msgid "the server certificate is not trusted" msgstr "certifikát serveru je nedůvěryhodný" -#: src/webdav.c:1931 src/webdav.c:1934 +#: src/webdav.c:1750 src/webdav.c:1753 #, c-format msgid "error processing server certificate" msgstr "chyba při zpracování certifikátu serveru" -#: src/webdav.c:1945 src/webdav.c:1979 +#: src/webdav.c:1764 src/webdav.c:1798 #, c-format msgid "the server certificate is not yet valid" msgstr "certifikát serveru zatím není platný" -#: src/webdav.c:1947 src/webdav.c:1982 +#: src/webdav.c:1766 src/webdav.c:1801 #, c-format msgid "the server certificate has expired" msgstr "platnost certifikátu serveru vypršela" -#: src/webdav.c:1949 src/webdav.c:1985 +#: src/webdav.c:1768 src/webdav.c:1804 #, c-format msgid "the server certificate does not match the server name" msgstr "certifikát serveru nedopovídá jménu serveru" -#: src/webdav.c:1953 src/webdav.c:1991 +#: src/webdav.c:1772 src/webdav.c:1810 #, c-format msgid "unknown certificate error" msgstr "neznámá chyba certifikátu" -#: src/webdav.c:1954 +#: src/webdav.c:1773 #, c-format msgid " issuer: %s" msgstr " vydavatel: %s" -#: src/webdav.c:1956 +#: src/webdav.c:1775 #, c-format msgid " subject: %s" msgstr " subjekt: %s" -#: src/webdav.c:1958 +#: src/webdav.c:1777 #, c-format msgid " identity: %s" msgstr " identita: %s" -#: src/webdav.c:1960 +#: src/webdav.c:1779 #, c-format msgid " fingerprint: %s" msgstr " otisk: %s" -#: src/webdav.c:1962 +#: src/webdav.c:1781 #, c-format msgid "" "You only should accept this certificate, if you can\n" @@ -774,27 +774,27 @@ 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:1965 +#: src/webdav.c:1784 #, c-format msgid "Accept certificate for this session? [y,N] " msgstr "Přijmout certifikát pro toto sezení? [y,N] " -#: src/webdav.c:1992 +#: src/webdav.c:1811 #, c-format msgid " issuer: %s" msgstr " vydavatel: %s" -#: src/webdav.c:1993 +#: src/webdav.c:1812 #, c-format msgid " subject: %s" msgstr " subjekt: %s" -#: src/webdav.c:1994 +#: src/webdav.c:1813 #, c-format msgid " identity: %s" msgstr " identita: %s" -#: src/webdav.c:1997 +#: src/webdav.c:1816 msgid " accepted by user" msgstr " přijat uživatelem" diff --git a/po/davfs2.pot b/po/davfs2.pot index 761ea43..7e1be09 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: 2013-08-09 12:39+0200\n" +"POT-Creation-Date: 2013-09-01 18:45+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,202 +18,202 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/cache.c:656 +#: src/cache.c:650 #, c-format msgid "" "connection timed out two times;\n" "trying one last time" msgstr "" -#: src/cache.c:661 +#: src/cache.c:655 #, c-format msgid "Last try succeeded.\n" msgstr "" -#: src/cache.c:664 +#: src/cache.c:658 #, c-format msgid "" "server temporarily unreachable;\n" "mounting anyway" msgstr "" -#: src/cache.c:667 +#: src/cache.c:661 #, c-format msgid "" "Mounting failed.\n" "%s" msgstr "" -#: src/cache.c:706 +#: src/cache.c:700 #, c-format msgid "can't replace %s with %s" msgstr "" -#: src/cache.c:710 +#: src/cache.c:704 #, c-format msgid "error writing new index file %s" msgstr "" -#: src/cache.c:714 +#: src/cache.c:708 #, c-format msgid "can't create new index file for %s" msgstr "" -#: src/cache.c:925 +#: src/cache.c:911 #, 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:2512 src/cache.c:2545 +#: src/cache.c:2384 src/cache.c:2417 #, c-format msgid "can't create cache file %s" msgstr "" -#: src/cache.c:2560 +#: src/cache.c:2432 #, c-format msgid "error writing directory %s" msgstr "" -#: src/cache.c:2723 src/mount_davfs.c:1013 +#: src/cache.c:2594 src/mount_davfs.c:1011 #, c-format msgid "can't read user data base" msgstr "" -#: src/cache.c:2735 +#: src/cache.c:2606 #, c-format msgid "can't open cache directory %s" msgstr "" -#: src/cache.c:2750 +#: src/cache.c:2621 #, c-format msgid "can't create cache directory %s" msgstr "" -#: src/cache.c:2757 +#: src/cache.c:2628 #, c-format msgid "can't access cache directory %s" msgstr "" -#: src/cache.c:2760 +#: src/cache.c:2631 #, c-format msgid "wrong owner of cache directory %s" msgstr "" -#: src/cache.c:2764 +#: src/cache.c:2635 #, c-format msgid "wrong permissions set for cache directory %s" msgstr "" -#: src/cache.c:2794 +#: src/cache.c:2665 msgid "found orphaned file in cache:" msgstr "" -#: src/cache.c:2867 +#: src/cache.c:2738 #, c-format msgid "error parsing %s" msgstr "" -#: src/cache.c:2868 +#: src/cache.c:2739 #, c-format msgid " at line %i" msgstr "" -#: src/cache.c:2913 +#: src/cache.c:2784 #, c-format msgid "open files exceed max cache size by %llu MiBytes" msgstr "" -#: src/kernel_interface.c:209 -#, c-format -msgid "can't open fuse device" -msgstr "" - -#: src/kernel_interface.c:217 -#, c-format -msgid "mounting failed" -msgstr "" - -#: src/kernel_interface.c:226 +#: src/kernel_interface.c:219 #, c-format msgid "can't allocate message buffer" msgstr "" -#: src/mount_davfs.c:294 +#: src/kernel_interface.c:246 +#, c-format +msgid "can't open fuse device" +msgstr "" + +#: src/kernel_interface.c:254 +#, c-format +msgid "mounting failed" +msgstr "" + +#: src/mount_davfs.c:291 #, c-format msgid "can't start daemon process" msgstr "" -#: src/mount_davfs.c:316 +#: src/mount_davfs.c:313 msgid "can't release root privileges" msgstr "" -#: src/mount_davfs.c:333 +#: src/mount_davfs.c:330 msgid "failed to release tty properly" msgstr "" -#: src/mount_davfs.c:345 +#: src/mount_davfs.c:342 #, c-format msgid "can't write pid file %s" msgstr "" -#: src/mount_davfs.c:362 +#: src/mount_davfs.c:359 #, c-format msgid "unmounting %s" msgstr "" -#: src/mount_davfs.c:364 +#: src/mount_davfs.c:361 msgid "unmounting failed" msgstr "" -#: src/mount_davfs.c:435 +#: src/mount_davfs.c:432 #, c-format msgid "can't change group id" msgstr "" -#: src/mount_davfs.c:473 src/mount_davfs.c:567 src/mount_davfs.c:593 +#: src/mount_davfs.c:470 src/mount_davfs.c:564 src/mount_davfs.c:590 #, c-format msgid "can't create directory %s" msgstr "" -#: 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 +#: src/mount_davfs.c:474 src/mount_davfs.c:568 src/mount_davfs.c:594 +#: src/mount_davfs.c:599 src/mount_davfs.c:607 #, c-format msgid "can't access directory %s" msgstr "" -#: src/mount_davfs.c:483 src/mount_davfs.c:577 +#: src/mount_davfs.c:480 src/mount_davfs.c:574 #, c-format msgid "can't change mode of directory %s" msgstr "" -#: src/mount_davfs.c:488 src/mount_davfs.c:583 +#: src/mount_davfs.c:485 src/mount_davfs.c:580 #, c-format msgid "can't change group of directory %s" msgstr "" -#: src/mount_davfs.c:495 src/mount_davfs.c:551 +#: src/mount_davfs.c:492 src/mount_davfs.c:548 #, c-format msgid "file %s has wrong owner" msgstr "" -#: src/mount_davfs.c:499 src/mount_davfs.c:556 +#: src/mount_davfs.c:496 src/mount_davfs.c:553 #, c-format msgid "file %s has wrong permissions" msgstr "" -#: src/mount_davfs.c:628 src/mount_davfs.c:680 +#: src/mount_davfs.c:625 src/mount_davfs.c:677 #, c-format msgid "can't open file %s" msgstr "" -#: src/mount_davfs.c:633 +#: src/mount_davfs.c:630 #, c-format msgid "%s is already mounted on %s" msgstr "" -#: src/mount_davfs.c:655 +#: src/mount_davfs.c:652 #, c-format msgid "" "found PID file %s.\n" @@ -221,265 +221,265 @@ msgid "" "or another mount process ended irregular" msgstr "" -#: src/mount_davfs.c:697 +#: src/mount_davfs.c:694 #, c-format msgid "no entry for %s found in %s" msgstr "" -#: src/mount_davfs.c:701 +#: src/mount_davfs.c:698 #, c-format msgid "different URL in %s" msgstr "" -#: src/mount_davfs.c:704 +#: src/mount_davfs.c:701 #, c-format msgid "different file system type in %s" msgstr "" -#: src/mount_davfs.c:715 +#: src/mount_davfs.c:712 #, c-format msgid "different config file in %s" msgstr "" -#: src/mount_davfs.c:721 +#: src/mount_davfs.c:718 #, c-format msgid "different username in %s" msgstr "" -#: src/mount_davfs.c:725 +#: src/mount_davfs.c:722 #, c-format msgid "neither option `user' nor option `users' set in %s" msgstr "" -#: src/mount_davfs.c:728 +#: src/mount_davfs.c:725 #, c-format msgid "different mount options in %s" msgstr "" -#: src/mount_davfs.c:731 +#: src/mount_davfs.c:728 #, c-format msgid "different uid in %s" msgstr "" -#: src/mount_davfs.c:733 +#: src/mount_davfs.c:730 #, c-format msgid "different gid in %s" msgstr "" -#: src/mount_davfs.c:735 +#: src/mount_davfs.c:732 #, c-format msgid "different dir_mode in %s" msgstr "" -#: src/mount_davfs.c:737 +#: src/mount_davfs.c:734 #, c-format msgid "different file_mode in %s" msgstr "" -#: src/mount_davfs.c:757 +#: src/mount_davfs.c:754 #, c-format msgid "you can't set file owner different from your uid" msgstr "" -#: src/mount_davfs.c:769 +#: src/mount_davfs.c:766 #, c-format msgid "you must be member of the group of the file system" msgstr "" -#: src/mount_davfs.c:780 +#: src/mount_davfs.c:777 #, c-format msgid "user %s must be member of group %s" msgstr "" -#: src/mount_davfs.c:800 src/mount_davfs.c:1139 +#: src/mount_davfs.c:797 src/mount_davfs.c:1137 #, c-format msgid "can't change effective user id" msgstr "" -#: src/mount_davfs.c:844 src/umount_davfs.c:92 +#: src/mount_davfs.c:841 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:860 src/umount_davfs.c:117 +#: src/mount_davfs.c:857 src/umount_davfs.c:117 #, c-format msgid "unknown error parsing arguments" msgstr "" -#: src/mount_davfs.c:869 src/umount_davfs.c:123 +#: src/mount_davfs.c:866 src/umount_davfs.c:123 #, c-format msgid "missing argument" msgstr "" -#: src/mount_davfs.c:882 +#: src/mount_davfs.c:879 #, c-format msgid "can't evaluate path of mount point %s" msgstr "" -#: src/mount_davfs.c:885 src/umount_davfs.c:125 +#: src/mount_davfs.c:882 src/umount_davfs.c:125 #, c-format msgid "too many arguments" msgstr "" -#: src/mount_davfs.c:892 +#: src/mount_davfs.c:889 #, c-format msgid "A relative mount point must lie within your home directory" msgstr "" -#: src/mount_davfs.c:897 +#: src/mount_davfs.c:894 #, c-format msgid "no WebDAV-server specified" msgstr "" -#: src/mount_davfs.c:900 +#: src/mount_davfs.c:897 #, c-format msgid "invalid URL" msgstr "" -#: src/mount_davfs.c:930 +#: src/mount_davfs.c:927 #, c-format msgid "user %s does not exist" msgstr "" -#: src/mount_davfs.c:938 +#: src/mount_davfs.c:935 #, c-format msgid "group %s does not exist" msgstr "" -#: src/mount_davfs.c:1004 +#: src/mount_davfs.c:1002 #, c-format msgid "program is not setuid root" msgstr "" -#: src/mount_davfs.c:1022 +#: src/mount_davfs.c:1020 #, c-format msgid "can't read group data base" msgstr "" -#: 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 +#: src/mount_davfs.c:1047 src/mount_davfs.c:1060 src/mount_davfs.c:1062 +#: src/mount_davfs.c:1080 src/mount_davfs.c:1082 src/mount_davfs.c:1097 msgid "Password: " msgstr "" -#: src/mount_davfs.c:1053 +#: src/mount_davfs.c:1051 #, c-format msgid "" "Please enter the username to authenticate with proxy\n" "%s or hit enter for none.\n" msgstr "" -#: src/mount_davfs.c:1055 src/mount_davfs.c:1075 +#: src/mount_davfs.c:1053 src/mount_davfs.c:1073 msgid "Username:" msgstr "" -#: src/mount_davfs.c:1059 +#: src/mount_davfs.c:1057 #, 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:1073 +#: src/mount_davfs.c:1071 #, c-format msgid "" "Please enter the username to authenticate with server\n" "%s or hit enter for none.\n" msgstr "" -#: src/mount_davfs.c:1079 +#: src/mount_davfs.c:1077 #, 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:1097 +#: src/mount_davfs.c:1095 #, c-format msgid "" "Please enter the password to decrypt client\n" "certificate %s.\n" msgstr "" -#: src/mount_davfs.c:1104 +#: src/mount_davfs.c:1102 #, c-format msgid "can't decrypt client certificate %s" msgstr "" -#: src/mount_davfs.c:1167 +#: src/mount_davfs.c:1165 #, c-format msgid "pid %i, got signal %i" msgstr "" -#: src/mount_davfs.c:1206 +#: src/mount_davfs.c:1204 #, c-format msgid "" "Warning: can't write entry into mtab, but will mount the file system anyway" msgstr "" -#: src/mount_davfs.c:1232 +#: src/mount_davfs.c:1230 #, c-format msgid "option %s has invalid argument;it must be a decimal number" msgstr "" -#: src/mount_davfs.c:1235 +#: src/mount_davfs.c:1233 #, c-format msgid "option %s has invalid argument;it must be an octal number" msgstr "" -#: src/mount_davfs.c:1238 +#: src/mount_davfs.c:1236 #, c-format msgid "option %s has invalid argument;it must be a number" msgstr "" -#: src/mount_davfs.c:1513 +#: src/mount_davfs.c:1476 #, c-format msgid "option %s requires argument" msgstr "" -#: src/mount_davfs.c:1605 +#: src/mount_davfs.c:1568 #, c-format msgid "Unknown option %s.\n" msgstr "" -#: src/mount_davfs.c:1976 +#: src/mount_davfs.c:1937 #, c-format msgid "can't read certificate %s" msgstr "" -#: src/mount_davfs.c:2008 src/mount_davfs.c:2021 +#: src/mount_davfs.c:1969 src/mount_davfs.c:1982 #, c-format msgid "can't read client certificate %s" msgstr "" -#: src/mount_davfs.c:2012 +#: src/mount_davfs.c:1973 #, c-format msgid "client certificate file %s has wrong owner" msgstr "" -#: src/mount_davfs.c:2016 +#: src/mount_davfs.c:1977 #, c-format msgid "client certificate file %s has wrong permissions" msgstr "" -#: src/mount_davfs.c:2038 src/mount_davfs.c:2266 +#: src/mount_davfs.c:1999 src/mount_davfs.c:2227 #, c-format msgid "opening %s failed" msgstr "" -#: 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 +#: src/mount_davfs.c:2020 src/mount_davfs.c:2065 src/mount_davfs.c:2157 +#: src/mount_davfs.c:2254 src/mount_davfs.c:2312 src/mount_davfs.c:2325 #, c-format msgid "malformed line" msgstr "" -#: src/mount_davfs.c:2174 src/mount_davfs.c:2190 +#: src/mount_davfs.c:2135 src/mount_davfs.c:2151 #, c-format msgid "unknown option" msgstr "" -#: src/mount_davfs.c:2496 +#: src/mount_davfs.c:2457 #, c-format msgid "" "Usage:\n" @@ -488,14 +488,14 @@ msgid "" "\n" msgstr "" -#: src/mount_davfs.c:2500 +#: src/mount_davfs.c:2461 #, c-format msgid "" "To mount a WebDAV-resource don't call %s directly, but use\n" "`mount' instead.\n" msgstr "" -#: src/mount_davfs.c:2502 +#: src/mount_davfs.c:2463 #, c-format msgid "" " mount : or\n" @@ -503,7 +503,7 @@ msgid "" " /etc/fstab.\n" msgstr "" -#: src/mount_davfs.c:2505 +#: src/mount_davfs.c:2466 #, c-format msgid "" " mount -t davfs [-o options]\n" @@ -514,7 +514,7 @@ msgid "" "\n" msgstr "" -#: src/mount_davfs.c:2510 +#: src/mount_davfs.c:2471 #, c-format msgid "" "Recognised options:\n" @@ -525,7 +525,7 @@ msgid "" " dir_mode= : default directory mode (octal)\n" msgstr "" -#: src/mount_davfs.c:2516 +#: src/mount_davfs.c:2477 #, c-format msgid "" " ro : mount read-only\n" @@ -600,96 +600,96 @@ msgstr "" msgid "an error occured while waiting; please wait for %s to terminate" msgstr "" -#: src/webdav.c:360 +#: src/webdav.c:337 #, c-format msgid "socket library initialization failed" msgstr "" -#: src/webdav.c:372 +#: src/webdav.c:349 #, c-format msgid "can't open stream to log neon-messages" msgstr "" -#: src/webdav.c:413 +#: src/webdav.c:380 #, c-format msgid "neon library does not support TLS/SSL" msgstr "" -#: src/webdav.c:475 src/webdav.c:478 +#: src/webdav.c:440 src/webdav.c:443 #, c-format msgid "mounting failed; the server does not support WebDAV" msgstr "" -#: src/webdav.c:486 +#: src/webdav.c:451 #, c-format msgid "warning: the server does not support locks" msgstr "" -#: src/webdav.c:1566 +#: src/webdav.c:1454 msgid "authentication failure:" msgstr "" -#: src/webdav.c:1604 +#: src/webdav.c:1492 #, c-format msgid "%i can't open cache file" msgstr "" -#: src/webdav.c:1612 +#: src/webdav.c:1500 #, c-format msgid "%i error writing to cache file" msgstr "" -#: src/webdav.c:1922 src/webdav.c:1951 src/webdav.c:1988 +#: src/webdav.c:1741 src/webdav.c:1770 src/webdav.c:1807 #, c-format msgid "the server certificate is not trusted" msgstr "" -#: src/webdav.c:1931 src/webdav.c:1934 +#: src/webdav.c:1750 src/webdav.c:1753 #, c-format msgid "error processing server certificate" msgstr "" -#: src/webdav.c:1945 src/webdav.c:1979 +#: src/webdav.c:1764 src/webdav.c:1798 #, c-format msgid "the server certificate is not yet valid" msgstr "" -#: src/webdav.c:1947 src/webdav.c:1982 +#: src/webdav.c:1766 src/webdav.c:1801 #, c-format msgid "the server certificate has expired" msgstr "" -#: src/webdav.c:1949 src/webdav.c:1985 +#: src/webdav.c:1768 src/webdav.c:1804 #, c-format msgid "the server certificate does not match the server name" msgstr "" -#: src/webdav.c:1953 src/webdav.c:1991 +#: src/webdav.c:1772 src/webdav.c:1810 #, c-format msgid "unknown certificate error" msgstr "" -#: src/webdav.c:1954 +#: src/webdav.c:1773 #, c-format msgid " issuer: %s" msgstr "" -#: src/webdav.c:1956 +#: src/webdav.c:1775 #, c-format msgid " subject: %s" msgstr "" -#: src/webdav.c:1958 +#: src/webdav.c:1777 #, c-format msgid " identity: %s" msgstr "" -#: src/webdav.c:1960 +#: src/webdav.c:1779 #, c-format msgid " fingerprint: %s" msgstr "" -#: src/webdav.c:1962 +#: src/webdav.c:1781 #, c-format msgid "" "You only should accept this certificate, if you can\n" @@ -697,26 +697,26 @@ msgid "" "or there might be a man-in-the-middle-attack.\n" msgstr "" -#: src/webdav.c:1965 +#: src/webdav.c:1784 #, c-format msgid "Accept certificate for this session? [y,N] " msgstr "" -#: src/webdav.c:1992 +#: src/webdav.c:1811 #, c-format msgid " issuer: %s" msgstr "" -#: src/webdav.c:1993 +#: src/webdav.c:1812 #, c-format msgid " subject: %s" msgstr "" -#: src/webdav.c:1994 +#: src/webdav.c:1813 #, c-format msgid " identity: %s" msgstr "" -#: src/webdav.c:1997 +#: src/webdav.c:1816 msgid " accepted by user" msgstr "" diff --git a/po/de.po b/po/de.po index ef3dd8c..7bf0fd7 100644 --- a/po/de.po +++ b/po/de.po @@ -8,7 +8,7 @@ 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: 2013-08-09 12:39+0200\n" +"POT-Creation-Date: 2013-09-01 18:45+0200\n" "PO-Revision-Date: 2013-08-09 12:49+0100\n" "Last-Translator: Werner Baumann \n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/cache.c:656 +#: src/cache.c:650 #, 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:661 +#: src/cache.c:655 #, c-format msgid "Last try succeeded.\n" msgstr "Der letzte Versuch war erfolgreich.\n" -#: src/cache.c:664 +#: src/cache.c:658 #, 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:667 +#: src/cache.c:661 #, c-format msgid "" "Mounting failed.\n" @@ -49,22 +49,22 @@ msgstr "" "das Einhängen schlug fehl;\n" "%s" -#: src/cache.c:706 +#: src/cache.c:700 #, c-format msgid "can't replace %s with %s" msgstr "kann %s nicht durch %s ersetzen" -#: src/cache.c:710 +#: src/cache.c:704 #, c-format msgid "error writing new index file %s" msgstr "Fehler beim Schreiben der neuen Indexdatei %s" -#: src/cache.c:714 +#: src/cache.c:708 #, c-format msgid "can't create new index file for %s" msgstr "kann keine neue Indexdatei für %s erzeugen" -#: src/cache.c:925 +#: src/cache.c:911 #, c-format msgid "" "File %s exists on the server but should not. Maybe it is an error in the " @@ -74,156 +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:2512 src/cache.c:2545 +#: src/cache.c:2384 src/cache.c:2417 #, c-format msgid "can't create cache file %s" msgstr "kann die Cachedatei %s nicht erzeugen" -#: src/cache.c:2560 +#: src/cache.c:2432 #, c-format msgid "error writing directory %s" msgstr "Fehler beim Schreiben des Verzeichnisses %s" -#: src/cache.c:2723 src/mount_davfs.c:1013 +#: src/cache.c:2594 src/mount_davfs.c:1011 #, c-format msgid "can't read user data base" msgstr "kann die Benutzerdatenbank nicht lesen" -#: src/cache.c:2735 +#: src/cache.c:2606 #, c-format msgid "can't open cache directory %s" msgstr "kann das Cacheverzeichnis %s nicht öffnen" -#: src/cache.c:2750 +#: src/cache.c:2621 #, c-format msgid "can't create cache directory %s" msgstr "kann das Cacheverzeichnis %s nicht erzeugen" -#: src/cache.c:2757 +#: src/cache.c:2628 #, c-format msgid "can't access cache directory %s" msgstr "Zugriff auf das Cachverzeichnis %s verweigert" -#: src/cache.c:2760 +#: src/cache.c:2631 #, c-format msgid "wrong owner of cache directory %s" msgstr "das Cacheverzeichnis %s hat den falschen Besitzer" -#: src/cache.c:2764 +#: src/cache.c:2635 #, c-format msgid "wrong permissions set for cache directory %s" msgstr "das Cachverzeichnis %s hat die falschen Dateirechte" -#: src/cache.c:2794 +#: src/cache.c:2665 msgid "found orphaned file in cache:" msgstr "fand verwaiste Datei im Cache:" -#: src/cache.c:2867 +#: src/cache.c:2738 #, c-format msgid "error parsing %s" msgstr "Syntaxfehler in %s" -#: src/cache.c:2868 +#: src/cache.c:2739 #, c-format msgid " at line %i" msgstr " in Zeile %i" -#: src/cache.c:2913 +#: src/cache.c:2784 #, 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/kernel_interface.c:209 -#, c-format -msgid "can't open fuse device" -msgstr "kann die fuse-Gerätedatei nicht öffnen" - -#: src/kernel_interface.c:217 -#, c-format -msgid "mounting failed" -msgstr "das Aushängen schlug fehl" - -#: src/kernel_interface.c:226 +#: src/kernel_interface.c:219 #, c-format msgid "can't allocate message buffer" msgstr "kein Speicher für den Nachrichtenpuffer verfügbar" -#: src/mount_davfs.c:294 +#: src/kernel_interface.c:246 +#, c-format +msgid "can't open fuse device" +msgstr "kann die fuse-Gerätedatei nicht öffnen" + +#: src/kernel_interface.c:254 +#, c-format +msgid "mounting failed" +msgstr "das Aushängen schlug fehl" + +#: src/mount_davfs.c:291 #, c-format msgid "can't start daemon process" msgstr "kann den Hintergrundprozess nicht starten" -#: src/mount_davfs.c:316 +#: src/mount_davfs.c:313 msgid "can't release root privileges" msgstr "ich werde die root-Rechte nicht los" -#: src/mount_davfs.c:333 +#: src/mount_davfs.c:330 msgid "failed to release tty properly" msgstr "kann das Terminal nicht freigeben" -#: src/mount_davfs.c:345 +#: src/mount_davfs.c:342 #, c-format msgid "can't write pid file %s" msgstr "kann die PID-Datei %s nicht schreiben" -#: src/mount_davfs.c:362 +#: src/mount_davfs.c:359 #, c-format msgid "unmounting %s" msgstr "hänge %s aus" -#: src/mount_davfs.c:364 +#: src/mount_davfs.c:361 msgid "unmounting failed" msgstr "das Aushängen schlug fehl" -#: src/mount_davfs.c:435 +#: src/mount_davfs.c:432 #, c-format msgid "can't change group id" msgstr "kann die Gruppenkennung nicht ändern" -#: src/mount_davfs.c:473 src/mount_davfs.c:567 src/mount_davfs.c:593 +#: src/mount_davfs.c:470 src/mount_davfs.c:564 src/mount_davfs.c:590 #, c-format msgid "can't create directory %s" msgstr "kann das Verzeichnis %s nicht erzeugen" -#: 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 +#: src/mount_davfs.c:474 src/mount_davfs.c:568 src/mount_davfs.c:594 +#: src/mount_davfs.c:599 src/mount_davfs.c:607 #, c-format msgid "can't access directory %s" msgstr "Zugriff auf das Verzeichnis %s verweigert" -#: src/mount_davfs.c:483 src/mount_davfs.c:577 +#: src/mount_davfs.c:480 src/mount_davfs.c:574 #, c-format msgid "can't change mode of directory %s" msgstr "kann die Rechte des Verzeichnisses %s nicht ändern" -#: src/mount_davfs.c:488 src/mount_davfs.c:583 +#: src/mount_davfs.c:485 src/mount_davfs.c:580 #, c-format msgid "can't change group of directory %s" msgstr "kann die Gruppenkennung des Verneichnisses %s nicht ändern" -#: src/mount_davfs.c:495 src/mount_davfs.c:551 +#: src/mount_davfs.c:492 src/mount_davfs.c:548 #, c-format msgid "file %s has wrong owner" msgstr "die Datei %s hat den falschen Besitzer" -#: src/mount_davfs.c:499 src/mount_davfs.c:556 +#: src/mount_davfs.c:496 src/mount_davfs.c:553 #, c-format msgid "file %s has wrong permissions" msgstr "die Dateirechte für %s sind falsch" -#: src/mount_davfs.c:628 src/mount_davfs.c:680 +#: src/mount_davfs.c:625 src/mount_davfs.c:677 #, c-format msgid "can't open file %s" msgstr "kann die Datei %s nicht öffnen" -#: src/mount_davfs.c:633 +#: src/mount_davfs.c:630 #, c-format msgid "%s is already mounted on %s" msgstr "%s ist bereits auf %s eingehängt" -#: src/mount_davfs.c:655 +#: src/mount_davfs.c:652 #, c-format msgid "" "found PID file %s.\n" @@ -234,84 +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:697 +#: src/mount_davfs.c:694 #, c-format msgid "no entry for %s found in %s" msgstr "für %s ist kein Eintrag in %s" -#: src/mount_davfs.c:701 +#: src/mount_davfs.c:698 #, c-format msgid "different URL in %s" msgstr "in %s ist eine andere URL angegeben" -#: src/mount_davfs.c:704 +#: src/mount_davfs.c:701 #, c-format msgid "different file system type in %s" msgstr "in %s ist ein anderer Dateisystemtyp angegeben" -#: src/mount_davfs.c:715 +#: src/mount_davfs.c:712 #, c-format msgid "different config file in %s" msgstr "in %s ist eine andere Konfigurationsdatei angegeben" -#: src/mount_davfs.c:721 +#: src/mount_davfs.c:718 #, c-format msgid "different username in %s" msgstr "in %s ist ein anderer Benutzername angegeben" -#: src/mount_davfs.c:725 +#: src/mount_davfs.c:722 #, 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:728 +#: src/mount_davfs.c:725 #, c-format msgid "different mount options in %s" msgstr "in %s sind andere Mount-Optionen angegeben" -#: src/mount_davfs.c:731 +#: src/mount_davfs.c:728 #, c-format msgid "different uid in %s" msgstr "in %s ist eine andere uid angegeben" -#: src/mount_davfs.c:733 +#: src/mount_davfs.c:730 #, c-format msgid "different gid in %s" msgstr "in %s ist eine andere gid angegeben" -#: src/mount_davfs.c:735 +#: src/mount_davfs.c:732 #, c-format msgid "different dir_mode in %s" msgstr "in %s ist ein anderer dir_mode angegeben" -#: src/mount_davfs.c:737 +#: src/mount_davfs.c:734 #, c-format msgid "different file_mode in %s" msgstr "in %s ist ein anderer file_mode angegeben" -#: src/mount_davfs.c:757 +#: src/mount_davfs.c:754 #, 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:769 +#: src/mount_davfs.c:766 #, 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:780 +#: src/mount_davfs.c:777 #, 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:800 src/mount_davfs.c:1139 +#: src/mount_davfs.c:797 src/mount_davfs.c:1137 #, c-format msgid "can't change effective user id" msgstr "kann die effektive Benutzer-ID nicht ändern" -#: src/mount_davfs.c:844 src/umount_davfs.c:92 +#: src/mount_davfs.c:841 src/umount_davfs.c:92 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -322,67 +322,67 @@ msgstr "" "gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE " "ZWECKE.\n" -#: src/mount_davfs.c:860 src/umount_davfs.c:117 +#: src/mount_davfs.c:857 src/umount_davfs.c:117 #, c-format msgid "unknown error parsing arguments" msgstr "Fehler beim Analysieren der Befehlsargumente" -#: src/mount_davfs.c:869 src/umount_davfs.c:123 +#: src/mount_davfs.c:866 src/umount_davfs.c:123 #, c-format msgid "missing argument" msgstr "zu wenig Argumente" -#: src/mount_davfs.c:882 +#: src/mount_davfs.c:879 #, 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:885 src/umount_davfs.c:125 +#: src/mount_davfs.c:882 src/umount_davfs.c:125 #, c-format msgid "too many arguments" msgstr "zu viele Argumente" -#: src/mount_davfs.c:892 +#: src/mount_davfs.c:889 #, 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:897 +#: src/mount_davfs.c:894 #, c-format msgid "no WebDAV-server specified" msgstr "es wurde kein WebDAV-Server angegeben" -#: src/mount_davfs.c:900 +#: src/mount_davfs.c:897 #, c-format msgid "invalid URL" msgstr "die URL ist ungültig" -#: src/mount_davfs.c:930 +#: src/mount_davfs.c:927 #, c-format msgid "user %s does not exist" msgstr "der Benutzer %s existiert nicht" -#: src/mount_davfs.c:938 +#: src/mount_davfs.c:935 #, c-format msgid "group %s does not exist" msgstr "die Gruppe %s existiert nicht" -#: src/mount_davfs.c:1004 +#: src/mount_davfs.c:1002 #, c-format msgid "program is not setuid root" msgstr "die Programmdatei hat das setuid-Bit nicht gesetzt" -#: src/mount_davfs.c:1022 +#: src/mount_davfs.c:1020 #, c-format msgid "can't read group data base" msgstr "kann die Gruppendatenbank nicht lesen" -#: 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 +#: src/mount_davfs.c:1047 src/mount_davfs.c:1060 src/mount_davfs.c:1062 +#: src/mount_davfs.c:1080 src/mount_davfs.c:1082 src/mount_davfs.c:1097 msgid "Password: " msgstr "Passwort:" -#: src/mount_davfs.c:1053 +#: src/mount_davfs.c:1051 #, c-format msgid "" "Please enter the username to authenticate with proxy\n" @@ -391,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:1055 src/mount_davfs.c:1075 +#: src/mount_davfs.c:1053 src/mount_davfs.c:1073 msgid "Username:" msgstr "Benutzername:" -#: src/mount_davfs.c:1059 +#: src/mount_davfs.c:1057 #, c-format msgid "" "Please enter the password to authenticate user %s with proxy\n" @@ -404,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:1073 +#: src/mount_davfs.c:1071 #, c-format msgid "" "Please enter the username to authenticate with server\n" @@ -413,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:1079 +#: src/mount_davfs.c:1077 #, c-format msgid "" "Please enter the password to authenticate user %s with server\n" @@ -422,7 +422,7 @@ 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:1097 +#: src/mount_davfs.c:1095 #, c-format msgid "" "Please enter the password to decrypt client\n" @@ -431,17 +431,17 @@ msgstr "" "Gib bitte das Passwort für die Entschlüsselung des\n" "Client-Zertifikats %s ein.\n" -#: src/mount_davfs.c:1104 +#: src/mount_davfs.c:1102 #, c-format msgid "can't decrypt client certificate %s" msgstr "kann das Zertifikat %s nicht entschlüsseln" -#: src/mount_davfs.c:1167 +#: src/mount_davfs.c:1165 #, c-format msgid "pid %i, got signal %i" msgstr "PID %i, erhielt Signal %i" -#: src/mount_davfs.c:1206 +#: src/mount_davfs.c:1204 #, c-format msgid "" "Warning: can't write entry into mtab, but will mount the file system anyway" @@ -449,72 +449,72 @@ msgstr "" "Warnung: kann keinen Eintrag in die mtab schreiben, häne das Dateisystem " "trotzdem ein." -#: src/mount_davfs.c:1232 +#: src/mount_davfs.c:1230 #, 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:1235 +#: src/mount_davfs.c:1233 #, 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:1238 +#: src/mount_davfs.c:1236 #, 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:1513 +#: src/mount_davfs.c:1476 #, c-format msgid "option %s requires argument" msgstr "die Option %s verlangt ein Argument" -#: src/mount_davfs.c:1605 +#: src/mount_davfs.c:1568 #, c-format msgid "Unknown option %s.\n" msgstr "unbekannte Option %s.\n" -#: src/mount_davfs.c:1976 +#: src/mount_davfs.c:1937 #, 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 +#: src/mount_davfs.c:1969 src/mount_davfs.c:1982 #, c-format msgid "can't read client certificate %s" msgstr "kann das Client-Zertifikat %s nicht lesen" -#: src/mount_davfs.c:2012 +#: src/mount_davfs.c:1973 #, 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 +#: src/mount_davfs.c:1977 #, 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 +#: src/mount_davfs.c:1999 src/mount_davfs.c:2227 #, c-format msgid "opening %s failed" msgstr "konnte %s nicht öffnen" -#: 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 +#: src/mount_davfs.c:2020 src/mount_davfs.c:2065 src/mount_davfs.c:2157 +#: src/mount_davfs.c:2254 src/mount_davfs.c:2312 src/mount_davfs.c:2325 #, c-format msgid "malformed line" msgstr "Syntaxfehler in der Zeile" -#: src/mount_davfs.c:2174 src/mount_davfs.c:2190 +#: src/mount_davfs.c:2135 src/mount_davfs.c:2151 #, c-format msgid "unknown option" msgstr "unbekannte Option" -#: src/mount_davfs.c:2496 +#: src/mount_davfs.c:2457 #, c-format msgid "" "Usage:\n" @@ -527,7 +527,7 @@ msgstr "" " %s -h, --help : diese Hilfe anzeigen\n" "\n" -#: src/mount_davfs.c:2500 +#: src/mount_davfs.c:2461 #, c-format msgid "" "To mount a WebDAV-resource don't call %s directly, but use\n" @@ -536,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:2502 +#: src/mount_davfs.c:2463 #, c-format msgid "" " mount : or\n" @@ -547,7 +547,7 @@ msgstr "" " mount : hänge die WebDAV-Resource entsprechend den\n" " Angaben in /etc/fstab ein.\n" -#: src/mount_davfs.c:2505 +#: src/mount_davfs.c:2466 #, c-format msgid "" " mount -t davfs [-o options]\n" @@ -564,7 +564,7 @@ msgstr "" " Kommas unterteilte Liste von Optionen.\n" "\n" -#: src/mount_davfs.c:2510 +#: src/mount_davfs.c:2471 #, c-format msgid "" "Recognised options:\n" @@ -581,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:2516 +#: src/mount_davfs.c:2477 #, c-format msgid "" " ro : mount read-only\n" @@ -684,96 +684,96 @@ msgid "an error occured while waiting; please wait for %s to terminate" msgstr "" "während des Wartens trat ein Fehler auf; bitte warte bis der %s-Prozess endet" -#: src/webdav.c:360 +#: src/webdav.c:337 #, c-format msgid "socket library initialization failed" msgstr "die socket-Bibliothek konnte nicht initialisiert werden" -#: src/webdav.c:372 +#: src/webdav.c:349 #, c-format msgid "can't open stream to log neon-messages" msgstr "kann die Ausgabe für neon-Log-Meldungen nicht öffnen" -#: src/webdav.c:413 +#: src/webdav.c:380 #, c-format msgid "neon library does not support TLS/SSL" msgstr "die Neon-Bibliothek uterstützt TLS/SSL nicht" -#: src/webdav.c:475 src/webdav.c:478 +#: src/webdav.c:440 src/webdav.c:443 #, 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:486 +#: src/webdav.c:451 #, c-format msgid "warning: the server does not support locks" msgstr "Warnung: der Server kann Dateien nicht sperren" -#: src/webdav.c:1566 +#: src/webdav.c:1454 msgid "authentication failure:" msgstr "Authentifizierungsfehler" -#: src/webdav.c:1604 +#: src/webdav.c:1492 #, c-format msgid "%i can't open cache file" msgstr "%i kann die Cache-Datei nicht öffnen" -#: src/webdav.c:1612 +#: src/webdav.c:1500 #, c-format msgid "%i error writing to cache file" msgstr "%i Fehler beim Schreiben der Cache-Datei" -#: src/webdav.c:1922 src/webdav.c:1951 src/webdav.c:1988 +#: src/webdav.c:1741 src/webdav.c:1770 src/webdav.c:1807 #, c-format msgid "the server certificate is not trusted" msgstr "wir trauen dem Zertifikat nicht" -#: src/webdav.c:1931 src/webdav.c:1934 +#: src/webdav.c:1750 src/webdav.c:1753 #, c-format msgid "error processing server certificate" msgstr "Fehler beim Analysieren des Server-Zertifikats" -#: src/webdav.c:1945 src/webdav.c:1979 +#: src/webdav.c:1764 src/webdav.c:1798 #, c-format msgid "the server certificate is not yet valid" msgstr "das Server-Zertifikat ist noch nicht gültig" -#: src/webdav.c:1947 src/webdav.c:1982 +#: src/webdav.c:1766 src/webdav.c:1801 #, c-format msgid "the server certificate has expired" msgstr "das Server-Zertifikat ist nicht mehr gültig" -#: src/webdav.c:1949 src/webdav.c:1985 +#: src/webdav.c:1768 src/webdav.c:1804 #, 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:1953 src/webdav.c:1991 +#: src/webdav.c:1772 src/webdav.c:1810 #, c-format msgid "unknown certificate error" msgstr "Fehler beim Analysieren des Server-Zertifikats" -#: src/webdav.c:1954 +#: src/webdav.c:1773 #, c-format msgid " issuer: %s" msgstr " Aussteller: %s" -#: src/webdav.c:1956 +#: src/webdav.c:1775 #, c-format msgid " subject: %s" msgstr " Inhaber: %s" -#: src/webdav.c:1958 +#: src/webdav.c:1777 #, c-format msgid " identity: %s" msgstr " Name: %s" -#: src/webdav.c:1960 +#: src/webdav.c:1779 #, c-format msgid " fingerprint: %s" msgstr " Fingerabdruck: %s" -#: src/webdav.c:1962 +#: src/webdav.c:1781 #, c-format msgid "" "You only should accept this certificate, if you can\n" @@ -784,28 +784,26 @@ 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:1965 +#: src/webdav.c:1784 #, c-format msgid "Accept certificate for this session? [y,N] " msgstr "Ich akzeptiere das Zertifikat für diese Sitzung [j,N]: " -#: src/webdav.c:1992 +#: src/webdav.c:1811 #, c-format msgid " issuer: %s" msgstr " Aussteller des Zertifikats: %s" -#: src/webdav.c:1993 +#: src/webdav.c:1812 #, c-format msgid " subject: %s" msgstr " Inhaber des Zertifikats: %s" -#: src/webdav.c:1994 +#: src/webdav.c:1813 #, c-format msgid " identity: %s" msgstr " Name: %s" -#: src/webdav.c:1997 +#: src/webdav.c:1816 msgid " accepted by user" msgstr " durch den Benutzer akzeptiert" - - diff --git a/src/fuse_kernel.h b/src/fuse_kernel.h index 85f4171..c632b58 100644 --- a/src/fuse_kernel.h +++ b/src/fuse_kernel.h @@ -1,13 +1,14 @@ -/* This file is taken from FUSE 2.5.3. - From the two alternative licences the BSD licence has been chosen. - #include and #ifdef directives have been removed. - Modifications by Werner Baumann, 2009-04-14. */ - - -/* This file defines the kernel interface of FUSE */ - /* - Copyright (C) 2001-2006 Miklos Szeredi. All rights reserved. + This file defines the kernel interface of FUSE + Copyright (C) 2001-2008 Miklos Szeredi + + This program can be distributed under the terms of the GNU GPL. + See the file COPYING. + + This -- and only this -- header file may also be distributed under + the terms of the BSD Licence as follows: + + Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -31,26 +32,98 @@ SUCH DAMAGE. */ +/* + * This file defines the kernel interface of FUSE + * + * Protocol changelog: + * + * 7.9: + * - new fuse_getattr_in input argument of GETATTR + * - add lk_flags in fuse_lk_in + * - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in + * - add blksize field to fuse_attr + * - add file flags field to fuse_read_in and fuse_write_in + * + * 7.10 + * - add nonseekable open flag + * + * 7.11 + * - add IOCTL message + * - add unsolicited notification support + * - add POLL message and NOTIFY_POLL notification + * + * 7.12 + * - add umask flag to input argument of open, mknod and mkdir + * - add notification messages for invalidation of inodes and + * directory entries + * + * 7.13 + * - make max number of background requests and congestion threshold + * tunables + * + * 7.14 + * - add splice support to fuse device + * + * 7.15 + * - add store notify + * - add retrieve notify + * + * 7.16 + * - add BATCH_FORGET request + * - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct + * fuse_ioctl_iovec' instead of ambiguous 'struct iovec' + * - add FUSE_IOCTL_32BIT flag + * + * 7.17 + * - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK + * + * 7.18 + * - add FUSE_IOCTL_DIR flag + * - add FUSE_NOTIFY_DELETE + * + * 7.19 + * - add FUSE_FALLOCATE + */ +#ifndef _LINUX_FUSE_H +#define _LINUX_FUSE_H + +#include #define __u64 uint64_t +#define __s64 int64_t #define __u32 uint32_t #define __s32 int32_t +#define __u16 uint16_t + +/* + * Version negotiation: + * + * Both the kernel and userspace send the version they support in the + * INIT request and reply respectively. + * + * If the major versions match then both shall use the smallest + * of the two minor versions for communication. + * + * If the kernel supports a larger major version, then userspace shall + * reply with the major version it supports, ignore the rest of the + * INIT message and expect a new INIT message from the kernel with a + * matching major version. + * + * If the library supports a larger major version, then it shall fall + * back to the major protocol version sent by the kernel for + * communication and reply with that major version (and an arbitrary + * supported minor version). + */ /** Version number of this interface */ #define FUSE_KERNEL_VERSION 7 /** Minor version number of this interface */ -#define FUSE_KERNEL_MINOR_VERSION 5 +#define FUSE_KERNEL_MINOR_VERSION 19 /** The node ID of the root inode */ #define FUSE_ROOT_ID 1 -/** The major number of the fuse character device */ -#define FUSE_MAJOR 10 - -/** The minor number of the fuse character device */ -#define FUSE_MINOR 229 - /* Make sure all structures are padded to 64bit boundary, so 32bit userspace works under 64bit kernels */ @@ -69,6 +142,8 @@ struct fuse_attr { __u32 uid; __u32 gid; __u32 rdev; + __u32 blksize; + __u32 padding; }; struct fuse_kstatfs { @@ -84,6 +159,16 @@ struct fuse_kstatfs { __u32 spare[6]; }; +struct fuse_file_lock { + __u64 start; + __u64 end; + __u32 type; + __u32 pid; /* tgid */ +}; + +/** + * Bitmasks for fuse_setattr_in.valid + */ #define FATTR_MODE (1 << 0) #define FATTR_UID (1 << 1) #define FATTR_GID (1 << 2) @@ -91,15 +176,100 @@ struct fuse_kstatfs { #define FATTR_ATIME (1 << 4) #define FATTR_MTIME (1 << 5) #define FATTR_FH (1 << 6) +#define FATTR_ATIME_NOW (1 << 7) +#define FATTR_MTIME_NOW (1 << 8) +#define FATTR_LOCKOWNER (1 << 9) /** * Flags returned by the OPEN request * * FOPEN_DIRECT_IO: bypass page cache for this open file * FOPEN_KEEP_CACHE: don't invalidate the data cache on open + * FOPEN_NONSEEKABLE: the file is not seekable */ #define FOPEN_DIRECT_IO (1 << 0) #define FOPEN_KEEP_CACHE (1 << 1) +#define FOPEN_NONSEEKABLE (1 << 2) + +/** + * INIT request/reply flags + * + * FUSE_POSIX_LOCKS: remote locking for POSIX file locks + * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".." + * FUSE_DONT_MASK: don't apply umask to file mode on create operations + * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks + */ +#define FUSE_ASYNC_READ (1 << 0) +#define FUSE_POSIX_LOCKS (1 << 1) +#define FUSE_FILE_OPS (1 << 2) +#define FUSE_ATOMIC_O_TRUNC (1 << 3) +#define FUSE_EXPORT_SUPPORT (1 << 4) +#define FUSE_BIG_WRITES (1 << 5) +#define FUSE_DONT_MASK (1 << 6) +#define FUSE_FLOCK_LOCKS (1 << 10) + +/** + * CUSE INIT request/reply flags + * + * CUSE_UNRESTRICTED_IOCTL: use unrestricted ioctl + */ +#define CUSE_UNRESTRICTED_IOCTL (1 << 0) + +/** + * Release flags + */ +#define FUSE_RELEASE_FLUSH (1 << 0) +#define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1) + +/** + * Getattr flags + */ +#define FUSE_GETATTR_FH (1 << 0) + +/** + * Lock flags + */ +#define FUSE_LK_FLOCK (1 << 0) + +/** + * WRITE flags + * + * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed + * FUSE_WRITE_LOCKOWNER: lock_owner field is valid + */ +#define FUSE_WRITE_CACHE (1 << 0) +#define FUSE_WRITE_LOCKOWNER (1 << 1) + +/** + * Read flags + */ +#define FUSE_READ_LOCKOWNER (1 << 1) + +/** + * Ioctl flags + * + * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine + * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed + * FUSE_IOCTL_RETRY: retry with new iovecs + * FUSE_IOCTL_32BIT: 32bit ioctl + * FUSE_IOCTL_DIR: is a directory + * + * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs + */ +#define FUSE_IOCTL_COMPAT (1 << 0) +#define FUSE_IOCTL_UNRESTRICTED (1 << 1) +#define FUSE_IOCTL_RETRY (1 << 2) +#define FUSE_IOCTL_32BIT (1 << 3) +#define FUSE_IOCTL_DIR (1 << 4) + +#define FUSE_IOCTL_MAX_IOV 256 + +/** + * Poll flags + * + * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify + */ +#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) enum fuse_opcode { FUSE_LOOKUP = 1, @@ -130,13 +300,38 @@ enum fuse_opcode { FUSE_READDIR = 28, FUSE_RELEASEDIR = 29, FUSE_FSYNCDIR = 30, + FUSE_GETLK = 31, + FUSE_SETLK = 32, + FUSE_SETLKW = 33, FUSE_ACCESS = 34, - FUSE_CREATE = 35 + FUSE_CREATE = 35, + FUSE_INTERRUPT = 36, + FUSE_BMAP = 37, + FUSE_DESTROY = 38, + FUSE_IOCTL = 39, + FUSE_POLL = 40, + FUSE_NOTIFY_REPLY = 41, + FUSE_BATCH_FORGET = 42, + FUSE_FALLOCATE = 43, + + /* CUSE specific operations */ + CUSE_INIT = 4096, +}; + +enum fuse_notify_code { + FUSE_NOTIFY_POLL = 1, + FUSE_NOTIFY_INVAL_INODE = 2, + FUSE_NOTIFY_INVAL_ENTRY = 3, + FUSE_NOTIFY_STORE = 4, + FUSE_NOTIFY_RETRIEVE = 5, + FUSE_NOTIFY_DELETE = 6, + FUSE_NOTIFY_CODE_MAX, }; /* The read buffer is required to be at least 8k, but may be much larger */ -/* 2009-04-14, increased size of FUSE_MIN_READ_BUFFER, Werner Baumann */ -#define FUSE_MIN_READ_BUFFER 16384 +#define FUSE_MIN_READ_BUFFER 8192 + +#define FUSE_COMPAT_ENTRY_OUT_SIZE 120 struct fuse_entry_out { __u64 nodeid; /* Inode ID */ @@ -153,6 +348,24 @@ struct fuse_forget_in { __u64 nlookup; }; +struct fuse_forget_one { + __u64 nodeid; + __u64 nlookup; +}; + +struct fuse_batch_forget_in { + __u32 count; + __u32 dummy; +}; + +struct fuse_getattr_in { + __u32 getattr_flags; + __u32 dummy; + __u64 fh; +}; + +#define FUSE_COMPAT_ATTR_OUT_SIZE 96 + struct fuse_attr_out { __u64 attr_valid; /* Cache timeout for the attributes */ __u32 attr_valid_nsec; @@ -160,14 +373,18 @@ struct fuse_attr_out { struct fuse_attr attr; }; +#define FUSE_COMPAT_MKNOD_IN_SIZE 8 + struct fuse_mknod_in { __u32 mode; __u32 rdev; + __u32 umask; + __u32 padding; }; struct fuse_mkdir_in { __u32 mode; - __u32 padding; + __u32 umask; }; struct fuse_rename_in { @@ -183,7 +400,7 @@ struct fuse_setattr_in { __u32 padding; __u64 fh; __u64 size; - __u64 unused1; + __u64 lock_owner; __u64 atime; __u64 mtime; __u64 unused2; @@ -198,8 +415,15 @@ struct fuse_setattr_in { }; struct fuse_open_in { + __u32 flags; + __u32 unused; +}; + +struct fuse_create_in { __u32 flags; __u32 mode; + __u32 umask; + __u32 padding; }; struct fuse_open_out { @@ -211,27 +435,37 @@ struct fuse_open_out { struct fuse_release_in { __u64 fh; __u32 flags; - __u32 padding; + __u32 release_flags; + __u64 lock_owner; }; struct fuse_flush_in { __u64 fh; - __u32 flush_flags; + __u32 unused; __u32 padding; + __u64 lock_owner; }; struct fuse_read_in { __u64 fh; __u64 offset; __u32 size; + __u32 read_flags; + __u64 lock_owner; + __u32 flags; __u32 padding; }; +#define FUSE_COMPAT_WRITE_IN_SIZE 24 + struct fuse_write_in { __u64 fh; __u64 offset; __u32 size; __u32 write_flags; + __u64 lock_owner; + __u32 flags; + __u32 padding; }; struct fuse_write_out { @@ -266,6 +500,18 @@ struct fuse_getxattr_out { __u32 padding; }; +struct fuse_lk_in { + __u64 fh; + __u64 owner; + struct fuse_file_lock lk; + __u32 lk_flags; + __u32 padding; +}; + +struct fuse_lk_out { + struct fuse_file_lock lk; +}; + struct fuse_access_in { __u32 mask; __u32 padding; @@ -274,15 +520,100 @@ struct fuse_access_in { struct fuse_init_in { __u32 major; __u32 minor; + __u32 max_readahead; + __u32 flags; }; struct fuse_init_out { __u32 major; __u32 minor; - __u32 unused[3]; + __u32 max_readahead; + __u32 flags; + __u16 max_background; + __u16 congestion_threshold; __u32 max_write; }; +#define CUSE_INIT_INFO_MAX 4096 + +struct cuse_init_in { + __u32 major; + __u32 minor; + __u32 unused; + __u32 flags; +}; + +struct cuse_init_out { + __u32 major; + __u32 minor; + __u32 unused; + __u32 flags; + __u32 max_read; + __u32 max_write; + __u32 dev_major; /* chardev major */ + __u32 dev_minor; /* chardev minor */ + __u32 spare[10]; +}; + +struct fuse_interrupt_in { + __u64 unique; +}; + +struct fuse_bmap_in { + __u64 block; + __u32 blocksize; + __u32 padding; +}; + +struct fuse_bmap_out { + __u64 block; +}; + +struct fuse_ioctl_in { + __u64 fh; + __u32 flags; + __u32 cmd; + __u64 arg; + __u32 in_size; + __u32 out_size; +}; + +struct fuse_ioctl_iovec { + __u64 base; + __u64 len; +}; + +struct fuse_ioctl_out { + __s32 result; + __u32 flags; + __u32 in_iovs; + __u32 out_iovs; +}; + +struct fuse_poll_in { + __u64 fh; + __u64 kh; + __u32 flags; + __u32 padding; +}; + +struct fuse_poll_out { + __u32 revents; + __u32 padding; +}; + +struct fuse_notify_poll_wakeup_out { + __u64 kh; +}; + +struct fuse_fallocate_in { + __u64 fh; + __u64 offset; + __u64 length; + __u32 mode; + __u32 padding; +}; + struct fuse_in_header { __u32 len; __u32 opcode; @@ -305,10 +636,56 @@ struct fuse_dirent { __u64 off; __u32 namelen; __u32 type; - char name[0]; + char name[]; }; -#define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name) +#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name) #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1)) #define FUSE_DIRENT_SIZE(d) \ FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) + +struct fuse_notify_inval_inode_out { + __u64 ino; + __s64 off; + __s64 len; +}; + +struct fuse_notify_inval_entry_out { + __u64 parent; + __u32 namelen; + __u32 padding; +}; + +struct fuse_notify_delete_out { + __u64 parent; + __u64 child; + __u32 namelen; + __u32 padding; +}; + +struct fuse_notify_store_out { + __u64 nodeid; + __u64 offset; + __u32 size; + __u32 padding; +}; + +struct fuse_notify_retrieve_out { + __u64 notify_unique; + __u64 nodeid; + __u64 offset; + __u32 size; + __u32 padding; +}; + +/* Matches the size of fuse_write_in */ +struct fuse_notify_retrieve_in { + __u64 dummy1; + __u64 offset; + __u32 size; + __u32 dummy2; + __u64 dummy3; + __u64 dummy4; +}; + +#endif /* _LINUX_FUSE_H */ diff --git a/src/kernel_interface.c b/src/kernel_interface.c index c03128d..08ee0f6 100644 --- a/src/kernel_interface.c +++ b/src/kernel_interface.c @@ -55,6 +55,9 @@ #ifdef HAVE_SYS_STAT_H #include #endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif #include "xalloc.h" #include "xvasprintf.h" @@ -74,6 +77,17 @@ #endif +/* Constants from Linux headers */ +/*==============================*/ + +#ifndef MISC_MAJOR +#define MISC_MAJOR 10 +#endif +#ifndef FUSE_MINOR +#define FUSE_MINOR 229 +#endif + + /* Data Types */ /*============*/ @@ -92,6 +106,9 @@ struct create_out { kernel file system. */ #define FUSE_DEV_NAME "fuse" +/* Minimum minor version of fuse. */ +#define FUSE_MIN_MINOR 13 + /* Private global variables */ /*==========================*/ @@ -102,6 +119,14 @@ static int fuse_device; /* Buffer used for communication with the kernel module (in and out). */ static size_t buf_size; static char *buf; +/* Header of incomming calls. */ +static struct fuse_in_header *ih; +/* Header of outgoing replies. */ +static struct fuse_out_header *oh; +/* Start of upcall specific structure. */ +static char *upcall; +/* Start of upcall specific reply structure. */ +static char *reply; /* Time to wait for upcalls before calling dav_tidy_cache(). */ static time_t idle_time; @@ -161,6 +186,10 @@ fuse_stat(void); static uint32_t fuse_write(void); +static uint32_t +not_implemented(const char *msg); + + /* Auxiliary functions. */ static off_t @@ -183,12 +212,17 @@ dav_init_kernel_interface(const char *url, const char *mpoint, "Initializing kernel interface"); buf_size = args->buf_size * 1024; - if (buf_size < (FUSE_MIN_READ_BUFFER + 4096)) - buf_size = FUSE_MIN_READ_BUFFER + 4096; + if (buf_size < (FUSE_MIN_READ_BUFFER + 1024)) + buf_size = FUSE_MIN_READ_BUFFER + 1024; buf = malloc(buf_size); if (!buf) error(EXIT_FAILURE, errno, _("can't allocate message buffer")); + ih = (struct fuse_in_header *) buf; + oh = (struct fuse_out_header *) buf; + upcall = buf + sizeof(struct fuse_in_header); + reply = buf + sizeof(struct fuse_out_header); + idle_time = args->delay_upload; char *path = xasprintf("%s/%s", DAV_DEV_DIR, FUSE_DEV_NAME); @@ -198,7 +232,7 @@ dav_init_kernel_interface(const char *url, const char *mpoint, fuse_device = open(path, O_RDWR | O_NONBLOCK); } if (fuse_device <= 0) { - if (mknod(path, S_IFCHR, makedev(FUSE_MAJOR, FUSE_MINOR)) == 0) { + if (mknod(path, S_IFCHR, makedev(MISC_MAJOR, FUSE_MINOR)) == 0) { if (chown(path, 0, 0) == 0 && chmod(path, S_IRUSR | S_IWUSR) == 0) { fuse_device = open(path, O_RDWR | O_NONBLOCK); } else { @@ -214,7 +248,7 @@ dav_init_kernel_interface(const char *url, const char *mpoint, 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)); + (unsigned long int) (buf_size - 1024)); if (mount(url, mpoint, "fuse", args->mopts, mdata) != 0) error(EXIT_FAILURE, errno, _("mounting failed")); @@ -273,8 +307,6 @@ dav_run_msgloop(volatile int *keep_on_running) 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; @@ -286,7 +318,6 @@ dav_run_msgloop(volatile int *keep_on_running) if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_FORGET: no reply"); - oh->error = 0; oh->len = 0; break; case FUSE_GETATTR: @@ -296,16 +327,10 @@ dav_run_msgloop(volatile int *keep_on_running) 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); + oh->len = not_implemented("FUSE_READLINK:"); 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); + oh->len = not_implemented("FUSE_SYMLINK:"); break; case FUSE_MKNOD: oh->len = fuse_mknod(); @@ -315,28 +340,30 @@ dav_run_msgloop(volatile int *keep_on_running) 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))); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_UNLINK %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); } - oh->error = dav_remove((dav_node *) ((size_t) ih->nodeid), - (char *) (buf + sizeof(struct fuse_in_header)), - ih->uid); + oh->error = dav_remove((dav_node *) ((size_t) ih->nodeid), upcall, + 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))); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_RMDIR %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); } - oh->error = dav_rmdir((dav_node *) ((size_t) ih->nodeid), - (char *) (buf + sizeof(struct fuse_in_header)), - ih->uid); + oh->error = dav_rmdir((dav_node *) ((size_t) ih->nodeid), upcall, + ih->uid); if (oh->error) oh->error *= -1; oh->len = sizeof(struct fuse_out_header); @@ -345,10 +372,7 @@ dav_run_msgloop(volatile int *keep_on_running) 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); + oh->len = not_implemented("FUSE_LINK:"); break; case FUSE_OPEN: oh->len = fuse_open(); @@ -368,9 +392,12 @@ dav_run_msgloop(volatile int *keep_on_running) 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_FSYNC %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); } oh->error = dav_sync((dav_node *) ((size_t) ih->nodeid)); if (oh->error) @@ -378,28 +405,16 @@ dav_run_msgloop(volatile int *keep_on_running) oh->len = sizeof(struct fuse_out_header); break; case FUSE_SETXATTR: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_SETXATTR:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); + oh->len = not_implemented("FUSE_SETXATTR:"); break; case FUSE_GETXATTR: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETXATTR:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); + oh->len = not_implemented("FUSE_GETXATTR:"); break; case FUSE_LISTXATTR: - if (debug) - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LISTXATTR:"); - oh->error = -ENOSYS; - oh->len = sizeof(struct fuse_out_header); + oh->len = not_implemented("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); + oh->len = not_implemented("FUSE_REMOVEXATTR:"); break; case FUSE_FLUSH: if (debug) @@ -421,10 +436,16 @@ dav_run_msgloop(volatile int *keep_on_running) 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); + oh->len = not_implemented("FUSE_FSYNCDIR:"); + break; + case FUSE_GETLK: + oh->len = not_implemented("FUSE_GETLK:"); + break; + case FUSE_SETLK: + oh->len = not_implemented("FUSE_SETLK:"); + break; + case FUSE_SETLKW: + oh->len = not_implemented("FUSE_SETLKW:"); break; case FUSE_ACCESS: oh->len = fuse_access(); @@ -432,6 +453,30 @@ dav_run_msgloop(volatile int *keep_on_running) case FUSE_CREATE: oh->len = fuse_create(); break; + case FUSE_INTERRUPT: + oh->len = not_implemented("FUSE_INTERRUPT:"); + break; + case FUSE_BMAP: + oh->len = not_implemented("FUSE_BMAP:"); + break; + case FUSE_DESTROY: + oh->len = not_implemented("FUSE_DESTROY:"); + break; + case FUSE_IOCTL: + oh->len = not_implemented("FUSE_IOCTL:"); + break; + case FUSE_POLL: + oh->len = not_implemented("FUSE_POLL:"); + break; + case FUSE_NOTIFY_REPLY: + oh->len = not_implemented("FUSE_NOTIFY_REPLY:"); + break; + case FUSE_BATCH_FORGET: + oh->len = not_implemented("FUSE_BATCH_FORGET:"); + break; + case FUSE_FALLOCATE: + oh->len = not_implemented("FUSE_FALLOCATE:"); + break; default: if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), @@ -478,15 +523,16 @@ dav_run_msgloop(volatile int *keep_on_running) 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; + struct fuse_access_in *in = (struct fuse_access_in *) upcall; + 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_ACCESS %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " m=0x%x", + in->mask); } oh->error = dav_access((dav_node *) ((size_t) ih->nodeid), ih->uid, @@ -502,18 +548,18 @@ fuse_access(void) 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)); + struct fuse_create_in *in = (struct fuse_create_in *) upcall; + char *name = upcall + sizeof(struct fuse_create_in); + struct create_out *out = (struct create_out *) reply; + 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), "FUSE_CREATE %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " f=0x%x m=0%o um=0%o", + in->flags, in->mode, in->umask); } int created = 0; @@ -570,6 +616,7 @@ fuse_create(void) if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fd %i", fd); + return sizeof(struct fuse_out_header) + sizeof(struct create_out); } @@ -577,14 +624,17 @@ fuse_create(void) 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)); + struct fuse_getattr_in *in = (struct fuse_getattr_in *) upcall; + struct fuse_attr_out *out = (struct fuse_attr_out *) reply; + if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETATTR:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n 0x%llx", + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_GETATTR %llu: n=0x%llx", + (unsigned long long) ih->unique, (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " f=0x%x fh=%llu", + in->getattr_flags, in->fh); } oh->error = dav_getattr((dav_node *) ((size_t) ih->nodeid), ih->uid); @@ -606,16 +656,33 @@ fuse_getattr(void) 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)); + struct fuse_init_in *in = (struct fuse_init_in *) upcall; + struct fuse_init_out *out = (struct fuse_init_out *) reply; + if (debug) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_INIT:"); - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " version %i.%i", + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_INIT %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " verson=%u.%u", in->major, in->minor); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " ra=%u f=0x%x", + in->max_readahead, in->flags); + } + + if (in->major < FUSE_KERNEL_VERSION + || (in->major == FUSE_KERNEL_VERSION && in->minor < FUSE_MIN_MINOR)) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FATAL: Kernel-version too old."); + oh->error = -ENOSYS; + return sizeof(struct fuse_out_header); + } + + if (in->major > FUSE_KERNEL_VERSION) { + oh->error = 0; + out->major = FUSE_KERNEL_VERSION; + return sizeof(struct fuse_out_header); } dav_node *node; @@ -630,12 +697,16 @@ fuse_init(void) 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; + if (in->minor > FUSE_KERNEL_MINOR_VERSION) { + out->minor = FUSE_KERNEL_MINOR_VERSION; + } else { + out->minor = in->minor; + } + out->max_readahead = 0; + out->flags = 0; + out->max_background = 0; + out->congestion_threshold = 0; + out->max_write = buf_size - 1024; return sizeof(struct fuse_out_header) + sizeof(struct fuse_init_out); } @@ -644,15 +715,16 @@ fuse_init(void) 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)); + char * name = upcall; + struct fuse_entry_out *out = (struct fuse_entry_out *) reply; + 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_LOOKUP %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " %s", name); } dav_node *node = NULL; @@ -666,7 +738,7 @@ fuse_lookup(void) return sizeof(struct fuse_out_header); } - out->nodeid = (size_t) node; + out->nodeid = (uint64_t) ((size_t) node); out->generation = out->nodeid; out->entry_valid = 1; out->attr_valid = 1; @@ -681,18 +753,18 @@ fuse_lookup(void) 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)); + struct fuse_mkdir_in *in = (struct fuse_mkdir_in *) upcall; + char *name = upcall + sizeof(struct fuse_mkdir_in); + struct fuse_entry_out *out = (struct fuse_entry_out *) reply; + 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_MKDIR %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " m=0%o um=0%o %s", + in->mode, in->umask, name); } dav_node *node = NULL; @@ -721,18 +793,18 @@ fuse_mkdir(void) 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)); + struct fuse_mknod_in *in = (struct fuse_mknod_in *) upcall; + char *name = upcall + sizeof(struct fuse_mknod_in); + struct fuse_entry_out *out = (struct fuse_entry_out *) reply; + 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), "FUSE_MKNOD %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " m=0%o r=%u um=0%o", + in->mode, in->rdev, in->umask); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " %s", name); } @@ -767,20 +839,24 @@ fuse_mknod(void) 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)); + struct fuse_open_in *in = (struct fuse_open_in *) upcall; + struct fuse_open_out *out = (struct fuse_open_out *) reply; + if (debug) { if (ih->opcode == FUSE_OPENDIR) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_OPENDIR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_OPENDIR %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); } else { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_OPEN:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_OPEN %llu: n=0x%llx", + (unsigned long long) ih-> unique, + (unsigned long long) ih->nodeid); } - 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), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " f=0x%x", in->flags); } int fd = 0; @@ -800,6 +876,7 @@ fuse_open(void) if (debug) syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fd %i", fd); + return sizeof(struct fuse_out_header) + sizeof(struct fuse_open_out); } @@ -807,21 +884,27 @@ fuse_open(void) 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; + struct fuse_read_in *in = (struct fuse_read_in *) upcall; + if (debug) { if (ih->opcode == FUSE_READDIR) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READDIR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_READDIR %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); } else { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_READ:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_READ %llu: n=0x%llx", + (unsigned long long) ih-> unique, + (unsigned long long) ih->nodeid); } - 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fh=%llu, off=%llu, sz=%u", + (unsigned long long) in->fh, (unsigned long long) in->offset, + in->size); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " rf=0x%x, f=0x%x", + in->read_flags, in->flags); } if (in->size > (buf_size - sizeof(struct fuse_out_header))) { @@ -831,8 +914,7 @@ fuse_read(void) 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); + in->fh, reply, in->size, in->offset); if (oh->error) oh->error *= -1; @@ -844,20 +926,24 @@ fuse_read(void) 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; + struct fuse_release_in *in = (struct fuse_release_in *) upcall; + if (debug) { if (ih->opcode == FUSE_RELEASEDIR) { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RELEASEDIR:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_RELEASEDIR %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); } else { - syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RELEASE:"); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), + "FUSE_RELEASE %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); } - 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fh=%llu, f=0x%x, rf=0x%x", + (unsigned long long) in->fh, in->flags, in->release_flags); } oh->error = dav_close((dav_node *) ((size_t) ih->nodeid), in->fh, @@ -873,18 +959,18 @@ fuse_release(void) 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)); + struct fuse_rename_in *in = (struct fuse_rename_in *) upcall; + char *old = upcall + 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", + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_RENAME %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " %s", old); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " n=0x%llx %s", (unsigned long long) in->newdir, new); } @@ -903,22 +989,21 @@ fuse_rename(void) 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)); + struct fuse_setattr_in *in = (struct fuse_setattr_in *) upcall; + struct fuse_attr_out *out = (struct fuse_attr_out *) reply; + 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_SETATTR %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " v=0x%x sz=%llu", + in->valid, (unsigned long long) in->size); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " at=%llu mt=%llu", + (unsigned long long) in->atime, (unsigned long long) in->mtime); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " m=0%o uid=%u gid=%u", + in->mode, in->uid, in->gid); } oh->error = dav_setattr((dav_node *) ((size_t) ih->nodeid), ih->uid, @@ -946,11 +1031,15 @@ fuse_setattr(void) 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:"); + struct fuse_statfs_out *out = (struct fuse_statfs_out *) reply; + + if (debug) { + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_STATFS %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + } dav_stat *st = dav_statfs(); if (!st) { @@ -988,20 +1077,20 @@ fuse_stat(void) 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)); + struct fuse_write_in *in = (struct fuse_write_in *) upcall; + struct fuse_write_out *out = (struct fuse_write_out *) reply; + 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); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "FUSE_WRITE %llu: n=0x%llx", + (unsigned long long) ih->unique, + (unsigned long long) ih->nodeid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " u=%u g=%u p=%u", + ih->uid, ih->gid, ih->pid); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " fh=%llu, off=%llu, sz=%u", + (unsigned long long) in->fh, (unsigned long long) in->offset, + in->size); + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), " wf=0x%x, f=0x%x", + in->write_flags, in->flags); } if (in->size > (buf_size - sizeof(struct fuse_in_header) @@ -1012,8 +1101,7 @@ fuse_write(void) 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->fh, upcall + sizeof(struct fuse_write_in), in->size, in->offset); if (oh->error) { @@ -1027,6 +1115,17 @@ fuse_write(void) return sizeof(struct fuse_out_header) + sizeof(struct fuse_write_out); } +static uint32_t +not_implemented(const char *msg) +{ + if (debug) + syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "%s", msg); + + oh->error = -ENOSYS; + + return sizeof(struct fuse_out_header); +} + /* Auxiliary functions. */ @@ -1101,4 +1200,7 @@ set_attr(struct fuse_attr *attr, const dav_node *node) attr->uid = node->uid; attr->gid = node->gid; attr->rdev = 0; +/* TODO: set blocksize */ + attr->blksize = 0; + attr->padding = 0; }