Mod aaa-12 修改获取客户端、服务端IP地址和端口号代码
RCA: SOL: 修改人:chenling 检视人:
This commit is contained in:
parent
daddffdb7e
commit
0cdecd1c7e
|
@ -23,10 +23,10 @@
|
||||||
#define PASSWORD_MAXLEN 63
|
#define PASSWORD_MAXLEN 63
|
||||||
#define LISTENQ 1024
|
#define LISTENQ 1024
|
||||||
|
|
||||||
#define MESSAGE_SIZE (63)
|
#define MESSAGE_SIZE (63)
|
||||||
#define MAX_ONLINE_NUM 10
|
#define MAX_ONLINE_NUM 10
|
||||||
|
|
||||||
typedef void* pointer;
|
typedef void *pointer;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
typedef struct user_auth_list
|
typedef struct user_auth_list
|
||||||
|
@ -65,33 +65,34 @@ typedef struct user_auth_ret
|
||||||
} USER_AUTH_RET;
|
} USER_AUTH_RET;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct {
|
typedef struct
|
||||||
char username[USERNAME_SIZE + 1]; /*用户名*/
|
{
|
||||||
uint32_t userip; /*用户IP*/
|
char username[USERNAME_SIZE + 1]; /*用户名*/
|
||||||
time_t login_time; /*用户登录时间*/
|
uint32_t userip; /*用户IP*/
|
||||||
time_t remain_time; /*剩余实际*/
|
time_t login_time; /*用户登录时间*/
|
||||||
}USERDATA;
|
time_t remain_time; /*剩余实际*/
|
||||||
|
} USERDATA;
|
||||||
|
|
||||||
/*输出函数结构体 */
|
/*输出函数结构体 */
|
||||||
typedef struct {
|
typedef struct
|
||||||
auth_ret resultcode;
|
{
|
||||||
char message[MESSAGE_SIZE + 1]; /*返回描述用指针表示数组 */
|
auth_ret resultcode;
|
||||||
USERDATA data; /*返回的数据内容*/
|
char message[MESSAGE_SIZE + 1]; /*返回描述用指针表示数组 */
|
||||||
}RESULT;
|
USERDATA data; /*返回的数据内容*/
|
||||||
|
} RESULT;
|
||||||
|
|
||||||
/*函数指针*/
|
/*函数指针*/
|
||||||
typedef void (*mod_portal_cfg_exec_sync)(char* username, char* password, USER_AUTH_RET *auth_result);
|
typedef void (*mod_portal_cfg_exec_sync)(char *username, char *password, USER_AUTH_RET *auth_result);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct
|
||||||
|
{
|
||||||
PLUGIN_DATA;
|
PLUGIN_DATA;
|
||||||
void *cfgm_lib;
|
void *cfgm_lib;
|
||||||
mod_portal_cfg_exec_sync portal_cfg_exec;
|
mod_portal_cfg_exec_sync portal_cfg_exec;
|
||||||
USER_AUTH_LIST *portal_auth_list;
|
USER_AUTH_LIST *portal_auth_list;
|
||||||
} mod_portal_plugin_data;
|
} mod_portal_plugin_data;
|
||||||
|
|
||||||
|
char *mes[] = {"认证成功", "用户名或密码错误", "不在有效时间范围内", "只允许单个用户登录", "用户锁定", "缺少配置信息", "输入错误", "超过最大用户连接数", "其他错误", "连接数据库失败"};
|
||||||
char * mes[]={"认证成功", "用户名或密码错误", "不在有效时间范围内","只允许单个用户登录","用户锁定","缺少配置信息","输入错误","超过最大用户连接数","其他错误","连接数据库失败"};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the basic and digest auth framework
|
* the basic and digest auth framework
|
||||||
|
@ -130,7 +131,8 @@ INIT_FUNC(mod_portal_init) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
INIT_FUNC(mod_portal_init) {
|
INIT_FUNC(mod_portal_init)
|
||||||
|
{
|
||||||
mod_portal_plugin_data *p;
|
mod_portal_plugin_data *p;
|
||||||
|
|
||||||
p = calloc(1, sizeof(*p));
|
p = calloc(1, sizeof(*p));
|
||||||
|
@ -140,10 +142,12 @@ INIT_FUNC(mod_portal_init) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*认证模块释放*/
|
/*认证模块释放*/
|
||||||
FREE_FUNC(mod_portal_free) {
|
FREE_FUNC(mod_portal_free)
|
||||||
|
{
|
||||||
mod_portal_plugin_data *p = p_d;
|
mod_portal_plugin_data *p = p_d;
|
||||||
srv = srv;
|
srv = srv;
|
||||||
if (!p) return HANDLER_GO_ON;
|
if (!p)
|
||||||
|
return HANDLER_GO_ON;
|
||||||
|
|
||||||
//dlclose(p->cfgm_lib);
|
//dlclose(p->cfgm_lib);
|
||||||
free(p);
|
free(p);
|
||||||
|
@ -151,31 +155,70 @@ FREE_FUNC(mod_portal_free) {
|
||||||
return HANDLER_GO_ON;
|
return HANDLER_GO_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_local_peer_ip(connection *con, uint32_t *serverip, in_port_t *serverport, uint32_t *clientip, in_port_t *clinetport)
|
||||||
|
{
|
||||||
|
char *tmp;
|
||||||
|
struct in_addr ipv4_addr;
|
||||||
|
buffer *p = con->request.http_host;
|
||||||
|
char *str = strdup(p->ptr);
|
||||||
|
|
||||||
|
if (clinetport)
|
||||||
|
{
|
||||||
|
*clinetport = ntohs(con->dst_addr.ipv4.sin_port);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clientip)
|
||||||
|
{
|
||||||
|
*clientip = con->dst_addr.ipv4.sin_addr.s_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = strrchr(str, ':');
|
||||||
|
|
||||||
|
if (tmp)
|
||||||
|
{
|
||||||
|
if (serverport)
|
||||||
|
{
|
||||||
|
*serverport = strtoul(&tmp[1], NULL, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inet_pton(AF_INET, str, &ipv4_addr);
|
||||||
|
|
||||||
|
if (serverip)
|
||||||
|
{
|
||||||
|
*serverip = ipv4_addr.s_addr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
/*通过fd获取对端和远端的IP地址*/
|
/*通过fd获取对端和远端的IP地址*/
|
||||||
void get_local_peer_ip(int listenfd, uint32_t *serverip, uint32_t *clientip, in_port_t *serverport, in_port_t *clinetport)
|
void get_local_peer_ip2(int listenfd, uint32_t *serverip, uint32_t *clientip, in_port_t *serverport, in_port_t *clinetport)
|
||||||
{
|
{
|
||||||
struct sockaddr_in listendAddr, connectedAddr, peerAddr;//分别表示监听的地址,连接的本地地址,连接的对端地址
|
struct sockaddr_in listendAddr, connectedAddr, peerAddr; //分别表示监听的地址,连接的本地地址,连接的对端地址
|
||||||
socklen_t peerLen;
|
socklen_t peerLen;
|
||||||
char ipAddr[INET_ADDRSTRLEN];//保存点分十进制的地址
|
char ipAddr[INET_ADDRSTRLEN]; //保存点分十进制的地址
|
||||||
|
|
||||||
listen(listenfd, LISTENQ);
|
listen(listenfd, LISTENQ);
|
||||||
socklen_t listendAddrLen = sizeof(listendAddr);
|
socklen_t listendAddrLen = sizeof(listendAddr);
|
||||||
getsockname(listenfd, (struct sockaddr *)&listendAddr, &listendAddrLen);//获取监听的地址和端口
|
getsockname(listenfd, (struct sockaddr *)&listendAddr, &listendAddrLen); //获取监听的地址和端口
|
||||||
printf("listen address = %s:%d\n", inet_ntoa(listendAddr.sin_addr), ntohs(listendAddr.sin_port));
|
printf("listen address = %s:%d\n", inet_ntoa(listendAddr.sin_addr), ntohs(listendAddr.sin_port));
|
||||||
|
|
||||||
socklen_t connectedAddrLen = sizeof(connectedAddr);
|
socklen_t connectedAddrLen = sizeof(connectedAddr);
|
||||||
getsockname(listenfd, (struct sockaddr *)&connectedAddr, &connectedAddrLen);//获取connfd表示的连接上的本地地址(服务端的地址)
|
getsockname(listenfd, (struct sockaddr *)&connectedAddr, &connectedAddrLen); //获取connfd表示的连接上的本地地址(服务端的地址)
|
||||||
printf("connected server address = %s:%d\n", inet_ntoa(connectedAddr.sin_addr), ntohs(connectedAddr.sin_port));
|
printf("connected server address = %s:%d\n", inet_ntoa(connectedAddr.sin_addr), ntohs(connectedAddr.sin_port));
|
||||||
*serverip = connectedAddr.sin_addr.s_addr;
|
*serverip = connectedAddr.sin_addr.s_addr;
|
||||||
*serverport = ntohs(connectedAddr.sin_port);
|
*serverport = ntohs(connectedAddr.sin_port);
|
||||||
|
|
||||||
getpeername(listenfd, (struct sockaddr *)&peerAddr, &peerLen); //获取connfd表示的连接上的对端地址(客户端的地址)
|
getpeername(listenfd, (struct sockaddr *)&peerAddr, &peerLen); //获取connfd表示的连接上的对端地址(客户端的地址)
|
||||||
printf("connected peer address = %s:%d\n", inet_ntop(AF_INET, &peerAddr.sin_addr, ipAddr, sizeof(ipAddr)), ntohs(peerAddr.sin_port));
|
printf("connected peer address = %s:%d\n", inet_ntop(AF_INET, &peerAddr.sin_addr, ipAddr, sizeof(ipAddr)), ntohs(peerAddr.sin_port));
|
||||||
*clientip = peerAddr.sin_addr.s_addr;
|
*clientip = peerAddr.sin_addr.s_addr;
|
||||||
*clinetport = ntohs(peerAddr.sin_port);
|
*clinetport = ntohs(peerAddr.sin_port);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static handler_t ouput_function(server *srv, connection *con, int resultcode, char *message, char *data)
|
static handler_t ouput_function(server *srv, connection *con, int resultcode, char *message, char *data)
|
||||||
|
@ -191,12 +234,11 @@ static handler_t ouput_function(server *srv, connection *con, int resultcode, ch
|
||||||
cJSON_AddStringToObject(res, "message", message);
|
cJSON_AddStringToObject(res, "message", message);
|
||||||
cJSON_AddStringToObject(res, "data", data);
|
cJSON_AddStringToObject(res, "data", data);
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
||||||
|
|
||||||
/*json对象转换为json字符串*/
|
/*json对象转换为json字符串*/
|
||||||
result_str = cJSON_PrintUnformatted(res);
|
result_str = cJSON_PrintUnformatted(res);
|
||||||
buffer *result_info = buffer_init();
|
buffer *result_info = buffer_init_string(result_str);
|
||||||
result_info = buffer_init_string(result_str);
|
|
||||||
chunkqueue_append_buffer(con->write_queue, result_info);
|
chunkqueue_append_buffer(con->write_queue, result_info);
|
||||||
buffer_free(result_info);
|
buffer_free(result_info);
|
||||||
con->http_status = 200;
|
con->http_status = 200;
|
||||||
|
@ -205,37 +247,39 @@ static handler_t ouput_function(server *srv, connection *con, int resultcode, ch
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*post 先判断用户是否认证过 ip是唯一的*/
|
/*post 先判断用户是否认证过 ip是唯一的*/
|
||||||
/*用户认证过-返回resultcode=0 message data(username、user_ip、login_time)*/
|
/*用户认证过-返回resultcode=0 message data(username、user_ip、login_time)*/
|
||||||
/*用户未认证通过-返回resultcode=1 message data(null)*/
|
/*用户未认证通过-返回resultcode=1 message data(null)*/
|
||||||
static handler_t judge_user_auth(server *srv, connection *con, void* p_d)
|
static handler_t judge_user_auth(server *srv, connection *con, void *p_d)
|
||||||
{
|
{
|
||||||
p_d = p_d;
|
p_d = p_d;
|
||||||
USER_INFO *uinfo;
|
USER_INFO *uinfo;
|
||||||
//cJSON *cjson;
|
//cJSON *cjson;
|
||||||
//cJSON *uip;
|
//cJSON *uip;
|
||||||
uint32_t serverip = 0;
|
|
||||||
uint32_t clientip = 0;
|
uint32_t clientip = 0;
|
||||||
in_port_t serverport = 0;
|
|
||||||
in_port_t clientport = 0;
|
in_port_t clientport = 0;
|
||||||
|
uint32_t serverip = 0;
|
||||||
|
in_port_t serverport = 0;
|
||||||
char str[INET_ADDRSTRLEN];
|
char str[INET_ADDRSTRLEN];
|
||||||
char dtr[INET_ADDRSTRLEN];
|
char dtr[INET_ADDRSTRLEN];
|
||||||
|
|
||||||
RESULT *uresult;
|
RESULT *uresult;
|
||||||
uresult = ( RESULT *)malloc(sizeof(RESULT));
|
uresult = (RESULT *)malloc(sizeof(RESULT));
|
||||||
if(NULL == uresult)
|
if(NULL == uresult)
|
||||||
{
|
{
|
||||||
return HANDLER_ERROR;
|
return HANDLER_ERROR;
|
||||||
}
|
}
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
||||||
|
|
||||||
get_local_peer_ip(con->fd, &serverip, &clientip, &serverport, &clientport);
|
get_local_peer_ip(con, &serverip, &serverport, &clientip, &clientport);
|
||||||
|
|
||||||
memset(dtr, 0, INET_ADDRSTRLEN);
|
memset(dtr, 0, INET_ADDRSTRLEN);
|
||||||
inet_ntop(AF_INET, &clientip, dtr, sizeof(dtr));
|
inet_ntop(AF_INET, &clientip, dtr, sizeof(dtr));
|
||||||
log_error_write(srv, __FILE__, __LINE__, "ssd","test", dtr, clientport);
|
log_error_write(srv, __FILE__, __LINE__, "ssd","test", dtr, clientport);
|
||||||
|
|
||||||
|
memset(str, 0, INET_ADDRSTRLEN);
|
||||||
|
inet_ntop(AF_INET, &serverip, str, sizeof(str));
|
||||||
|
log_error_write(srv, __FILE__, __LINE__, "ssd", "test", str, serverport);
|
||||||
|
|
||||||
/*通过用户IP判断用户是否认证通过*/
|
/*通过用户IP判断用户是否认证通过*/
|
||||||
uinfo = ufind_user(clientip);
|
uinfo = ufind_user(clientip);
|
||||||
|
@ -269,7 +313,7 @@ static handler_t judge_user_auth(server *srv, connection *con, void* p_d)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*给data内容赋值,认证成功,给前端返回用户名、用户IP、当前登录时间*/
|
/*给data内容赋值,认证成功,给前端返回用户名、用户IP、当前登录时间*/
|
||||||
time(&tmpcal_ptr);
|
time(&tmpcal_ptr);
|
||||||
log_error_write(srv, __FILE__, __LINE__, "d", tmpcal_ptr);
|
log_error_write(srv, __FILE__, __LINE__, "d", tmpcal_ptr);
|
||||||
|
|
||||||
uresult->data.login_time = tmpcal_ptr;
|
uresult->data.login_time = tmpcal_ptr;
|
||||||
|
@ -278,7 +322,7 @@ static handler_t judge_user_auth(server *srv, connection *con, void* p_d)
|
||||||
strncpy(uresult->data.username, uinfo->auth_user.user_name, 32);
|
strncpy(uresult->data.username, uinfo->auth_user.user_name, 32);
|
||||||
|
|
||||||
memset(str, 0, INET_ADDRSTRLEN);
|
memset(str, 0, INET_ADDRSTRLEN);
|
||||||
inet_ntop(AF_INET,&uresult->data.userip, str, sizeof(str));
|
inet_ntop(AF_INET,&uresult->data.userip, str, sizeof(str));
|
||||||
|
|
||||||
cJSON_AddStringToObject(data, "username", uresult->data.username);
|
cJSON_AddStringToObject(data, "username", uresult->data.username);
|
||||||
cJSON_AddStringToObject(data, "user_ip", str);
|
cJSON_AddStringToObject(data, "user_ip", str);
|
||||||
|
@ -288,168 +332,166 @@ static handler_t judge_user_auth(server *srv, connection *con, void* p_d)
|
||||||
res = cJSON_CreateObject();
|
res = cJSON_CreateObject();
|
||||||
if(!res) return HANDLER_ERROR;
|
if(!res) return HANDLER_ERROR;
|
||||||
|
|
||||||
uresult->resultcode = 1; /*表示用户已经认证成功*/
|
uresult->resultcode = 1; /*表示用户已经认证成功*/
|
||||||
strncpy(uresult->message, messgae, 60); /*用户已经认证通过*/
|
strncpy(uresult->message, messgae, 60); /*用户已经认证通过*/
|
||||||
|
|
||||||
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
||||||
cJSON_AddStringToObject(res, "message", uresult->message);
|
cJSON_AddStringToObject(res, "message", uresult->message);
|
||||||
cJSON_AddItemToObject(res, "data", data);
|
cJSON_AddItemToObject(res, "data", data);
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
||||||
|
|
||||||
/*json对象转换为json字符串*/
|
/*json对象转换为json字符串*/
|
||||||
result_str = cJSON_Print(res);
|
result_str = cJSON_Print(res);
|
||||||
buffer *result_info = buffer_init();
|
buffer *result_info = buffer_init_string(result_str);
|
||||||
result_info = buffer_init_string(result_str);
|
|
||||||
chunkqueue_append_buffer(con->write_queue, result_info);
|
chunkqueue_append_buffer(con->write_queue, result_info);
|
||||||
buffer_free(result_info);
|
buffer_free(result_info);
|
||||||
con->http_status = 200;
|
con->http_status = 200;
|
||||||
con->file_finished = 1;
|
con->file_finished = 1;
|
||||||
cJSON_Delete(res);
|
cJSON_Delete(res);
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*判断用户名和密码是否正确*/
|
/*判断用户名和密码是否正确*/
|
||||||
static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
static handler_t judge_account_pwd(server *srv, connection *con, void *p_d)
|
||||||
{
|
{
|
||||||
p_d = p_d;
|
p_d = p_d;
|
||||||
//mod_portal_plugin_data *p = p_d;
|
//mod_portal_plugin_data *p = p_d;
|
||||||
cJSON *cjson;
|
cJSON *cjson;
|
||||||
USER_AUTH_RET *resultinfo;
|
USER_AUTH_RET *resultinfo;
|
||||||
char *account = NULL;
|
char *account = NULL;
|
||||||
char *pwd = NULL;
|
char *pwd = NULL;
|
||||||
RESULT *uresult;
|
RESULT *uresult;
|
||||||
uint32_t serverip = 0;
|
|
||||||
uint32_t clientip = 0;
|
uint32_t clientip = 0;
|
||||||
in_port_t serverport = 0;
|
|
||||||
in_port_t clientport = 0;
|
in_port_t clientport = 0;
|
||||||
|
uint32_t serverip = 0;
|
||||||
|
in_port_t serverport = 0;
|
||||||
char str[INET_ADDRSTRLEN];
|
char str[INET_ADDRSTRLEN];
|
||||||
char dtr[INET_ADDRSTRLEN];
|
char dtr[INET_ADDRSTRLEN];
|
||||||
|
|
||||||
get_local_peer_ip(con->fd, &serverip, &clientip, &serverport, &clientport);
|
get_local_peer_ip(con, &serverip, &serverport, &clientip, &clientport);
|
||||||
|
|
||||||
memset(dtr, 0, INET_ADDRSTRLEN);
|
memset(dtr, 0, INET_ADDRSTRLEN);
|
||||||
inet_ntop(AF_INET,&clientip, dtr, sizeof(dtr));
|
inet_ntop(AF_INET, &clientip, dtr, sizeof(dtr));
|
||||||
log_error_write(srv, __FILE__, __LINE__, "ssd","test", dtr, clientport);
|
log_error_write(srv, __FILE__, __LINE__, "ssd","test", dtr, clientport);
|
||||||
|
|
||||||
uresult = ( RESULT *)malloc(sizeof(RESULT));
|
uresult = (RESULT *)malloc(sizeof(RESULT));
|
||||||
if(NULL == uresult)
|
if(NULL == uresult)
|
||||||
{
|
{
|
||||||
return HANDLER_ERROR;
|
return HANDLER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
resultinfo = (USER_AUTH_RET *)malloc(sizeof(USER_AUTH_RET));
|
resultinfo = (USER_AUTH_RET *)malloc(sizeof(USER_AUTH_RET));
|
||||||
if (NULL == resultinfo)
|
if (NULL == resultinfo)
|
||||||
{
|
{
|
||||||
return HANDLER_ERROR;
|
return HANDLER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*get payload*/
|
/*get payload*/
|
||||||
handler_t result = connection_handle_read_post_state(srv, con);
|
handler_t result = connection_handle_read_post_state(srv, con);
|
||||||
if (result != HANDLER_GO_ON)
|
if (result != HANDLER_GO_ON)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
|
||||||
|
|
||||||
buffer *b = buffer_init();
|
|
||||||
chunkqueue *dst_cq = con->request_content_queue;
|
|
||||||
chunk *c = dst_cq->first;
|
|
||||||
if (NULL == c) return HANDLER_ERROR;
|
|
||||||
|
|
||||||
while(c != NULL)
|
|
||||||
{
|
|
||||||
buffer_append_string(b, c->mem->ptr + c->offset);
|
|
||||||
c = c->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sb","test",b);
|
|
||||||
|
|
||||||
/*JSON字符串到JSON格式 */
|
|
||||||
cjson = cJSON_Parse(b->ptr);
|
|
||||||
if(!cjson)
|
|
||||||
{
|
|
||||||
return HANDLER_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*get username */
|
|
||||||
cJSON *uitem = cJSON_GetObjectItem(cjson , "account");
|
|
||||||
if(!uitem)
|
|
||||||
{
|
|
||||||
return HANDLER_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
account= uitem->valuestring;
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "ss","test",account);
|
|
||||||
|
|
||||||
if( strlen(account) > USERNAME_MAXLEN )
|
|
||||||
{
|
|
||||||
cJSON_Delete(uitem);
|
|
||||||
cJSON_Delete(cjson);
|
|
||||||
free(account);
|
|
||||||
return HANDLER_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*get password */
|
|
||||||
cJSON *pitem = cJSON_GetObjectItem(cjson , "pwd");
|
|
||||||
if(!pitem)
|
|
||||||
{
|
|
||||||
return HANDLER_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
pwd =pitem->valuestring;
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "ss","test", pwd);
|
|
||||||
if(strlen(pwd) > PASSWORD_MAXLEN)
|
|
||||||
{
|
|
||||||
cJSON_Delete(cjson);
|
|
||||||
cJSON_Delete(pitem);
|
|
||||||
free(pwd);
|
|
||||||
return HANDLER_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
|
||||||
|
|
||||||
/*调用认证接口函数 */
|
|
||||||
user_auth_login(account, pwd, resultinfo);
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
||||||
|
|
||||||
/*auth success*/
|
buffer *b = buffer_init();
|
||||||
if(resultinfo->ret == AUTH_SUCCESS)
|
chunkqueue *dst_cq = con->request_content_queue;
|
||||||
{
|
chunk *c = dst_cq->first;
|
||||||
cJSON *res;
|
if (NULL == c) return HANDLER_ERROR;
|
||||||
|
|
||||||
|
while(c != NULL)
|
||||||
|
{
|
||||||
|
buffer_append_string(b, c->mem->ptr + c->offset);
|
||||||
|
c = c->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error_write(srv, __FILE__, __LINE__, "sb","test",b);
|
||||||
|
|
||||||
|
/*JSON字符串到JSON格式 */
|
||||||
|
cjson = cJSON_Parse(b->ptr);
|
||||||
|
if(!cjson)
|
||||||
|
{
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*get username */
|
||||||
|
cJSON *uitem = cJSON_GetObjectItem(cjson, "account");
|
||||||
|
if(!uitem)
|
||||||
|
{
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
account = uitem->valuestring;
|
||||||
|
log_error_write(srv, __FILE__, __LINE__, "ss", "test", account);
|
||||||
|
|
||||||
|
if (strlen(account) > USERNAME_MAXLEN)
|
||||||
|
{
|
||||||
|
cJSON_Delete(uitem);
|
||||||
|
cJSON_Delete(cjson);
|
||||||
|
free(account);
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*get password */
|
||||||
|
cJSON *pitem = cJSON_GetObjectItem(cjson, "pwd");
|
||||||
|
if (!pitem)
|
||||||
|
{
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
pwd = pitem->valuestring;
|
||||||
|
log_error_write(srv, __FILE__, __LINE__, "ss", "test", pwd);
|
||||||
|
if (strlen(pwd) > PASSWORD_MAXLEN)
|
||||||
|
{
|
||||||
|
cJSON_Delete(cjson);
|
||||||
|
cJSON_Delete(pitem);
|
||||||
|
free(pwd);
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
|
|
||||||
|
/*调用认证接口函数 */
|
||||||
|
user_auth_login(account, pwd, resultinfo);
|
||||||
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
|
|
||||||
|
/*auth success*/
|
||||||
|
if (resultinfo->ret == AUTH_SUCCESS)
|
||||||
|
{
|
||||||
|
cJSON *res;
|
||||||
cJSON *data;
|
cJSON *data;
|
||||||
const char *result_str;
|
const char *result_str;
|
||||||
time_t tmpcal_ptr;
|
time_t tmpcal_ptr;
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
|
|
||||||
/*获取目前在线用户数 超过最大在线用户数则失败*/
|
/*获取目前在线用户数 超过最大在线用户数则失败*/
|
||||||
num = uprintf_users();
|
num = uprintf_users();
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sd","test", num);
|
log_error_write(srv, __FILE__, __LINE__, "sd", "test", num);
|
||||||
int max_num = MAX_ONLINE_NUM;
|
int max_num = MAX_ONLINE_NUM;
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sd","test", max_num);
|
log_error_write(srv, __FILE__, __LINE__, "sd", "test", max_num);
|
||||||
if(num >= MAX_ONLINE_NUM)
|
if (num >= MAX_ONLINE_NUM)
|
||||||
{
|
{
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sd","test", num);
|
log_error_write(srv, __FILE__, __LINE__, "sd", "test", num);
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sd","test", MAX_ONLINE_NUM);
|
log_error_write(srv, __FILE__, __LINE__, "sd", "test", MAX_ONLINE_NUM);
|
||||||
/*创建json对象*/
|
/*创建json对象*/
|
||||||
res = cJSON_CreateObject();
|
res = cJSON_CreateObject();
|
||||||
if(!res) return HANDLER_ERROR;
|
if (!res)
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
|
||||||
cJSON_AddNumberToObject(res, "resultcode", 8);
|
cJSON_AddNumberToObject(res, "resultcode", 8);
|
||||||
cJSON_AddStringToObject(res, "message", "用户达到最大数量");
|
cJSON_AddStringToObject(res, "message", "用户达到最大数量");
|
||||||
cJSON_AddStringToObject(res, "data", "");
|
cJSON_AddStringToObject(res, "data", "");
|
||||||
|
|
||||||
/*json对象转换为json字符串*/
|
/*json对象转换为json字符串*/
|
||||||
result_str = cJSON_Print(res);
|
result_str = cJSON_Print(res);
|
||||||
buffer *result_info = buffer_init();
|
buffer *result_info = buffer_init_string(result_str);
|
||||||
result_info = buffer_init_string(result_str);
|
|
||||||
chunkqueue_append_buffer(con->write_queue, result_info);
|
chunkqueue_append_buffer(con->write_queue, result_info);
|
||||||
buffer_free(result_info);
|
buffer_free(result_info);
|
||||||
con->http_status = 200;
|
con->http_status = 200;
|
||||||
|
@ -459,21 +501,21 @@ static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*auth success-用户信息保存在本地IP监测表*/
|
/*auth success-用户信息保存在本地IP监测表*/
|
||||||
/*获取下行报文数、字节数、在线时间 目前设置默认值为0*/
|
/*获取下行报文数、字节数、在线时间 目前设置默认值为0*/
|
||||||
uadd_user(clientip, account, resultinfo->user_id, resultinfo->group_id, 0, 0, 0);
|
uadd_user(clientip, account, resultinfo->user_id, resultinfo->group_id, 0, 0, 0);
|
||||||
int num1 = uprintf_users();
|
int num1 = uprintf_users();
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sd", "test", num1);
|
log_error_write(srv, __FILE__, __LINE__, "sd", "test", num1);
|
||||||
|
|
||||||
/*创建json对象*/
|
/*创建json对象*/
|
||||||
data = cJSON_CreateObject();
|
data = cJSON_CreateObject();
|
||||||
if(!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
return HANDLER_ERROR;
|
return HANDLER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*给data内容赋值,认证成功,给前端返回用户名、用户IP、当前登录时间*/
|
/*给data内容赋值,认证成功,给前端返回用户名、用户IP、当前登录时间*/
|
||||||
time(&tmpcal_ptr);
|
time(&tmpcal_ptr);
|
||||||
log_error_write(srv, __FILE__, __LINE__, "d", tmpcal_ptr);
|
log_error_write(srv, __FILE__, __LINE__, "d", tmpcal_ptr);
|
||||||
|
|
||||||
uresult->data.login_time = tmpcal_ptr;
|
uresult->data.login_time = tmpcal_ptr;
|
||||||
|
@ -481,41 +523,40 @@ static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
||||||
strncpy(uresult->data.username, account, 32);
|
strncpy(uresult->data.username, account, 32);
|
||||||
|
|
||||||
memset(str, 0, INET_ADDRSTRLEN);
|
memset(str, 0, INET_ADDRSTRLEN);
|
||||||
inet_ntop(AF_INET,&uresult->data.userip, str, sizeof(str));
|
inet_ntop(AF_INET, &uresult->data.userip, str, sizeof(str));
|
||||||
|
|
||||||
cJSON_AddStringToObject(data, "username", uresult->data.username);
|
cJSON_AddStringToObject(data, "username", uresult->data.username);
|
||||||
cJSON_AddStringToObject(data, "user_ip", str);
|
cJSON_AddStringToObject(data, "user_ip", str);
|
||||||
cJSON_AddNumberToObject(data, "login_time", uresult->data.login_time);
|
cJSON_AddNumberToObject(data, "login_time", uresult->data.login_time);
|
||||||
|
|
||||||
uresult->resultcode = resultinfo->ret;; /*表示用户未认证成功*/
|
uresult->resultcode = resultinfo->ret; /*表示用户未认证成功*/
|
||||||
strncpy(uresult->message, mes[resultinfo->ret], 60);
|
strncpy(uresult->message, mes[resultinfo->ret], 60);
|
||||||
|
|
||||||
/*创建json对象*/
|
/*创建json对象*/
|
||||||
res = cJSON_CreateObject();
|
res = cJSON_CreateObject();
|
||||||
if(!res) return HANDLER_ERROR;
|
if (!res)
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
|
||||||
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
||||||
cJSON_AddStringToObject(res, "message", uresult->message);
|
cJSON_AddStringToObject(res, "message", uresult->message);
|
||||||
cJSON_AddItemToObject(res, "data", data);
|
cJSON_AddItemToObject(res, "data", data);
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
|
|
||||||
/*json对象转换为json字符串*/
|
/*json对象转换为json字符串*/
|
||||||
result_str = cJSON_Print(res);
|
result_str = cJSON_Print(res);
|
||||||
buffer *result_info = buffer_init();
|
buffer *result_info = buffer_init_string(result_str);
|
||||||
result_info = buffer_init_string(result_str);
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
|
||||||
chunkqueue_append_buffer(con->write_queue, result_info);
|
chunkqueue_append_buffer(con->write_queue, result_info);
|
||||||
buffer_free(result_info);
|
buffer_free(result_info);
|
||||||
con->http_status = 200;
|
con->http_status = 200;
|
||||||
con->file_finished = 1;
|
con->file_finished = 1;
|
||||||
cJSON_Delete(cjson);
|
cJSON_Delete(cjson);
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
cJSON_Delete(res);
|
cJSON_Delete(res);
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
|
|
||||||
|
#if 0
|
||||||
#if 0
|
|
||||||
/*1.跳转到认证成功界面*/
|
/*1.跳转到认证成功界面*/
|
||||||
buffer *return_info = buffer_init();
|
buffer *return_info = buffer_init();
|
||||||
|
|
||||||
|
@ -530,20 +571,20 @@ static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
||||||
printf("page url:%s\n", page);
|
printf("page url:%s\n", page);
|
||||||
window.location = *page;
|
window.location = *page;
|
||||||
</script>*/
|
</script>*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
}
|
}
|
||||||
else if(resultinfo->ret == AUTH_FAIL_LOCK) /*用户锁定*/
|
else if (resultinfo->ret == AUTH_FAIL_LOCK) /*用户锁定*/
|
||||||
{
|
{
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
cJSON *res;
|
cJSON *res;
|
||||||
cJSON *data;
|
cJSON *data;
|
||||||
const char *result_str;
|
const char *result_str;
|
||||||
|
|
||||||
/*创建json对象*/
|
/*创建json对象*/
|
||||||
data = cJSON_CreateObject();
|
data = cJSON_CreateObject();
|
||||||
if(!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
return HANDLER_ERROR;
|
return HANDLER_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -551,21 +592,21 @@ static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
||||||
uresult->data.remain_time = resultinfo->remain_lock_time;
|
uresult->data.remain_time = resultinfo->remain_lock_time;
|
||||||
cJSON_AddNumberToObject(data, "remain_lock_time", uresult->data.remain_time);
|
cJSON_AddNumberToObject(data, "remain_lock_time", uresult->data.remain_time);
|
||||||
|
|
||||||
uresult->resultcode = resultinfo->ret;; /*表示用户未认证锁定*/
|
uresult->resultcode = resultinfo->ret; /*表示用户未认证锁定*/
|
||||||
strncpy(uresult->message, mes[resultinfo->ret], MESSAGE_SIZE);
|
strncpy(uresult->message, mes[resultinfo->ret], MESSAGE_SIZE);
|
||||||
|
|
||||||
/*创建json对象*/
|
/*创建json对象*/
|
||||||
res = cJSON_CreateObject();
|
res = cJSON_CreateObject();
|
||||||
if(!res) return HANDLER_ERROR;
|
if (!res)
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
|
||||||
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
||||||
cJSON_AddStringToObject(res, "message", uresult->message);
|
cJSON_AddStringToObject(res, "message", uresult->message);
|
||||||
cJSON_AddItemToObject(res, "data", data);
|
cJSON_AddItemToObject(res, "data", data);
|
||||||
|
|
||||||
/*json对象转换为json字符串*/
|
/*json对象转换为json字符串*/
|
||||||
result_str = cJSON_Print(res);
|
result_str = cJSON_Print(res);
|
||||||
buffer *result_info = buffer_init();
|
buffer *result_info = buffer_init_string(result_str);
|
||||||
result_info = buffer_init_string(result_str);
|
|
||||||
chunkqueue_append_buffer(con->write_queue, result_info);
|
chunkqueue_append_buffer(con->write_queue, result_info);
|
||||||
buffer_free(result_info);
|
buffer_free(result_info);
|
||||||
con->http_status = 200;
|
con->http_status = 200;
|
||||||
|
@ -573,36 +614,35 @@ static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
||||||
cJSON_Delete(cjson);
|
cJSON_Delete(cjson);
|
||||||
cJSON_Delete(res);
|
cJSON_Delete(res);
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
|
}
|
||||||
}
|
else /*认证失败*/
|
||||||
else /*认证失败*/
|
{
|
||||||
{
|
printf("auth fail\n");
|
||||||
printf("auth fail\n");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
|
||||||
|
|
||||||
cJSON *res;
|
cJSON *res;
|
||||||
const char *result_str;
|
const char *result_str;
|
||||||
|
|
||||||
int num = uprintf_users();
|
int num = uprintf_users();
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sd","test", num);
|
log_error_write(srv, __FILE__, __LINE__, "sd", "test", num);
|
||||||
|
|
||||||
/*创建json对象*/
|
/*创建json对象*/
|
||||||
res = cJSON_CreateObject();
|
res = cJSON_CreateObject();
|
||||||
if(!res) return HANDLER_ERROR;
|
if (!res)
|
||||||
|
return HANDLER_ERROR;
|
||||||
|
|
||||||
uresult->resultcode = resultinfo->ret;; /*表示用户认证失败*/
|
uresult->resultcode = resultinfo->ret; /*表示用户认证失败*/
|
||||||
strncpy(uresult->message, mes[resultinfo->ret], MESSAGE_SIZE);
|
strncpy(uresult->message, mes[resultinfo->ret], MESSAGE_SIZE);
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "sd","test", uresult->resultcode);
|
log_error_write(srv, __FILE__, __LINE__, "sd", "test", uresult->resultcode);
|
||||||
log_error_write(srv, __FILE__, __LINE__, "ss","test", uresult->message);
|
log_error_write(srv, __FILE__, __LINE__, "ss", "test", uresult->message);
|
||||||
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
cJSON_AddNumberToObject(res, "resultcode", uresult->resultcode);
|
||||||
cJSON_AddStringToObject(res, "message", uresult->message);
|
cJSON_AddStringToObject(res, "message", uresult->message);
|
||||||
cJSON_AddStringToObject(res, "data", "");
|
cJSON_AddStringToObject(res, "data", "");
|
||||||
|
|
||||||
/*json对象转换为json字符串*/
|
/*json对象转换为json字符串*/
|
||||||
result_str = cJSON_PrintUnformatted(res);
|
result_str = cJSON_PrintUnformatted(res);
|
||||||
buffer *result_info = buffer_init();
|
buffer *result_info = buffer_init_string(result_str);
|
||||||
result_info = buffer_init_string(result_str);
|
|
||||||
|
|
||||||
chunkqueue_append_buffer(con->write_queue, result_info);
|
chunkqueue_append_buffer(con->write_queue, result_info);
|
||||||
buffer_free(result_info);
|
buffer_free(result_info);
|
||||||
|
@ -611,8 +651,7 @@ static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
||||||
cJSON_Delete(cjson);
|
cJSON_Delete(cjson);
|
||||||
cJSON_Delete(res);
|
cJSON_Delete(res);
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
cJSON_Delete(cjson);
|
cJSON_Delete(cjson);
|
||||||
cJSON_Delete(uitem);
|
cJSON_Delete(uitem);
|
||||||
|
@ -620,14 +659,13 @@ static handler_t judge_account_pwd(server *srv, connection *con, void* p_d)
|
||||||
return HANDLER_FINISHED;
|
return HANDLER_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*认证模块处理函数*/
|
/*认证模块处理函数*/
|
||||||
/*根据传输过来的url分情况执行*/
|
/*根据传输过来的url分情况执行*/
|
||||||
static handler_t mod_portal_uri_handler(server *srv, connection *con, void* p_d)
|
static handler_t mod_portal_uri_handler(server *srv, connection *con, void *p_d)
|
||||||
{
|
{
|
||||||
/*case 1 -判断认证
|
/*case 1 -判断认证
|
||||||
case 2 -判断用户名和密码*/
|
case 2 -判断用户名和密码*/
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","mod_portal_uri_handler");
|
log_error_write(srv, __FILE__, __LINE__, "s", "mod_portal_uri_handler");
|
||||||
|
|
||||||
handler_t t = HANDLER_GO_ON;
|
handler_t t = HANDLER_GO_ON;
|
||||||
p_d = p_d;
|
p_d = p_d;
|
||||||
|
@ -636,13 +674,16 @@ static handler_t mod_portal_uri_handler(server *srv, connection *con, void* p_d)
|
||||||
return HANDLER_GO_ON;
|
return HANDLER_GO_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
|
|
||||||
if (con->state == CON_STATE_READ_POST) {
|
if (con->state == CON_STATE_READ_POST)
|
||||||
|
{
|
||||||
chunkqueue *cq = con->request_content_queue;
|
chunkqueue *cq = con->request_content_queue;
|
||||||
if (cq->bytes_in != (off_t)con->request.content_length) {
|
if (cq->bytes_in != (off_t)con->request.content_length)
|
||||||
|
{
|
||||||
handler_t r = connection_handle_read_post_state(srv, con);
|
handler_t r = connection_handle_read_post_state(srv, con);
|
||||||
if (r != HANDLER_GO_ON) return r;
|
if (r != HANDLER_GO_ON)
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (0 == con->request.content_length)
|
else if (0 == con->request.content_length)
|
||||||
|
@ -650,31 +691,30 @@ static handler_t mod_portal_uri_handler(server *srv, connection *con, void* p_d)
|
||||||
return HANDLER_GO_ON;
|
return HANDLER_GO_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
/*url 与"/ISG-login"匹配,判断用户是否认证过*/
|
/*url 与"/ISG-login"匹配,判断用户是否认证过*/
|
||||||
if (0 == strcmp(con->uri.path->ptr, "/ISG-login"))
|
if (0 == strcmp(con->uri.path->ptr, "/ISG-login"))
|
||||||
{
|
{
|
||||||
t = judge_user_auth(srv, con, p_d);
|
t = judge_user_auth(srv, con, p_d);
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
}
|
}
|
||||||
else if (0 == strcmp(con->uri.path->ptr, "/ISG-auth"))
|
else if (0 == strcmp(con->uri.path->ptr, "/ISG-auth"))
|
||||||
{
|
{
|
||||||
t = judge_account_pwd(srv, con, p_d);
|
t = judge_account_pwd(srv, con, p_d);
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error_write(srv, __FILE__, __LINE__, "s","test");
|
log_error_write(srv, __FILE__, __LINE__, "s", "test");
|
||||||
|
//http_header_response_set(con, HTTP_HEADER_CONTENT_TYPE, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/xml; charset=\"utf-8\""));
|
||||||
con->http_status = 200;
|
con->http_status = 200;
|
||||||
con->file_finished = 1;
|
con->file_finished = 1;
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SETDEFAULTS_FUNC(mod_portal_set_defaults)
|
SETDEFAULTS_FUNC(mod_portal_set_defaults)
|
||||||
{
|
{
|
||||||
mod_portal_plugin_data *p = p_d;
|
mod_portal_plugin_data *p = p_d;
|
||||||
p = p;//解决编译告警;
|
p = p; //解决编译告警;
|
||||||
//srv = srv;//解决编译告警;
|
//srv = srv;//解决编译告警;
|
||||||
|
|
||||||
init_svr_ptr(srv);
|
init_svr_ptr(srv);
|
||||||
|
@ -682,16 +722,16 @@ SETDEFAULTS_FUNC(mod_portal_set_defaults)
|
||||||
return HANDLER_GO_ON;
|
return HANDLER_GO_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int mod_portal_plugin_init(plugin *p);
|
int mod_portal_plugin_init(plugin *p);
|
||||||
int mod_portal_plugin_init(plugin *p) {
|
int mod_portal_plugin_init(plugin *p)
|
||||||
p->version = LIGHTTPD_VERSION_ID;
|
{
|
||||||
p->name = buffer_init_string("portal");
|
p->version = LIGHTTPD_VERSION_ID;
|
||||||
p->init = mod_portal_init;
|
p->name = buffer_init_string("portal");
|
||||||
|
p->init = mod_portal_init;
|
||||||
p->set_defaults = mod_portal_set_defaults;
|
p->set_defaults = mod_portal_set_defaults;
|
||||||
p->handle_uri_clean = mod_portal_uri_handler;
|
p->handle_uri_clean = mod_portal_uri_handler;
|
||||||
p->cleanup = mod_portal_free;
|
p->cleanup = mod_portal_free;
|
||||||
p->data = NULL;
|
p->data = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,28 +153,37 @@ static int mod_redirect_patch_connection(server *srv, connection *con, plugin_da
|
||||||
}
|
}
|
||||||
|
|
||||||
/*通过fd获取对端和远端的IP地址*/
|
/*通过fd获取对端和远端的IP地址*/
|
||||||
void get_local_peer_ip(int listenfd, uint32_t *serverip, uint32_t *clientip)
|
void get_local_peer_ip(connection *con, uint32_t *serverip, uint32_t *clientip)
|
||||||
{
|
{
|
||||||
struct sockaddr_in listendAddr, connectedAddr, peerAddr;//分别表示监听的地址,连接的本地地址,连接的对端地址
|
char *tmp;
|
||||||
socklen_t peerLen;
|
struct in_addr ipv4_addr;
|
||||||
char ipAddr[INET_ADDRSTRLEN];//保存点分十进制的地址
|
buffer *p = con->request.http_host;
|
||||||
|
char *str = strdup(p->ptr);
|
||||||
|
|
||||||
listen(listenfd, LISTENQ);
|
if (clientip)
|
||||||
socklen_t listendAddrLen = sizeof(listendAddr);
|
{
|
||||||
getsockname(listenfd, (struct sockaddr *)&listendAddr, &listendAddrLen);//获取监听的地址和端口
|
*clientip = con->dst_addr.ipv4.sin_addr.s_addr;
|
||||||
printf("listen address = %s:%d\n", inet_ntoa(listendAddr.sin_addr), ntohs(listendAddr.sin_port));
|
}
|
||||||
|
|
||||||
socklen_t connectedAddrLen = sizeof(connectedAddr);
|
tmp = strrchr(str, ':');
|
||||||
getsockname(listenfd, (struct sockaddr *)&connectedAddr, &connectedAddrLen);//获取connfd表示的连接上的本地地址(服务端的地址)
|
|
||||||
printf("connected server address = %s:%d\n", inet_ntoa(connectedAddr.sin_addr), ntohs(connectedAddr.sin_port));
|
|
||||||
*serverip = connectedAddr.sin_addr.s_addr;
|
|
||||||
getpeername(listenfd, (struct sockaddr *)&peerAddr, &peerLen); //获取connfd表示的连接上的对端地址(客户端的地址)
|
|
||||||
printf("connected peer address = %s:%d\n", inet_ntop(AF_INET, &peerAddr.sin_addr, ipAddr, sizeof(ipAddr)), ntohs(peerAddr.sin_port));
|
|
||||||
*clientip = peerAddr.sin_addr.s_addr;
|
|
||||||
|
|
||||||
return;
|
if (tmp)
|
||||||
|
{
|
||||||
|
tmp[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inet_pton(AF_INET, str, &ipv4_addr);
|
||||||
|
|
||||||
|
if (serverip)
|
||||||
|
{
|
||||||
|
*serverip = ipv4_addr.s_addr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
free(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
URIHANDLER_FUNC(mod_redirect_uri_handler) {
|
URIHANDLER_FUNC(mod_redirect_uri_handler) {
|
||||||
plugin_data *p = p_d;
|
plugin_data *p = p_d;
|
||||||
//struct burl_parts_t burl;
|
//struct burl_parts_t burl;
|
||||||
|
@ -184,7 +193,7 @@ URIHANDLER_FUNC(mod_redirect_uri_handler) {
|
||||||
uint32_t clientip = 0;
|
uint32_t clientip = 0;
|
||||||
struct sockaddr_in ip_addr;
|
struct sockaddr_in ip_addr;
|
||||||
|
|
||||||
get_local_peer_ip(con->fd, &serverip, &clientip);
|
get_local_peer_ip(con, &serverip, &clientip);
|
||||||
|
|
||||||
mod_redirect_patch_connection(srv, con, p);
|
mod_redirect_patch_connection(srv, con, p);
|
||||||
if (!p->conf.redirect->used) return HANDLER_GO_ON;
|
if (!p->conf.redirect->used) return HANDLER_GO_ON;
|
||||||
|
|
Loading…
Reference in New Issue