diff options
| author | william <william@25tandclement.com> | 2014-10-15 14:57:07 -0700 |
|---|---|---|
| committer | william <william@25tandclement.com> | 2014-10-15 14:57:07 -0700 |
| commit | b8860e791f886b510bd8539bb26fa22558b9f42d (patch) | |
| tree | 9c76af1bbf7363985be00162a63de2bf4bc4bf44 /src | |
| parent | c3bdfe8cc6985d54f989aa1538fc19458abaa973 (diff) | |
| download | luaossl-b8860e791f886b510bd8539bb26fa22558b9f42d.tar.gz luaossl-b8860e791f886b510bd8539bb26fa22558b9f42d.tar.bz2 luaossl-b8860e791f886b510bd8539bb26fa22558b9f42d.zip | |
add ssl:getVersion and ssl:getClientVersion methods
Diffstat (limited to 'src')
| -rw-r--r-- | src/openssl.c | 81 |
1 files changed, 74 insertions, 7 deletions
diff --git a/src/openssl.c b/src/openssl.c index 5695b58..034806b 100644 --- a/src/openssl.c +++ b/src/openssl.c | |||
| @@ -4706,6 +4706,56 @@ static int ssl_setHostName(lua_State *L) { | |||
| 4706 | } /* ssl_setHostName() */ | 4706 | } /* ssl_setHostName() */ |
| 4707 | 4707 | ||
| 4708 | 4708 | ||
| 4709 | static int ssl_getVersion(lua_State *L) { | ||
| 4710 | SSL *ssl = checksimple(L, 1, SSL_CLASS); | ||
| 4711 | int format = luaL_checkoption(L, 2, "d", (const char *[]){ "d", ".", "f", NULL }); | ||
| 4712 | int version = SSL_version(ssl); | ||
| 4713 | int major, minor; | ||
| 4714 | |||
| 4715 | switch (format) { | ||
| 4716 | case 1: case 2: | ||
| 4717 | major = 0xff & ((version >> 8)); | ||
| 4718 | minor = (0xff & version); | ||
| 4719 | |||
| 4720 | luaL_argcheck(L, minor < 10, 2, "unable to convert SSL version to float because minor version >= 10"); | ||
| 4721 | lua_pushnumber(L, major + ((double)minor / 10)); | ||
| 4722 | |||
| 4723 | break; | ||
| 4724 | default: | ||
| 4725 | lua_pushinteger(L, version); | ||
| 4726 | |||
| 4727 | break; | ||
| 4728 | } | ||
| 4729 | |||
| 4730 | return 1; | ||
| 4731 | } /* ssl_getVersion() */ | ||
| 4732 | |||
| 4733 | |||
| 4734 | static int ssl_getClientVersion(lua_State *L) { | ||
| 4735 | SSL *ssl = checksimple(L, 1, SSL_CLASS); | ||
| 4736 | int format = luaL_checkoption(L, 2, "d", (const char *[]){ "d", ".", "f", NULL }); | ||
| 4737 | int version = ssl->client_version; | ||
| 4738 | int major, minor; | ||
| 4739 | |||
| 4740 | switch (format) { | ||
| 4741 | case 1: case 2: | ||
| 4742 | major = 0xff & ((version >> 8)); | ||
| 4743 | minor = (0xff & version); | ||
| 4744 | |||
| 4745 | luaL_argcheck(L, minor < 10, 2, "unable to convert SSL client version to float because minor version >= 10"); | ||
| 4746 | lua_pushnumber(L, major + ((double)minor / 10)); | ||
| 4747 | |||
| 4748 | break; | ||
| 4749 | default: | ||
| 4750 | lua_pushinteger(L, version); | ||
| 4751 | |||
| 4752 | break; | ||
| 4753 | } | ||
| 4754 | |||
| 4755 | return 1; | ||
| 4756 | } /* ssl_getClientVersion() */ | ||
| 4757 | |||
| 4758 | |||
| 4709 | static int ssl__gc(lua_State *L) { | 4759 | static int ssl__gc(lua_State *L) { |
| 4710 | SSL **ud = luaL_checkudata(L, 1, SSL_CLASS); | 4760 | SSL **ud = luaL_checkudata(L, 1, SSL_CLASS); |
| 4711 | 4761 | ||
| @@ -4719,14 +4769,16 @@ static int ssl__gc(lua_State *L) { | |||
| 4719 | 4769 | ||
| 4720 | 4770 | ||
| 4721 | static const luaL_Reg ssl_methods[] = { | 4771 | static const luaL_Reg ssl_methods[] = { |
| 4722 | { "setOptions", &ssl_setOptions }, | 4772 | { "setOptions", &ssl_setOptions }, |
| 4723 | { "getOptions", &ssl_getOptions }, | 4773 | { "getOptions", &ssl_getOptions }, |
| 4724 | { "clearOptions", &ssl_clearOptions }, | 4774 | { "clearOptions", &ssl_clearOptions }, |
| 4725 | { "getPeerCertificate", &ssl_getPeerCertificate }, | 4775 | { "getPeerCertificate", &ssl_getPeerCertificate }, |
| 4726 | { "getPeerChain", &ssl_getPeerChain }, | 4776 | { "getPeerChain", &ssl_getPeerChain }, |
| 4727 | { "getCipherInfo", &ssl_getCipherInfo }, | 4777 | { "getCipherInfo", &ssl_getCipherInfo }, |
| 4728 | { "getHostName", &ssl_getHostName }, | 4778 | { "getHostName", &ssl_getHostName }, |
| 4729 | { "setHostName", &ssl_setHostName }, | 4779 | { "setHostName", &ssl_setHostName }, |
| 4780 | { "getVersion", &ssl_getVersion }, | ||
| 4781 | { "getClientVersion", &ssl_getClientVersion }, | ||
| 4730 | { NULL, NULL }, | 4782 | { NULL, NULL }, |
| 4731 | }; | 4783 | }; |
| 4732 | 4784 | ||
| @@ -4741,10 +4793,25 @@ static const luaL_Reg ssl_globals[] = { | |||
| 4741 | { NULL, NULL }, | 4793 | { NULL, NULL }, |
| 4742 | }; | 4794 | }; |
| 4743 | 4795 | ||
| 4796 | static const integer_Reg ssl_version[] = { | ||
| 4797 | { "SSL2_VERSION", SSL2_VERSION }, | ||
| 4798 | { "SSL3_VERSION", SSL3_VERSION }, | ||
| 4799 | { "TLS1_VERSION", TLS1_VERSION }, | ||
| 4800 | #if defined TLS1_1_VERSION | ||
| 4801 | { "TLS1_1_VERSION", TLS1_1_VERSION }, | ||
| 4802 | #endif | ||
| 4803 | #if defined TLS1_2_VERSION | ||
| 4804 | { "TLS1_2_VERSION", TLS1_2_VERSION }, | ||
| 4805 | #endif | ||
| 4806 | { NULL, 0 }, | ||
| 4807 | }; | ||
| 4808 | |||
| 4809 | |||
| 4744 | int luaopen__openssl_ssl(lua_State *L) { | 4810 | int luaopen__openssl_ssl(lua_State *L) { |
| 4745 | initall(L); | 4811 | initall(L); |
| 4746 | 4812 | ||
| 4747 | luaL_newlib(L, ssl_globals); | 4813 | luaL_newlib(L, ssl_globals); |
| 4814 | lib_setintegers(L, ssl_version); | ||
| 4748 | lib_setintegers(L, sx_verify); | 4815 | lib_setintegers(L, sx_verify); |
| 4749 | lib_setintegers(L, sx_option); | 4816 | lib_setintegers(L, sx_option); |
| 4750 | 4817 | ||
