コード例 #1
0
ファイル: engine.c プロジェクト: alemic/lua-openssl
static int openssl_engine_set_default(lua_State*L){
	ENGINE* eng = CHECK_OBJECT(1,ENGINE,"openssl.engine");
	int ret = 0;
	int first = 3;
	int top = lua_gettop(L);
	if(top==2){
		if(lua_isnumber(L, 2))
		{
			int methods = luaL_checkint(L, 2);
			ret = ENGINE_set_default(eng, methods);
		}else if(lua_isstring(L,2)){
			const char* s = luaL_checkstring(L, 2);
			ret = ENGINE_set_default_string(eng, s);
		}else
			luaL_error(L, "#2 must be a number or string");
		lua_pushboolean(L, ret);
		return 1;
	}

	while(first<=top){
		int c = luaL_checkoption(L, first, "RSA",list);
		switch(c){
		case 0:
			ret = ENGINE_set_default_RSA(eng);
			break;
		case 1:
			ret = ENGINE_set_default_DSA(eng);
			break;
		case 2:
			ret = ENGINE_set_default_ECDH(eng);
			break;
		case 3:
			ret = ENGINE_set_default_ECDSA(eng);
			break;
		case 4:
			ret = ENGINE_set_default_DH(eng);
			break;
		case 5:
			ret = ENGINE_set_default_RAND(eng);
			break;
		case 7:
			ret = ENGINE_set_default_ciphers(eng);
			break;
		case 8:
			ret = ENGINE_set_default_digests(eng);
			break;
		case 6:
		default:
			luaL_error(L,"not support %d for %s",c, list[c]);
			break;
		}
		first++;
		if(ret!=1){
			lua_pushboolean(L, 0);
			return 1;
		}
	}
	lua_pushboolean(L, ret);
	return 1;
};
コード例 #2
0
ファイル: eng_cnf.c プロジェクト: hackshields/antivirus
static int int_engine_configure(char *name, char *value, const CONF *cnf)
	{
	int i;
	int ret = 0;
	long do_init = -1;
	STACK_OF(CONF_VALUE) *ecmds;
	CONF_VALUE *ecmd;
	char *ctrlname, *ctrlvalue;
	ENGINE *e = NULL;
	name = skip_dot(name);
#ifdef ENGINE_CONF_DEBUG
	fprintf(stderr, "Configuring engine %s\n", name);
#endif
	/* Value is a section containing ENGINE commands */
	ecmds = NCONF_get_section(cnf, value);

	if (!ecmds)
		{
		ENGINEerr(ENGINE_F_INT_ENGINE_CONFIGURE, ENGINE_R_ENGINE_SECTION_ERROR);
		return 0;
		}

	for (i = 0; i < sk_CONF_VALUE_num(ecmds); i++)
		{
		ecmd = sk_CONF_VALUE_value(ecmds, i);
		ctrlname = skip_dot(ecmd->name);
		ctrlvalue = ecmd->value;
#ifdef ENGINE_CONF_DEBUG
	fprintf(stderr, "ENGINE conf: doing ctrl(%s,%s)\n", ctrlname, ctrlvalue);
#endif

		/* First handle some special pseudo ctrls */

		/* Override engine name to use */
		if (!strcmp(ctrlname, "engine_id"))
			name = ctrlvalue;
		/* Load a dynamic ENGINE */
		else if (!strcmp(ctrlname, "dynamic_path"))
			{
			e = ENGINE_by_id("dynamic");
			if (!e)
				goto err;
			if (!ENGINE_ctrl_cmd_string(e, "SO_PATH", ctrlvalue, 0))
				goto err;
			if (!ENGINE_ctrl_cmd_string(e, "LIST_ADD", "2", 0))
				goto err;
			if (!ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0))
				goto err;
			}
		/* ... add other pseudos here ... */
		else
			{
			/* At this point we need an ENGINE structural reference
			 * if we don't already have one.
			 */
			if (!e)
				{
				e = ENGINE_by_id(name);
				if (!e)
					return 0;
				}
			/* Allow "EMPTY" to mean no value: this allows a valid
			 * "value" to be passed to ctrls of type NO_INPUT
		 	 */
			if (!strcmp(ctrlvalue, "EMPTY"))
				ctrlvalue = NULL;
			if (!strcmp(ctrlname, "init"))
				{
				if (!NCONF_get_number_e(cnf, value, "init", &do_init))
					goto err;
				if (do_init == 1)
					{
					if (!int_engine_init(e))
						goto err;
					}
				else if (do_init != 0)
					{
					ENGINEerr(ENGINE_F_INT_ENGINE_CONFIGURE, ENGINE_R_INVALID_INIT_VALUE);
					goto err;
					}
				}
			else if (!strcmp(ctrlname, "default_algorithms"))
				{
				if (!ENGINE_set_default_string(e, ctrlvalue))
					goto err;
				}
			else if (!ENGINE_ctrl_cmd_string(e,
					ctrlname, ctrlvalue, 0))
				return 0;
			}



		}
	if (e && (do_init == -1) && !int_engine_init(e))
		goto err;
	ret = 1;
	err:
	if (e)
		ENGINE_free(e);
	return ret;
	}