.png)
A função SSL_CTX_new() funciona bem, mas algo estranho, ela define errno para ENOSYS.
A documentação não diz nada sobre isso: https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_new.html
#include <errno.h>
#include <openssl/ssl.h>
int main(int argc, char * argv[]){
SSL_library_init();
SSL_load_error_strings();
perror("A");
SSL_CTX * sslContext = SSL_CTX_new(TLS_server_method());
if (sslContext == NULL){
return EXIT_FAILURE;
}
perror("B");
return 0;
}
esse código retorna isso:
A: Undefined error: 0
B: Function not implemented
Minha versão do openssl é: OpenSSL 1.1.1b 26 de fevereiro de 2019
Responder1
Nem todas as bibliotecas usam errno para reportar status. Se a documentação não disser explicitamente que esta função define errno, então o valor é melhor considerado comoindefinido: a função pode preservar o valor original, ou defini-lo como 0, ou deixar algum lixo nele.
E de fato a documentação do OpenSSL não diz nada sobre errno; em vez disso, a biblioteca tem sua própria "pilha de erros" que você pode acessar usandoERR_get_error(), e isso fornece códigos de erro e mensagens mais precisos do que o conjunto muito limitado fornecido pela libc.
Portanto, o valor que você encontra em errno é apenas uma sobra de alguma ou outra função libc que SSL_CTX_new() usouinternamente. (Por exemplo, ele pode ter tentado propagar o RNG chamando libc getrandom(), que então retornou ENOSYS devido à falta de suporte do kernel.)