[PATCH] Fix for ipv6 address merge error reported on argus mailing list.

Frank argus-mailinglist-1524134246 at f-block.org
Mon Jul 2 09:17:03 EDT 2018


allright, will do. thx again


On 07/02/2018 03:12 PM, Carter Bullard wrote:
> Hey Frank,
> We’ll release a new version of open source argus in the Aug/Sept time frame. Until then can you use the patch ??
> Carter
>
>> On Jul 2, 2018, at 4:59 AM, Frank <argus-mailinglist-1524134246 at f-block.org> wrote:
>>
>> thx!
>>
>> is it possible to get that version somewhere?
>>
>> On 06/29/2018 05:56 PM, Carter Bullard wrote:
>>> IPv6 address merging generated short or mangled results.
>>> Fixed issue where not looking at right part of the address for comparison.
>>> Needed to ntohl the 32-bit chunk that was being compared.
>>>
>>> (cherry picked from commit 97b17fb3da6cde58f1d2386315fb9e746dd76c85)
>>> ---
>>> common/argus_client.c | 12 +++++++-----
>>> 1 file changed, 7 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/common/argus_client.c b/common/argus_client.c
>>> index 013fea6e..7603f33b 100644
>>> --- a/common/argus_client.c
>>> +++ b/common/argus_client.c
>>> @@ -6946,15 +6946,17 @@ ArgusMergeAddress(unsigned int *a1, unsigned int *a2, int type, int dir, unsigne
>>>          for (z = 0; z < 4; z++) {
>>>             if (a1[z] != a2[z]) {
>>>                unsigned int i = 32, value = 0, ind;
>>> +               unsigned int na1 = ntohl(a1[z]);
>>> +               unsigned int na2 = ntohl(a2[z]);
>>>                ind = 0x80000000;
>>>
>>> -               while (ind && ((*a1 & ind) == (*a2 & ind)) && (i > (32 - *masklen))) {
>>> -                  value |= (*a1 & ind);
>>> -                  ind >>= 1; 
>>> +               while (ind && ((na1 & ind) == (na2 & ind))) {
>>> +                  value |= (na1 & ind);
>>> +                  ind >>= 1;
>>>                   i--;
>>> -               }  
>>> +               }
>>>                *masklen = (z * 32) + (32 - i);
>>> -               a1[z] = value;
>>> +               a1[z] = htonl(value);
>>>                while ((z + 1) < 4) {
>>>                   a1[z + 1] = 0;
>>>                   z++;
>>
>




More information about the argus mailing list