Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ошибка при формировании строки даты для WebDAV PROPPATCH #261

Closed
yar229 opened this issue Nov 23, 2017 · 14 comments · Fixed by #454
Closed

Comments

@yar229
Copy link

yar229 commented Nov 23, 2017

https://github.com/michaellukashov/Far-NetBox/blob/master/src/core/WebDAVFileSystem.cpp

DateTime.DecodeDate(Y, M, D);
DateTime.DecodeTime(H, NN, S, MS);
UnicodeString LastModified = FORMAT("%04d, %d %02d %04d %02d:%02d%02d 'GMT'", D, D, M, Y, H, NN, D);
  • До запятой что-то странное, как я понимаю, там должны быть не 4 цифры, а три буквы дня недели
  • Секунды должны быть отделены двоеточием
  • и вместо них почему-то пишется число месяца.
@VictorVG
Copy link

Не обязательно - всё зависит от локали вашей системы. Мы же настраиваем её так как нам удобно и я к примеру вижу время так:

1

или я обязан видеть что-то иное?

@yar229
Copy link
Author

yar229 commented Nov 23, 2017

Я не про отображение в панелях, с этим все нормально.
При закачке файла на webdav сервер идут запросы

  • PUT - покладается сам файл
  • PROPPATCH - изменяются свойства файла, в частности, getlastmodified. и вот для этого свойства формируется строка даты-времени неправильно

@VictorVG
Copy link

VictorVG commented Nov 23, 2017

Сейчас попробовал от себя https://yadi.sk/i/AmzxSqpN3PyUDy и запросов не получил. Попробуйте импортировать настройки YD (WebDAV).netbox.zip, а после введите логин и пароль YD.

@yar229
Copy link
Author

yar229 commented Nov 23, 2017

Перед копированием выставляем галку Transfer Settings -> Preserve timestamp
Закачиваю файл, созданный 2017-11-23 21:03 (UTC)

Сервер получает

И оно такое отослано плагином, это просто строка из пришедшего xml, ничего не менял

Должно быть что-то вроде Thu, 23 Nov 2017 21:03:00 GMT

@yar229
Copy link
Author

yar229 commented Nov 23, 2017

Попробуйте импортировать настройки YD (WebDAV).netbox.zip, а после введите логин и пароль YD.

Если я правильно смотрю в код формирования запроса

DateTime.DecodeDate(Y, M, D);
DateTime.DecodeTime(H, NN, S, MS);
UnicodeString LastModified = FORMAT("%04d, %d %02d %04d %02d:%02d%02d 'GMT'", D, D, M, Y, H, NN, D);

То там от настроек ничего не зависит, хардкодом формируется строка
И число месяца D три раза вставляется - вместо дня недели, вместо названия месяца и вместо секунд.

@VictorVG
Copy link

Так это вам у себя настройки прокси надо смотреть - вы же обращаетесь к серверу через него по 801 порту, а что там дальше портится знает только он. Внешние клиенты тут явно не при чём.

У того же YD как-то иной IP будет - 213.180.193.50:443 и у меня идёт обращение к нему через DNS минуя неизвестно как построенный локальный прокси который ждёт строго определённый формат данных, а на любой иной ругается.

@yar229
Copy link
Author

yar229 commented Nov 23, 2017

Странное предположение, когда это прокси меняли xml в теле http-запроса.

Это не яндекс, это адрес запущенного локально webdav-сервера, по дороге от клиента до сервера - только localhost и никаких прокси.

Яндекс парсит, и я могу, конечно, распарсить на своей стороне и такой формат даты, но это не отменяет того, что он не верный.

@VictorVG
Copy link

VictorVG commented Nov 23, 2017

При чём тут NetBox и другие клиенты если ваш локальный сервер матерится на всех? У меня с той же настройкой:

1

ни один из десятка вебдав серверов не матерится. Значит или ваш локальный сервер неправильно настроен, либо он из коробки кривой ибо не бывает так, что вся рота шагает не в ногу и только один в дым пьяный поручик шагает в ногу. Такого даже бравый солдат Швейк и его командир поручик Лукаш в ночном кошмаре не могли бы себе представить. :)

@yar229
Copy link
Author

yar229 commented Nov 23, 2017

Ммм... посмотрите RFC4918 HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)

И матерится он только на NetBox

@VictorVG
Copy link

VictorVG commented Nov 23, 2017

Вы немного документацию-то почитайте - в RFC-4918 через RFC-3339 5.6 идёт ссылка на RFC 822 5.1:

  1. DATE AND TIME SPECIFICATION

    5.1. SYNTAX

    date-time = [ day "," ] date time ; dd mm yy
    ; hh:mm:ss zzz

    day = "Mon" / "Tue" / "Wed" / "Thu"
    / "Fri" / "Sat" / "Sun"

    date = 1*2DIGIT month 2DIGIT ; day month year
    ; e.g. 20 Jun 82

    month = "Jan" / "Feb" / "Mar" / "Apr"
    / "May" / "Jun" / "Jul" / "Aug"
    / "Sep" / "Oct" / "Nov" / "Dec"

    time = hour zone ; ANSI and Military

    hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT]
    ; 00:00:00 - 23:59:59

    zone = "UT" / "GMT" ; Universal Time
    ; North American : UT
    / "EST" / "EDT" ; Eastern: - 5/ - 4
    / "CST" / "CDT" ; Central: - 6/ - 5
    / "MST" / "MDT" ; Mountain: - 7/ - 6
    / "PST" / "PDT" ; Pacific: - 8/ - 7
    / 1ALPHA ; Military: Z = UT;
    ; A:-1; (J not used)
    ; M:-12; N:+1; Y:+12
    / ( ("+" / "-") 4DIGIT ) ; Local differential
    ; hours+min. (HHMM)

и смотрим формат который вы считаете недопустимым

%04d, %d %02d %04d %02d:%02d%02d 'GMT'", D, D, M, Y, H, NN, D

результат соответствует RFC 822 и RFC 3339, а коли ваш конкретный сервер написан с игнорированием RFC, так же и WinSCP начиная с v5.10 beta 3 игнорирует RFC-1738 это не делает их эталоном раз, и из их авторов не приходится как из вас тащить подробности с помощью дыбы и пыточных клещей, два. Я потратил свой время и просмотрел и вторую ссылку - по крайней мере я как иженер не вижу взаимосвязи событий.

@yar229
Copy link
Author

yar229 commented Nov 24, 2017

Раз вы видите соответствие между Thu, 23 Nov 2017 21:03:00 GMT и 0023, 23 11 2017 21:0223 'GMT', то, пожалуй, вам стоит приберечь свою язвительность для случаев, которые входят в сферу вашей иженерной компетенции. Спасибо за ваш потраченный время.

@VictorVG
Copy link

Можете продолжать бездоказательно обвинять. У вас сиё отлично получается.

@yar229
Copy link
Author

yar229 commented Nov 24, 2017

Я привёл конкретный код из этого репозитория, который формирует конкретное значение.

Пожалуй, хватит вас кормить...

@VictorVG
Copy link

VictorVG commented Nov 26, 2017

Ладно, давайте считать недорузумение из-за того что мы не поняли друг друга исчерпанным. Приношу свои извинения за недопустимый тон.

С формированием значения вы правы и тут надо проверять. Явно есть повод для проверки этого фрагмента алгоритма.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants