From 088fbe3cff6755d06386b28374b1c28bceddd280 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Tue, 20 Aug 2019 14:26:22 -0300 Subject: [PATCH] Moving keyboard and ssl properties do their own sources. --- lib3270.cbp | 6 ++++++ src/core/keyboard/kybd.c | 12 ------------ src/core/keyboard/properties.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/core/properties.c | 170 +++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/include/lib3270/keyboard.h | 3 ++- src/ssl/properties.c | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 261 insertions(+), 176 deletions(-) create mode 100644 src/core/keyboard/properties.c create mode 100644 src/ssl/properties.c diff --git a/lib3270.cbp b/lib3270.cbp index 67cb45d..e459065 100644 --- a/lib3270.cbp +++ b/lib3270.cbp @@ -92,6 +92,9 @@ + + @@ -265,6 +268,9 @@ + + diff --git a/src/core/keyboard/kybd.c b/src/core/keyboard/kybd.c index a3c7dfd..44fd840 100644 --- a/src/core/keyboard/kybd.c +++ b/src/core/keyboard/kybd.c @@ -2230,14 +2230,6 @@ int kybd_prime(H3270 *hSession) } #endif /*]*/ -LIB3270_EXPORT LIB3270_KEYBOARD_LOCK_STATE lib3270_get_keyboard_lock_state(H3270 *hSession) -{ - if(check_online_session(hSession)) - return LIB3270_KL_NOT_CONNECTED; - - return (LIB3270_KEYBOARD_LOCK_STATE) hSession->kybdlock; -} - LIB3270_EXPORT LIB3270_KEYBOARD_LOCK_STATE lib3270_wait_for_keyboard_unlock(H3270 *hSession, int seconds) { time_t end = time(0)+seconds; @@ -2260,7 +2252,3 @@ LIB3270_EXPORT LIB3270_KEYBOARD_LOCK_STATE lib3270_wait_for_keyboard_unlock(H327 return (LIB3270_KEYBOARD_LOCK_STATE) hSession->kybdlock; } -LIB3270_EXPORT void lib3270_set_lock_on_operator_error(H3270 *hSession, int enable) -{ - hSession->oerr_lock = (enable ? 1 : 0); -} diff --git a/src/core/keyboard/properties.c b/src/core/keyboard/properties.c new file mode 100644 index 0000000..1e79740 --- /dev/null +++ b/src/core/keyboard/properties.c @@ -0,0 +1,64 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +#include +#include +#include + +LIB3270_EXPORT LIB3270_KEYBOARD_LOCK_STATE lib3270_get_keyboard_lock_state(H3270 *hSession) +{ + if(check_online_session(hSession)) + return LIB3270_KL_NOT_CONNECTED; + + return (LIB3270_KEYBOARD_LOCK_STATE) hSession->kybdlock; +} + +LIB3270_EXPORT int lib3270_set_lock_on_operator_error(H3270 *hSession, int enable) +{ + hSession->oerr_lock = (enable ? 1 : 0); + return 0; +} + +int lib3270_get_lock_on_operator_error(H3270 *hSession) +{ + return (int) hSession->oerr_lock; +} + +LIB3270_EXPORT int lib3270_set_unlock_delay(H3270 *hSession, unsigned int delay) +{ + hSession->unlock_delay = (delay == 0 ? 0 : 1); + hSession->unlock_delay_ms = (unsigned short) delay; + return 0; +} + +LIB3270_EXPORT unsigned int lib3270_get_unlock_delay(H3270 *hSession) +{ + return (unsigned int) hSession->unlock_delay_ms; +} + diff --git a/src/core/properties.c b/src/core/properties.c index 651c8ed..b81c91a 100644 --- a/src/core/properties.c +++ b/src/core/properties.c @@ -38,10 +38,6 @@ #include #include -#if defined(HAVE_LIBSSL) - #include -#endif - static int lib3270_get_connection_state_as_int(H3270 *hSession) { return (int) lib3270_get_connection_state(hSession); @@ -178,6 +174,13 @@ NULL // Set value. }, + { + "oerrlock", // Property name. + N_( "Lock keyboard on operator error" ), // Property description. + lib3270_get_lock_on_operator_error, // Get value. + lib3270_set_lock_on_operator_error // Set value. + }, + /* { "", // Property name. @@ -342,64 +345,6 @@ return lib3270_get_revision(); } - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wunused-parameter" - const char * lib3270_get_crl_url(H3270 *hSession) - { -#ifdef SSL_ENABLE_CRL_CHECK - if(hSession->ssl.crl.url) - return hSession->ssl.crl.url; - -#ifdef SSL_DEFAULT_CRL_URL - return SSL_DEFAULT_CRL_URL; -#else - return getenv("LIB3270_DEFAULT_CRL"); -#endif // SSL_DEFAULT_CRL_URL - -#else - errno = ENOTSUP; - return ""; -#endif - } - #pragma GCC diagnostic pop - - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wunused-parameter" - int lib3270_set_crl_url(H3270 *hSession, const char *crl) - { - - FAIL_IF_ONLINE(hSession); - -#ifdef SSL_ENABLE_CRL_CHECK - - if(hSession->ssl.crl.url) - { - free(hSession->ssl.crl.url); - hSession->ssl.crl.url = NULL; - } - - if(hSession->ssl.crl.cert) - { - X509_CRL_free(hSession->ssl.crl.cert); - hSession->ssl.crl.cert = NULL; - } - - if(crl) - { - hSession->ssl.crl.url = strdup(crl); - } - - return 0; - -#else - - return errno = ENOTSUP; - -#endif // SSL_ENABLE_CRL_CHECK - - } - #pragma GCC diagnostic pop - LIB3270_EXPORT const LIB3270_STRING_PROPERTY * lib3270_get_string_properties_list(void) { static const LIB3270_STRING_PROPERTY properties[] = { @@ -649,104 +594,3 @@ int lib3270_set_string_property(H3270 *hSession, const char *name, const char * } -/** - * @brief Get SSL host option. - * - * @return Non zero if the host URL has SSL scheme. - * - */ -LIB3270_EXPORT int lib3270_get_secure_host(H3270 *hSession) -{ - CHECK_SESSION_HANDLE(hSession); - - // TODO: Find a better way! - if(!hSession->host.current) - lib3270_set_url(hSession,NULL); - -#ifdef HAVE_LIBSSL - return hSession->ssl.enabled ? 1 : 0; -#else - return 0; -#endif // HAVE_LIBSSL - -} - -#ifdef SSL_ENABLE_CRL_CHECK -LIB3270_EXPORT char * lib3270_get_ssl_crl_text(H3270 *hSession) -{ - - if(hSession->ssl.crl.cert) - { - - BIO * out = BIO_new(BIO_s_mem()); - unsigned char * data; - unsigned char * text; - int n; - - X509_CRL_print(out,hSession->ssl.crl.cert); - - n = BIO_get_mem_data(out, &data); - text = (unsigned char *) lib3270_malloc(n+1); - text[n] ='\0'; - - memcpy(text,data,n); - BIO_free(out); - - return (char *) text; - - } - - return NULL; - -} -#else -LIB3270_EXPORT char * lib3270_get_ssl_crl_text(H3270 GNUC_UNUSED(*hSession)) -{ - return NULL; -} -#endif // SSL_ENABLE_CRL_CHECK - - -LIB3270_EXPORT char * lib3270_get_ssl_peer_certificate_text(H3270 *hSession) -{ -#ifdef HAVE_LIBSSL - if(hSession->ssl.con) - { - X509 * peer = SSL_get_peer_certificate(hSession->ssl.con); - if(peer) - { - BIO * out = BIO_new(BIO_s_mem()); - unsigned char * data; - unsigned char * text; - int n; - - X509_print(out,peer); - - n = BIO_get_mem_data(out, &data); - text = (unsigned char *) lib3270_malloc(n+1); - text[n] ='\0'; - memcpy(text,data,n); - BIO_free(out); - - return (char *) text; - } - } -#endif // HAVE_LIBSSL - - return NULL; -} - -LIB3270_EXPORT int lib3270_set_unlock_delay(H3270 *hSession, unsigned int delay) -{ - CHECK_SESSION_HANDLE(hSession); - hSession->unlock_delay = (delay == 0 ? 0 : 1); - hSession->unlock_delay_ms = (unsigned short) delay; - return 0; -} - -LIB3270_EXPORT unsigned int lib3270_get_unlock_delay(H3270 *hSession) -{ - CHECK_SESSION_HANDLE(hSession); - return (unsigned int) hSession->unlock_delay_ms; -} - diff --git a/src/include/lib3270/keyboard.h b/src/include/lib3270/keyboard.h index 57f1fc2..059a9f8 100644 --- a/src/include/lib3270/keyboard.h +++ b/src/include/lib3270/keyboard.h @@ -82,7 +82,8 @@ * @param enable Non zero to enable operator lock, zero to disable. * */ - LIB3270_EXPORT void lib3270_set_lock_on_operator_error(H3270 *hSession, int enable); + LIB3270_EXPORT int lib3270_set_lock_on_operator_error(H3270 *hSession, int enable); + LIB3270_EXPORT int lib3270_get_lock_on_operator_error(H3270 *hSession); #ifdef __cplusplus } diff --git a/src/ssl/properties.c b/src/ssl/properties.c new file mode 100644 index 0000000..6ffe7b8 --- /dev/null +++ b/src/ssl/properties.c @@ -0,0 +1,182 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +#include +#include + +#if defined(HAVE_LIBSSL) + #include +#endif + + +/** + * @brief Get SSL host option. + * + * @return Non zero if the host URL has SSL scheme. + * + */ +LIB3270_EXPORT int lib3270_get_secure_host(H3270 *hSession) +{ + CHECK_SESSION_HANDLE(hSession); + + // TODO: Find a better way! + if(!hSession->host.current) + lib3270_set_url(hSession,NULL); + +#ifdef HAVE_LIBSSL + return hSession->ssl.enabled ? 1 : 0; +#else + return 0; +#endif // HAVE_LIBSSL + +} + +#ifdef SSL_ENABLE_CRL_CHECK +LIB3270_EXPORT char * lib3270_get_ssl_crl_text(H3270 *hSession) +{ + + if(hSession->ssl.crl.cert) + { + + BIO * out = BIO_new(BIO_s_mem()); + unsigned char * data; + unsigned char * text; + int n; + + X509_CRL_print(out,hSession->ssl.crl.cert); + + n = BIO_get_mem_data(out, &data); + text = (unsigned char *) lib3270_malloc(n+1); + text[n] ='\0'; + + memcpy(text,data,n); + BIO_free(out); + + return (char *) text; + + } + + return NULL; + +} +#else +LIB3270_EXPORT char * lib3270_get_ssl_crl_text(H3270 GNUC_UNUSED(*hSession)) +{ + return NULL; +} +#endif // SSL_ENABLE_CRL_CHECK + + +LIB3270_EXPORT char * lib3270_get_ssl_peer_certificate_text(H3270 *hSession) +{ +#ifdef HAVE_LIBSSL + if(hSession->ssl.con) + { + X509 * peer = SSL_get_peer_certificate(hSession->ssl.con); + if(peer) + { + BIO * out = BIO_new(BIO_s_mem()); + unsigned char * data; + unsigned char * text; + int n; + + X509_print(out,peer); + + n = BIO_get_mem_data(out, &data); + text = (unsigned char *) lib3270_malloc(n+1); + text[n] ='\0'; + memcpy(text,data,n); + BIO_free(out); + + return (char *) text; + } + } +#endif // HAVE_LIBSSL + + return NULL; +} + + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wunused-parameter" + const char * lib3270_get_crl_url(H3270 *hSession) + { +#ifdef SSL_ENABLE_CRL_CHECK + if(hSession->ssl.crl.url) + return hSession->ssl.crl.url; + +#ifdef SSL_DEFAULT_CRL_URL + return SSL_DEFAULT_CRL_URL; +#else + return getenv("LIB3270_DEFAULT_CRL"); +#endif // SSL_DEFAULT_CRL_URL + +#else + errno = ENOTSUP; + return ""; +#endif + } + #pragma GCC diagnostic pop + + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wunused-parameter" + int lib3270_set_crl_url(H3270 *hSession, const char *crl) + { + + FAIL_IF_ONLINE(hSession); + +#ifdef SSL_ENABLE_CRL_CHECK + + if(hSession->ssl.crl.url) + { + free(hSession->ssl.crl.url); + hSession->ssl.crl.url = NULL; + } + + if(hSession->ssl.crl.cert) + { + X509_CRL_free(hSession->ssl.crl.cert); + hSession->ssl.crl.cert = NULL; + } + + if(crl) + { + hSession->ssl.crl.url = strdup(crl); + } + + return 0; + +#else + + return errno = ENOTSUP; + +#endif // SSL_ENABLE_CRL_CHECK + + } + #pragma GCC diagnostic pop + -- libgit2 0.21.2