162 lines
4.8 KiB
C
162 lines
4.8 KiB
C
#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);
|
||
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, *res;
|
||
|
||
/*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))
|
||
{
|
||
ret = RET_INPUTERR;
|
||
ASSERT_RET(ret);
|
||
return ret;
|
||
}
|
||
|
||
/*配置的用户失败次数如果小于0,则配置错误 */
|
||
if(struct_userlock->failcount < FAIL_MIN_NUM )
|
||
{
|
||
ret = RET_ERR;
|
||
ASSERT_RET(ret);
|
||
return ret;
|
||
printf("userlock configure error\n");
|
||
}
|
||
|
||
/*配置的用户锁定时间如果小于0,则配置错误 */
|
||
if(struct_userlock->locktime < LOCK_MIN_TIME )
|
||
{
|
||
ret = RET_ERR;
|
||
ASSERT_RET(ret);
|
||
return ret;
|
||
printf("locktime configure error\n");
|
||
}
|
||
|
||
/*配置的用户认证时间范围如果小于0,则配置错误 */
|
||
if(struct_userlock->timehorizon < HORIZON_MIN_VALUE )
|
||
{
|
||
ret = RET_ERR;
|
||
ASSERT_RET(ret);
|
||
return ret;
|
||
printf("timehorizon configure error\n");
|
||
}
|
||
|
||
ASSERT_RET(ret);
|
||
|
||
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;
|
||
int *ret_int = NULL;
|
||
|
||
/*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 = (int*)ret_char;
|
||
memcpy(output, ret_int, sizeof(ret_int)+1);
|
||
|
||
free(ret_char);
|
||
cJSON_Delete(res);
|
||
|
||
/*把本地Portal server的配置信息存入全局变量 */
|
||
userlock = struct_userlock;
|
||
|
||
return RET_OK;
|
||
}
|
||
|
||
|