Opened 10 years ago

Closed 9 years ago

Last modified 5 years ago

#604 closed defect (wontfix)

WebDAV: мелкие косяки

Reported by: Ivan Rozhuk Owned by:
Priority: minor Milestone:
Component: nginx-module Version: 1.7.x
Keywords: Cc:
uname -a: FreeBSD firewall 10.0-STABLE FreeBSD 10.0-STABLE #2 r269376MS: Sat Aug 2 18:21:50 MSK 2014 FreeBSD firewall 10.0-STABLE FreeBSD 10.0-STABLE #2 r269376MS: Sat Aug 2 18:21:50 MSK 2014 FreeBSD firewall 10.0-STABLE FreeBSD 10.0-STABLE #2 r269376MS: Sat Aug 2 18:21:50 MSK 2014
nginx -V: nginx version: nginx/1.7.4
TLS SNI support enabled
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-file-aio --with-ipv6 --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx-access.log --add-module=/tmp/ports/usr/ports/www/nginx-devel/work/ngx_http_auth_pam_module-1.2 --add-module=/tmp/ports/usr/ports/www/nginx-devel/work/openresty-headers-more-nginx-module-0c6e05d --with-http_dav_module --add-module=/tmp/ports/usr/ports/www/nginx-devel/work/arut-nginx-dav-ext-module-0e07a3e --with-http_stub_status_module --add-module=/tmp/ports/usr/ports/www/nginx-devel/work/simpl-ngx_devel_kit-8dd0df5 --with-pcre --add-module=/tmp/ports/usr/ports/www/nginx-devel/work/openresty-set-misc-nginx-module-36fd035 --with-http_spdy_module --with-http_ssl_module

Description

По мотивам: http://habrahabr.ru/post/232883/

  1. Некоторые клиенты не добавляют слеш в конце урла для MKCOL
MKCOL /Family/MR3020 HTTP/1.1
Connection: Keep-Alive
User-Agent: Microsoft-WebDAV-MiniRedir/6.1.7601
translate: f
Content-Length: 0
Host: xxx.xxx.net

Проверка выполняется в ngx_http_dav_module.c строчки 484 — 493.
Может вместо возвращения ошибки просто не отрезать отсутствующий слеш?

2.1 DELETE - полагается на слеш в конце урла для определения удалять ему файл или папку.
Microsoft-WebDAV-MiniRedir - не добавляет слеша к имени папки для удаления, в результате nginx пытается удалить файл, и получает ошибку: 21: Is a directory.
Возможно стоит перестать ориентироваться на слеш?

2.2 DELETE - не удаляет папки, даже пустые.
Прав хватает.

Change History (2)

in reply to:  description comment:1 by Maxim Dounin, 9 years ago

Resolution: wontfix
Status: newclosed

Replying to rozhuk.im@…:

По мотивам: http://habrahabr.ru/post/232883/

  1. Некоторые клиенты не добавляют слеш в конце урла для MKCOL
MKCOL /Family/MR3020 HTTP/1.1
Connection: Keep-Alive
User-Agent: Microsoft-WebDAV-MiniRedir/6.1.7601
translate: f
Content-Length: 0
Host: xxx.xxx.net

Проверка выполняется в ngx_http_dav_module.c строчки 484 — 493.
Может вместо возвращения ошибки просто не отрезать отсутствующий слеш?

В описании метода MKCOL в стандарте сказано:

MKCOL creates a new collection resource at the location specified by
the Request-URI.

Т.к. доступ к папкам в nginx'е реализован только при наличии оконечного слеша, то именно такую форму URI nginx и требует, чтобы папку создать. Было бы странно, если бы nginx получил от клиента один URI, а создал коллекцию с другим URI.

Кроме того, чуть ранее тот же стандарт говорит:

In general clients SHOULD use the "/" form of collection names.

Если клиент поступает иначе - вероятно, стоит поинтересоваться у авторов клиента, зачем они поступают не так, как сказано в стандарте.

2.1 DELETE - полагается на слеш в конце урла для определения удалять ему файл или папку.
Microsoft-WebDAV-MiniRedir - не добавляет слеша к имени папки для удаления, в результате nginx пытается удалить файл, и получает ошибку: 21: Is a directory.
Возможно стоит перестать ориентироваться на слеш?

См. выше. Кроме того, в случае удаления есть дополнительная проблема: ошибочное удаление папки может иметь массу последствий. Точное указание адреса - то немногое, что nginx может требовать для минимизации проблем.

2.2 DELETE - не удаляет папки, даже пустые.
Прав хватает.

Вы делаете что-то не так.

comment:2 by Maxim Dounin, 5 years ago

See also #1966.

Note: See TracTickets for help on using tickets.