int sxi_crypto_check_ver(struct sxi_logger *l) { const char *compile_ver = NSS_VERSION; if (NSS_NoDB_Init("/") != SECSuccess) { sxi_log_msg(l, "sxi_crypto_check_ver", SX_LOG_CRIT, "Failed to initialize NSS: %d", PR_GetError()); return -1; } if(!NSS_VersionCheck(compile_ver)) { sxi_log_msg(l, "crypto_check_ver", SX_LOG_CRIT, "NSS library version mismatch: compiled: %s, runtime: %s", compile_ver, NSS_GetVersion()); return -1; } return 0; }
sxc_client_t *sxc_init(const char *client_version, const sxc_logger_t *func, int (*confirm)(const char *prompt, int def)) { uint32_t runtime_ver = SSLeay(); uint32_t compile_ver = SSLEAY_VERSION_NUMBER; sxc_client_t *sx; struct sxi_logger l; if (!func) return NULL; memset(&l, 0, sizeof(l)); l.max_level = SX_LOG_DEBUG; l.func = func; const char *this_version = sxc_get_version(); if (!client_version || strcmp(client_version, this_version)) { sxi_log_msg(&l, "sxc_init", SX_LOG_CRIT, "Version mismatch: our version '%s' - library version '%s'", client_version, this_version); return NULL; } /* FIXME THIS IS NOT THREAD SAFE */ srand(time(NULL)); signal(SIGPIPE, SIG_IGN); /* TODO: have a way to log this */ if((runtime_ver & 0xff0000000) != (compile_ver & 0xff0000000)) { return NULL; } CURLcode rc = curl_global_init(CURL_GLOBAL_ALL); if (rc) { sxi_log_msg(&l, "sxc_init", SX_LOG_CRIT, "Failed to initialize libcurl: %s", curl_easy_strerror(rc)); return NULL; } sx = calloc(1, sizeof(struct _sxc_client_t)); if (!sx) { sxi_log_syserr(&l, "sxc_init", SX_LOG_CRIT, "Failed to allocate sx structure"); return NULL; } if(lt_dlinit()) { const char *err = lt_dlerror(); sx->fctx.filter_cnt = -1; sxi_log_syserr(&l, "sxc_init", SX_LOG_CRIT, "Failed to initialize libltdl: %s", err ? err : ""); } sx->log.max_level = SX_LOG_NOTICE; sx->log.func = func; sx->confirm = confirm; return sx; }
void sxc_loglasterr(sxc_client_t *sx) { if (!sx) return; sxi_log_msg(&sx->log, NULL, SX_LOG_ERR, "%s", sxc_geterrmsg(sx)); }