secgateway/Platform/user/configm/config-server/userlock_config/userlock.c

194 lines
5.6 KiB
C
Raw Normal View History

#include "../../../../common/rpc/rpc.h"
#include "../include/parsefile.h"
#include "../include/configm.h"
#include "../../../netlink_uapi/libnetlinku.h"
#include <cjson/cJSON.h>
#include "../../../../../Common/s2j/s2j.h"
#include "../../../../../Common/commuapinl.h"
#include "../include/userlock.h"
/*全局变量,存放锁定功能的信息 */
userlock_configure_t *userlock;
/*全局变量初始化 失败为1 成功为0*/
int Init(userlock_configure_t **userlock)
{
*userlock = (userlock_configure_t *)malloc(sizeof(userlock_configure_t));
if (NULL == *userlock)
{
return 1;
}
return 0;
}
/*判断锁定配置信息是否有效时间范围大于0失败的次数大于0锁定时间大于0 */
/*input格式 "{\"type\":0, \"failcount\":10, \"locktime\":30, \"timehorizon\":30, \"logintime\":3213250}"*/
ret_code userlock_config_chk(uint source, uint *config_type,
pointer input, int *input_len,
pointer output, int *output_len)
{
ret_code ret = RET_OK;
cJSON *cjson;
/*JSON字符串到JSON格式 */
cjson = cJSON_Parse(input);
if(!cjson)
{
ret = RET_INPUTERR;
ASSERT_RET(ret);
return ret;
}
/*创建freeauth_configure_t结构体对象 */
s2j_create_struct_obj(struct_userlock, userlock_configure_t);
/*反序列化数据到freeauth_configure_t结构体对象 */
s2j_struct_get_basic_element(struct_userlock, cjson, int, failcount);
s2j_struct_get_basic_element(struct_userlock, cjson, int, locktime);
s2j_struct_get_basic_element(struct_userlock, cjson, int, timehorizon);
s2j_struct_get_basic_element(struct_userlock, cjson, int, logintime);
rpc_log_info("userlock configure: 登录时间: %d 用户认证失败次数: %d 用户认证的时间范围: %d 用户锁定时间: %ld\n",
struct_userlock->logintime, struct_userlock->failcount,
struct_userlock->timehorizon, struct_userlock->locktime);
if((*input_len < sizeof(userlock_configure_t)) || (*input_len > sizeof(userlock_configure_t)))
{
free(struct_userlock);
cJSON_Delete(cjson);
ret = RET_INPUTERR;
ASSERT_RET(ret);
return ret;
}
/*配置的用户失败次数如果小于0则配置错误 */
if(struct_userlock->failcount < FAIL_MIN_NUM )
{
free(struct_userlock);
cJSON_Delete(cjson);
ret = RET_ERR;
ASSERT_RET(ret);
return ret;
printf("userlock configure error\n");
}
/*配置的用户锁定时间如果小于0则配置错误 */
if(struct_userlock->locktime < LOCK_MIN_TIME )
{
free(struct_userlock);
cJSON_Delete(cjson);
ret = RET_ERR;
ASSERT_RET(ret);
return ret;
printf("locktime configure error\n");
}
/*配置的用户认证时间范围如果小于0则配置错误 */
if(struct_userlock->timehorizon < HORIZON_MIN_VALUE )
{
free(struct_userlock);
cJSON_Delete(cjson);
ret = RET_ERR;
ASSERT_RET(ret);
return ret;
printf("timehorizon configure error\n");
}
ASSERT_RET(ret);
free(struct_userlock);
cJSON_Delete(cjson);
return RET_OK;
}
/*系统管理模块将数据内容IP地址、端口号发送给web server */
ret_code userlock_config_proc(uint source, uint config_type,
pointer input, int input_len,
pointer output, int *output_len)
{
ret_code ret = RET_OK;
cJSON *cjson, *res;
char *ret_char = NULL;
unsigned int ret_int = 0;
/*JSON字符串到JSON格式 */
cjson = cJSON_Parse(input);
if(!cjson)
{
ret = RET_INPUTERR;
ASSERT_RET(ret);
return ret;
}
/*创建freeauth_configure_t结构体对象 */
s2j_create_struct_obj(struct_userlock, userlock_configure_t);
/*反序列化数据到freeauth_configure_t结构体对象 */
s2j_struct_get_basic_element(struct_userlock, cjson, int, failcount);
s2j_struct_get_basic_element(struct_userlock, cjson, int, locktime);
s2j_struct_get_basic_element(struct_userlock, cjson, int, timehorizon);
s2j_struct_get_basic_element(struct_userlock, cjson, int, logintime);
rpc_log_info("userlock configure: 登录时间: %d 用户认证失败次数: %d 用户认证的时间范围: %d 用户锁定时间: %ld\n",
struct_userlock->logintime, struct_userlock->failcount,
struct_userlock->timehorizon, struct_userlock->locktime);
/*将配置信息struct_userlock发送到数据库 发送结果int类型表示0表示发送成功-1表示发送失败 */
int r;
/*创建json对象 */
res = cJSON_CreateObject();
if(!res)
{
ret = RET_ERR;
ASSERT_RET(ret);
return ret;
}
cJSON_AddNumberToObject(res, "result", r);
/*将json对象转换成json字符串 */
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len)
{
*output_len = ret_int;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2)
{
free(struct_userlock);
cJSON_Delete(cjson);
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, 0, ret_int + 1);
strcpy(output, ret_char);
free(ret_char);
cJSON_Delete(res);
cJSON_Delete(cjson);
/*把本地Portal server的配置信息存入全局变量 */
userlock->failcount = struct_userlock->failcount;
free(struct_userlock);
return RET_OK;
}