libpq с SSL на VC 2010

У меня есть вопрос по компиляции libpq для Windows (VS2010 32 и 64bit) с поддержкой SSL. Я скачал последний исходный код postgres, а также OpenSSL Win64 v1.0.1c. Я запустил nmake в папке libpq:

cd postgresql-9.2.2\интерфейсы\libpq

nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include SSL_LIB_PATH=C:\OpenSSL-Win64\lib

Потом компиляция заканчивается тем, что он не может найти bufferoverflowU.lib. Немного поискав, я обнаружил, что эта библиотека развернута с Windows SDK и, поскольку VS 2005 больше не нужна (см. bufferoverflowu-lib-linking-error">Ошибка связывания Vista / Win 7 SDK bufferoverflowu.lib ). Итак, в make-файле libpq (win32.mak:20) я закомментировал строку

ADD_SECLIB=bufferoverflowU.lib

и компилируется нормально. У меня также не было проблем с тестированием этого libpq с ssl.

Нужно ли мне с нечистой совестью удалять из сборки bufferoverflowU.lib или это только потому, что makefile не для VS 2010? (Кстати: openssl изменил имена своих библиотек на *MD.lib соответственно *MT.lib в папке VC. Старые именованные библиотеки находятся в C:\OpenSSL-Win64\lib, один каталог вверх)

Может ли кто-нибудь сказать мне, требуется ли в сборке VS2010 bufferoverflowU.lib?

Привет, 550


person 550    schedule 14.12.2012    source источник
comment
Никто не знает!? Я должен исправить себя: bufferoverflowU.lib запрашивается только в 64-битной компиляции (с помощью файла makefile win32.mak с флагом CPU = AMD64), а не для 32-битной компиляции (CPU = i386).   -  person 550    schedule 18.01.2013
comment
Прошел ли Postgres самотестирование (make check)? Если да, то я бы сказал, что он не нужен. Кроме того, разработчики очень полезны. Вы можете связаться с ними напрямую на странице pgsql-hackers.   -  person jww    schedule 01.12.2013


Ответы (1)


Может ли кто-нибудь сказать мне, требуется ли в сборке VS2010 bufferoverflowU.lib?

Нет, больше не нужно. bufferoverflow.lib и друзья были вставлены в код, проверяющий cookie стека. См. эту базу знаний: При сборке исходного кода с помощью с помощью Win32 Software Development Kit (SDK) или Windows Server 2003 Driver Development Kit (DDK) для Windows Server 2003 с пакетом обновления 1.

Я считаю, что вы можете решить эту проблему и повысить безопасность своих исполняемых файлов с помощью переключателя /GS.


nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include
SSL_LIB_PATH=C:\OpenSSL-Win64\lib

Вам следует рассмотреть возможность добавления всех параметров, описанных в разделе Защита кода с помощью средств защиты Visual C++. . Вот список на случай, если у вас мало времени:

  • /GS
  • /SafeSEH
  • /NXCompat
  • /Динамическая база

Кроме того, вы должны #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1, если это возможно. Наконец, вы также должны добавить #pragma strict_gs_check(on) к исходным файлам с высоким риском в Windows. Его следует использовать с осторожностью, но рекомендуется в ситуациях высокого риска, например, когда исходный файл анализирует входные данные из Интернета.

Обычно проекты *nix пропускают переключатели безопасности в Windows. Я называю это «отключением», и я видел, как это происходит в обоих направлениях (*nix -> Windows и Windows -> *nix). Все не могут быть экспертами во всем ;)

(Извините, что немного блуждаю. Плохие настройки проекта - моя любимая мозоль).

person jww    schedule 01.12.2013