Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Achou.Wang
accel-ppp
提交
413b499a
A
accel-ppp
项目概览
Achou.Wang
/
accel-ppp
通知
6
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
accel-ppp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
413b499a
编写于
11月 11, 2010
作者:
K
Kozlov Dmitry
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
implemented option to disable iprange module
上级
8f5464b3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
28 deletion
+40
-28
accel-pptpd/extra/ippool.c
accel-pptpd/extra/ippool.c
+3
-3
accel-pptpd/iprange.c
accel-pptpd/iprange.c
+35
-23
accel-pptpd/ppp/ipcp_opt_ipaddr.c
accel-pptpd/ppp/ipcp_opt_ipaddr.c
+2
-2
未找到文件。
accel-pptpd/extra/ippool.c
浏览文件 @
413b499a
...
...
@@ -50,11 +50,11 @@ static int parse1(const char *str, uint32_t *begin, uint32_t *end)
return
-
1
;
if
(
f1
>
255
)
return
-
1
;
if
(
f
1
>
255
)
if
(
f
2
>
255
)
return
-
1
;
if
(
f
1
>
255
)
if
(
f
3
>
255
)
return
-
1
;
if
(
f
1
>
255
)
if
(
f
4
>
255
)
return
-
1
;
if
(
m
==
0
||
m
>
32
)
return
-
1
;
...
...
accel-pptpd/iprange.c
浏览文件 @
413b499a
...
...
@@ -2,9 +2,11 @@
#include <stdio.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#include "triton.h"
#include "list.h"
#include "log.h"
#include "iprange.h"
...
...
@@ -13,11 +15,12 @@
struct
iprange_t
{
struct
list_head
entry
;
uint32_t
prefix
;
uint32_t
mask
;
uint32_t
begin
;
uint32_t
end
;
};
static
int
conf_disable
=
0
;
static
LIST_HEAD
(
client_ranges
);
//static LIST_HEAD(tunnel_ranges);
...
...
@@ -26,27 +29,30 @@ static struct iprange_t *parse1(const char *str)
{
int
n
,
f1
,
f2
,
f3
,
f4
,
m
;
struct
iprange_t
*
r
;
int
mask
;
n
=
sscanf
(
str
,
"%u.%u.%u.%u/%u"
,
&
f1
,
&
f2
,
&
f3
,
&
f4
,
&
m
);
if
(
n
!=
5
)
return
NULL
;
if
(
f1
>
255
)
return
NULL
;
if
(
f
1
>
255
)
if
(
f
2
>
255
)
return
NULL
;
if
(
f
1
>
255
)
if
(
f
3
>
255
)
return
NULL
;
if
(
f
1
>
255
)
if
(
f
4
>
255
)
return
NULL
;
if
(
m
==
0
||
m
>
32
)
return
NULL
;
r
=
_malloc
(
sizeof
(
*
r
));
r
->
prefix
=
(
f4
<<
24
)
|
(
f3
<<
16
)
|
(
f2
<<
8
)
|
f1
;
r
->
mask
=
0
;
r
->
begin
=
(
f4
<<
24
)
|
(
f3
<<
16
)
|
(
f2
<<
8
)
|
f1
;
mask
=
0
;
for
(
n
=
0
;
n
<
m
;
n
++
)
r
->
mask
|=
1
<<
n
;
mask
|=
1
<<
n
;
r
->
end
=
ntohl
(
r
->
begin
|
~
mask
);
r
->
begin
=
ntohl
(
r
->
begin
);
return
r
;
}
...
...
@@ -72,9 +78,8 @@ static struct iprange_t *parse2(const char *str)
return
NULL
;
r
=
_malloc
(
sizeof
(
*
r
));
r
->
prefix
=
(
f4
<<
24
)
|
(
f3
<<
16
)
|
(
f2
<<
8
)
|
f1
;
r
->
end
=
(
m
<<
24
)
|
(
f3
<<
16
)
|
(
f2
<<
8
)
|
f1
;
r
->
mask
=
0
;
r
->
begin
=
ntohl
((
f4
<<
24
)
|
(
f3
<<
16
)
|
(
f2
<<
8
)
|
f1
);
r
->
end
=
ntohl
((
m
<<
24
)
|
(
f3
<<
16
)
|
(
f2
<<
8
)
|
f1
);
return
r
;
}
...
...
@@ -86,16 +91,21 @@ static void load_ranges(struct list_head *list, const char *conf_sect)
struct
iprange_t
*
r
;
if
(
!
s
)
{
fprintf
(
stderr
,
"iprange: section '%s' not found in config file, pptp and l2tp probably will not work...
\n
"
,
conf_sect
);
log_emerg
(
"iprange: section '%s' not found in config file, pptp and l2tp probably will not work...
\n
"
,
conf_sect
);
return
;
}
list_for_each_entry
(
opt
,
&
s
->
items
,
entry
)
{
if
(
!
strcmp
(
opt
->
name
,
"disable"
))
{
conf_disable
=
1
;
log_emerg
(
"iprange: iprange module disabled so improper ip address assigning may cause kernel soft lockup!
\n
"
);
continue
;
}
r
=
parse1
(
opt
->
name
);
if
(
!
r
)
r
=
parse2
(
opt
->
name
);
if
(
!
r
)
{
fprintf
(
stderr
,
"iprange: cann't parse '%s' in '%s'
\n
"
,
opt
->
name
,
conf_sect
);
log_emerg
(
"iprange: cann't parse '%s' in '%s'
\n
"
,
opt
->
name
,
conf_sect
);
_exit
(
EXIT_FAILURE
);
}
list_add_tail
(
&
r
->
entry
,
list
);
...
...
@@ -105,15 +115,11 @@ static void load_ranges(struct list_head *list, const char *conf_sect)
static
int
check_range
(
struct
list_head
*
list
,
in_addr_t
ipaddr
)
{
struct
iprange_t
*
r
;
uint32_t
a
=
ntohl
(
ipaddr
);
list_for_each_entry
(
r
,
list
,
entry
)
{
if
(
r
->
mask
)
{
if
((
r
->
prefix
&
r
->
mask
)
==
(
ipaddr
&
r
->
mask
))
return
0
;
}
else
{
if
(
ipaddr
>=
r
->
prefix
&&
ipaddr
<=
r
->
end
)
return
0
;
}
if
(
a
>=
r
->
begin
&&
a
<=
r
->
end
)
return
0
;
}
return
-
1
;
...
...
@@ -121,12 +127,18 @@ static int check_range(struct list_head *list, in_addr_t ipaddr)
int
__export
iprange_client_check
(
in_addr_t
ipaddr
)
{
if
(
conf_disable
)
return
0
;
return
check_range
(
&
client_ranges
,
ipaddr
);
}
/*
int __export iprange_tunnel_check(in_addr_t ipaddr)
int
__export
iprange_tunnel_check
(
in_addr_t
ipaddr
)
{
return check_range(&tunnel_ranges, ipaddr);
}*/
if
(
conf_disable
)
return
0
;
return
!
check_range
(
&
client_ranges
,
ipaddr
);
}
static
void
__init
iprange_init
(
void
)
{
...
...
accel-pptpd/ppp/ipcp_opt_ipaddr.c
浏览文件 @
413b499a
...
...
@@ -73,8 +73,8 @@ static int ipaddr_send_conf_req(struct ppp_ipcp_t *ipcp, struct ipcp_option_t *o
return
-
1
;
}
}
if
(
!
iprange_client
_check
(
ipaddr_opt
->
ip
->
peer_addr
))
{
log_ppp_warn
(
"ppp:ipcp: to avoid
hard loops
requested IP cannot be assigned (%i.%i.%i.%i)
\n
"
,
if
(
iprange_tunnel
_check
(
ipaddr_opt
->
ip
->
peer_addr
))
{
log_ppp_warn
(
"ppp:ipcp: to avoid
kernel soft lockup
requested IP cannot be assigned (%i.%i.%i.%i)
\n
"
,
ipaddr_opt
->
ip
->
peer_addr
&
0xff
,
(
ipaddr_opt
->
ip
->
peer_addr
>>
8
)
&
0xff
,
(
ipaddr_opt
->
ip
->
peer_addr
>>
16
)
&
0xff
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录