gremlinable (gremlinable) wrote,
gremlinable
gremlinable

Category:

Сила и мощь опенсорца

Довелось тут поковыряться в одной занятной опенсорсной софтине. Остался в шоке от её энтерпрайзности. Посудите сами: софтина напрямую работает со средствами безопасности: аутентификация, шифрование и всё такое, непосредственно торчит голой задницей в сеть, да ещё и в беспроводную, так что кто угодно с соседней улицы может дотянуться. Безумно популярная: думаю, не сильно ошибусь, если скажу, что она стоит и активно используется на порядка 75% линуксовых клиентских машин, 85% линукс-базед устройств, начиная с SOHO-роутеров и заканчивая умными кофеварками, и во всех линуксовых телефонах включая гуглофоны.

При этом у них нету официального багтрекера. Впрочем, похоже, и неофициального тоже. У них нету релизных веток, не говоря уже о стабильных LTS, только master и фиксированные теги релизов. Текущий релиз был зафиксирован более двух лет назад. Это означает, что в стабильную версию этого мега-продукта не вносилось багфиксов на протяжении более двух лет. И нет, не потому что он такой идеально вылизанный, а потому что нету соответствующего workflow. Что в свою очередь означает, что каждому отдельному дистрибутиво-строителю необходимо самостоятельно отслеживать уязвимости и баги и бекпортировать патчи. Впрочем, учитывая частоту релизов в последние время, ещё и фичи неплохо бы бекпортировать.
Месяц назад я отправил в их рассылку небольшой патч, улучшающий сборочные скрипты. Но похоже он просто бесследно утонул в потоке писем, проходящих через их единственную рассылку. Интенсивность там, надо сказать, бешеная: достигает нескольких десятков писем в... эммм, в месяц...

Пару слов о коде. Местами встречаются артефакты копипасты, местами просто странные махинации типа:

static int wpas_create_receive_sc(void *wpa_s, u32 channel,
                                  struct ieee802_1x_mka_sci *sci,
                                  enum validate_frames vf,
                                  enum confidentiality_offset co)
{
        return wpa_drv_create_receive_sc(wpa_s, channel, sci->addr, sci->port,
                                         conf_offset_val(co), vf);
}

Пояснение: на пути от логики, которая дёргает за ручку, до драйвера, который выполняет реальные действия, вызов проходит через как минимум три уровня абстракции. И вот, где-то посередине этого процесса происходит изменение порядка аргументов функций. И нет, это не так получилось из-за какого-то легаси - оно так было написано изначально лет 5 назад, с нуля.
Или вот это милое TODO, живёт с того же времени:

        /* FIXME: Secy creates txsa with default npn. If MKA detected Latest Key
         * npn is larger than txsa's npn, set it to txsa.
         */
        secy_get_transmit_next_pn(participant->kay, txsa);
        if (lpn > txsa->next_pn) {
                secy_set_transmit_next_pn(participant->kay, txsa);
                wpa_printf(MSG_INFO, "KaY: update lpn =0x%x", lpn);
        }

Да и вообще, у меня есть некоторые сомнения в адекватности работы этой подсистемы - пока не нашёл кода, отвечающего за поддержание соединения, такое ощущение, что оно там просто не доделано. Остаётся только надеяться, что это мне лишь повезло нарваться на очень невостребованную и потому не вылизанную подсистему.
Tags: linux, программерское, философское
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments