secgateway/Product/user/user_auth/authfree_configure.c

82 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
struct authfree_configure
{
char name[32]; //免认证规则名称
uint32_t sip; //免认证规则源ip
uint32_t dip; //免认证规则目的ip
int dport; //免认证规则目的端口号
time_t begin_time; //有效时间范围的起始时间
time_t over_time; //有效时间范围内的结束时间
};
//判断IPv4格式是否正确
int isIpV4Addr(const char *ipAddr)
{
int ip_part_1 = 0;
int ip_part_2 = 0;
int ip_part_3 = 0;
int ip_part_4 = 0;
char end_char = 0;
if((NULL == ipAddr) || (0 == strlen(ipAddr)))
{
return -1;
}
if(4 == sscanf(ipAddr,"%d.%d.%d.%d%c",&ip_part_1,&ip_part_2,&ip_part_3,&ip_part_4,&end_char))
{
if((ip_part_1 >= 0) && (ip_part_1 <= 255) &&
(ip_part_2 >= 0) && (ip_part_2 <= 255) &&
(ip_part_3 >= 0) && (ip_part_3 <= 255) &&
(ip_part_4 >= 0) && (ip_part_4 <= 255)
)
{
return 0;
}
}
return -1;
}
//判断免认证规则是否有效,所有条件有效则返回值为0其中一项条件无效则返回值为1
int _valid_authfreerule(struct authfree_configure *s)
{
char sstr[32];
inet_ntop(AF_INET, (void *)&s->sip, sstr, 32);
char *sip_addr = sstr;
if(!isIpV4Addr(sip_addr))
{
char dstr[32];
inet_ntop(AF_INET, (void *)&s->dip, dstr, 32);
char *dip_addr = dstr;
if(!isIpV4Addr(dip_addr))
{
time_t lt;
lt = time(NULL);
if( (memcmp(&s->sip, &s->dip, 32) < 0) & (lt >= s->begin_time) & (lt <= s->over_time))
{
return 0;
}
else
{
return -1;
}
}
else
{
return -1;
}
}
else
{
return -1;
}
}