| 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 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,417  Откуда: КРИПТО-ПРОСказал «Спасибо»: 37 разПоблагодарили: 729 раз в 630 постах
 
 | 
            
		      
                В текущей архитектуре нужно использовать КС2 и сервис. | 
|  | 
    | 
              1 пользователь поблагодарил Максим Коллегин за этот пост. |  | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 17.10.2010(UTC) Сообщений: 147  Откуда: КРИПТО-ПРОСказал «Спасибо»: 2 разПоблагодарили: 10 раз в 9 постах
 
 | 
            
		      
                А есть ли надежды на исправление ситуации? А то казалось бы - да, после форка хэндл инвалидится, но что мешает создать новый хэндл? Ведь если контекст не создавать до форка - то после форка он прекрасно создается и в паренте и в чайлде. А то KC2 - это мееедленно. :( Отредактировано пользователем 5 сентября 2015 г. 23:10:03(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы
 Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,417  Откуда: КРИПТО-ПРОСказал «Спасибо»: 37 разПоблагодарили: 729 раз в 630 постах
 
 | 
            
		      
                Честно говоря, никто пока убедительно не просил. | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 17.10.2010(UTC) Сообщений: 147  Откуда: КРИПТО-ПРОСказал «Спасибо»: 2 разПоблагодарили: 10 раз в 9 постах
 
 | 
            
		      
                Максим, засчитайте мой голос пожалуйста первым.Все кто пользуются nginx в связве с энджайном к OpenSSL, уверен, выстроятся за мной в очередь.
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы
 Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,417  Откуда: КРИПТО-ПРОСказал «Спасибо»: 37 разПоблагодарили: 729 раз в 630 постах
 
 | 
            
		      
                Хорошо.К 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