Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
Kea
Commits
ba759f69
Commit
ba759f69
authored
Jul 04, 2017
by
Marcin Siodelski
Browse files
[5328] Fixed issues with leases indexing by hwaddr and client id.
parent
f5add97e
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/lib/dhcpsrv/memfile_lease_mgr.cc
View file @
ba759f69
...
...
@@ -638,14 +638,14 @@ Memfile_LeaseMgr::getLease4(const HWAddr& hwaddr) const {
LOG_DEBUG
(
dhcpsrv_logger
,
DHCPSRV_DBG_TRACE_DETAIL
,
DHCPSRV_MEMFILE_GET_HWADDR
).
arg
(
hwaddr
.
toText
());
Lease4Collection
collection
;
const
Lease4StorageAddressIndex
&
idx
=
storage4_
.
get
<
AddressIndexTag
>
();
for
(
Lease4StorageAddressIndex
::
const_iterator
lease
=
idx
.
begin
();
lease
!=
idx
.
end
();
++
lease
)
{
const
Lease4StorageHWAddressSubnetIdIndex
&
idx
=
storage4_
.
get
<
HWAddressSubnetIdIndexTag
>
();
std
::
pair
<
Lease4StorageHWAddressSubnetIdIndex
::
const_iterator
,
Lease4StorageHWAddressSubnetIdIndex
::
const_iterator
>
l
=
idx
.
equal_range
(
boost
::
make_tuple
(
hwaddr
.
hwaddr_
));
// Every Lease4 has a hardware address, so we can compare it
if
(
(
*
(
*
lease
)
->
hwaddr_
)
==
hwaddr
)
{
collection
.
push_back
((
*
lease
));
}
for
(
auto
lease
=
l
.
first
;
lease
!=
l
.
second
;
++
lease
)
{
collection
.
push_back
(
Lease4Ptr
(
new
Lease4
(
**
lease
)));
}
return
(
collection
);
...
...
@@ -677,15 +677,14 @@ Memfile_LeaseMgr::getLease4(const ClientId& client_id) const {
LOG_DEBUG
(
dhcpsrv_logger
,
DHCPSRV_DBG_TRACE_DETAIL
,
DHCPSRV_MEMFILE_GET_CLIENTID
).
arg
(
client_id
.
toText
());
Lease4Collection
collection
;
const
Lease4StorageAddressIndex
&
idx
=
storage4_
.
get
<
AddressIndexTag
>
();
for
(
Lease4StorageAddressIndex
::
const_iterator
lease
=
idx
.
begin
();
lease
!=
idx
.
end
();
++
lease
)
{
const
Lease4StorageClientIdSubnetIdIndex
&
idx
=
storage4_
.
get
<
ClientIdSubnetIdIndexTag
>
();
std
::
pair
<
Lease4StorageClientIdSubnetIdIndex
::
const_iterator
,
Lease4StorageClientIdSubnetIdIndex
::
const_iterator
>
l
=
idx
.
equal_range
(
boost
::
make_tuple
(
client_id
.
getClientId
()));
// client-id is not mandatory in DHCPv4. There can be a lease that does
// not have a client-id. Dereferencing null pointer would be a bad thing
if
((
*
lease
)
->
client_id_
&&
*
(
*
lease
)
->
client_id_
==
client_id
)
{
collection
.
push_back
((
*
lease
));
}
for
(
auto
lease
=
l
.
first
;
lease
!=
l
.
second
;
++
lease
)
{
collection
.
push_back
(
Lease4Ptr
(
new
Lease4
(
**
lease
)));
}
return
(
collection
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment