Статус: Новичок
Группы: Участники
Зарегистрирован: 30.04.2013(UTC) Сообщений: 4
|
Подскажите, пожалуйста, как правильно освободить/проинициализировать контекст в дочернем процессе после вызова fork? Код:
[ ei-grad@ei-grad ~ ]
→ ./test_cpro
First call succeed for 12791
Got error: 8009001d
Second call failed for 12793
Second call succeed for 12791
Код: Код:
/*
gcc -Wall -g -DUNIX -DSIZEOF_VOID_P=8 -I/opt/cprocsp/include test_cpro.c -c -o test_cpro.o && \
gcc test_cpro.o -L/opt/cprocsp/lib/amd64 -lcapi10 -g -o test_cpro
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <unistd.h>
#include <string.h>
#include <cpcsp/WinCryptEx.h>
int acquire_crypto_context(void) {
HCRYPTPROV *hCryptProv;
pid_t current_pid = getpid();
const char PREFIX[] ="\\\\.\\HDIMAGE\\c";
char container[sizeof(PREFIX) + 21];
if(snprintf(container, sizeof(PREFIX) + 20, "%s%d", PREFIX, current_pid) < 0)
return 1;
hCryptProv = (HCRYPTPROV*) malloc(sizeof(HCRYPTPROV));
memset(hCryptProv, 0, sizeof(HCRYPTPROV));
if(!CryptAcquireContext(hCryptProv, container, NULL, PROV_GOST_2001_DH, CRYPT_SILENT)) {
// if not exist - try to create
if(!CryptAcquireContext(hCryptProv, container, NULL, PROV_GOST_2001_DH, CRYPT_SILENT|CRYPT_NEWKEYSET)) {
printf("Got error: %x\n", GetLastError());
return 1;
}
}
return 0;
}
int main(void) {
if(acquire_crypto_context())
printf("First call failed for %d\n", getpid());
else
printf("First call succeed for %d\n", getpid());
fork();
if(acquire_crypto_context())
printf("Second call failed for %d\n", getpid());
else
printf("Second call succeed for %d\n", getpid());
return 0;
}
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
В текущей архитектуре нужно использовать КС2 и сервис. |
|
1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 17.10.2010(UTC) Сообщений: 128 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 2 раз Поблагодарили: 9 раз в 8 постах
|
А есть ли надежды на исправление ситуации? А то казалось бы - да, после форка хэндл инвалидится, но что мешает создать новый хэндл? Ведь если контекст не создавать до форка - то после форка он прекрасно создается и в паренте и в чайлде. А то KC2 - это мееедленно. :( Отредактировано пользователем 5 сентября 2015 г. 23:10:03(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
Честно говоря, никто пока убедительно не просил. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 17.10.2010(UTC) Сообщений: 128 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 2 раз Поблагодарили: 9 раз в 8 постах
|
Максим, засчитайте мой голос пожалуйста первым. Все кто пользуются nginx в связве с энджайном к OpenSSL, уверен, выстроятся за мной в очередь.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
Хорошо. К openssl engine пока есть очень много вопросов, если мы решим их фиксить, тогда и с fork, думаю, разберемся. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close