Exemple #1
0
/*
 *  call-seq:
 *     ctx.session_cache_mode -> integer
 *
 */
static VALUE
ossl_sslctx_get_session_cache_mode(VALUE self)
{
    SSL_CTX *ctx;

    Data_Get_Struct(self, SSL_CTX, ctx);

    return LONG2NUM(SSL_CTX_get_session_cache_mode(ctx));
}
Exemple #2
0
static int openssl_session_cache_mode(lua_State *L)
{
  static const char* smode[] =
  {
    "off",
    "client",
    "server",
    "both",
    "no_auto_clear",
    NULL
  };
  static const int imode[] =
  {
    SSL_SESS_CACHE_OFF,
    SSL_SESS_CACHE_CLIENT,
    SSL_SESS_CACHE_SERVER,
    SSL_SESS_CACHE_BOTH,
    SSL_SESS_CACHE_NO_AUTO_CLEAR,
    -1
  };

  SSL_CTX* ctx = CHECK_OBJECT(1, SSL_CTX, "openssl.ssl_ctx");
  int n = lua_gettop(L);
  long mode = 0;
  int i;
  if (n > 1)
  {
    if (lua_isnumber(L, 2))
    {
      mode = luaL_checkinteger(L, 2);
      mode = SSL_CTX_set_session_cache_mode(ctx, mode);
    }
    else
    {
      for (i = 2; i <= n; i++)
      {
        int j = auxiliar_checkoption(L, i, NULL, smode, imode);
        mode |= j;
      }
      mode = SSL_CTX_set_session_cache_mode(ctx, mode);
    }
  }
  else
  {
    mode = SSL_CTX_get_session_cache_mode(ctx);
  };
  lua_newtable(L);
  i = 0;
  if (mode & SSL_SESS_CACHE_NO_AUTO_CLEAR)
  {
    lua_pushstring(L, smode[4]);
    lua_rawseti(L, -2, i++);
  }
  if (mode & SSL_SESS_CACHE_BOTH)
  {
    lua_pushstring(L, smode[3]);
    lua_rawseti(L, -2, i++);
  }
  else if (mode & SSL_SESS_CACHE_SERVER)
  {
    lua_pushstring(L, smode[2]);
    lua_rawseti(L, -2, i++);
  }
  else if (mode & SSL_SESS_CACHE_CLIENT)
  {
    lua_pushstring(L, smode[1]);
    lua_rawseti(L, -2, i++);
  }
  else if (mode & SSL_SESS_CACHE_OFF)
  {
    lua_pushstring(L, smode[0]);
    lua_rawseti(L, -2, i++);
  }
  return 1;
}
Exemple #3
0
bool SSLContext::sessionCacheEnabled() const
{
    return SSL_CTX_get_session_cache_mode(_sslContext) != SSL_SESS_CACHE_OFF;
}