Skip to content

bug(connection): Srvr/Ref с отдельными user/password преобразуется в неработающий /IBConnectionString + /N + /P #55

Description

@vozhukov

Кратко

На Windows и платформе 1С 8.3.27.1936 серверное подключение из v8project.yaml в виде Srvr=...;Ref=...; с отдельными infobase.user и infobase.password не проходит аутентификацию.

v8-runner преобразует такую конфигурацию в аргументы:

/IBConnectionString 'Srvr="<server>";Ref="<infobase>";' /N <user> /P <REDACTED>

Прямой запуск платформы с эквивалентным серверным адресом через /S "<server>\<infobase>" и теми же /N и /P успешно подключается.

Окружение

  • ОС: Windows NT 10.0.26200, x64
  • Платформа 1С: 8.3.27.1936, x64
  • v8-runner: 0.5.1, commit 7ce1b062843d86644fe55741dbe0ee79f7ca767d
  • Формат проекта: DESIGNER
  • Тип ИБ: клиент-серверная

Минимальная конфигурация

format: DESIGNER

infobase:
  connection: 'Srvr="<server>";Ref="<infobase>";'
  user: '<user>'
  password: '<REDACTED>'

Воспроизведение

  1. Создать или выбрать доступную клиент-серверную ИБ с пользователем и паролем.

  2. Указать подключение, пользователя и пароль как в примере выше.

  3. Запустить операцию, которая обращается к ИБ, например:

    v8-runner --config v8project.yaml make --source-set external-processors --output build/external
    
  4. Для контрольной проверки запустить ту же операцию с единственным изменением:

    infobase:
      connection: '/S "<server>\<infobase>"'
      user: '<user>'
      password: '<REDACTED>'

Фактическое поведение

Вариант Srvr/Ref завершается на аутентификации сообщением платформы:

Пользователь ИБ не идентифицирован

Контрольный вариант /S с теми же пользователем и паролем проходит подключение и доходит до загрузки XML. В конкретном downstream-проекте он затем завершился на независимой ошибке XDTO во входном XML; это подтверждает, что серверное подключение и аутентификация уже были пройдены.

Дополнительная нативная проверка той же ИБ через:

1cv8.exe DESIGNER /S "<server>\<infobase>" /N <user> /P <REDACTED> /CheckConfig -ConfigLogIntegrity

завершилась с кодом 0 и сообщением Ошибок не обнаружено.

Ожидаемое поведение

Декларативная серверная строка Srvr=...;Ref=...; с отдельными user/password должна формировать поддерживаемый платформой набор аргументов и аутентифицироваться так же, как эквивалентный /S-вариант.

Возможные варианты реализации:

  • разобрать Srvr/Ref и сформировать /S "<server>\<ref>", после чего добавить /N и /P;
  • либо формировать /IBConnectionString так, чтобы учётные данные передавались в совместимом с платформой виде.

Вероятная причина

В src/platform/connection.rs любая строка, не начинающаяся с / или -, без разбора заворачивается в /IBConnectionString, после чего пользователь и пароль добавляются отдельными /N и /P.

Текущие тесты проверяют только plain file connection и raw /F с /N//P; варианта Srvr/Ref с отдельной аутентификацией нет.

Предлагаемый regression test

Добавить тест для серверного подключения:

connection = 'Srvr="server";Ref="base";'
user = 'user'
password = 'secret'

и зафиксировать ожидаемые аргументы, совместимые с платформой. По возможности дополнить Windows integration test живой или контейнерной серверной ИБ.

Обходной путь

Указывать infobase.connection в raw-виде:

connection: '/S "<server>\<infobase>"'

Тогда v8-runner сохраняет /S и добавляет отдельные /N и /P.

Все адреса, имена ИБ и учётные данные в этом Issue обезличены.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions