mirror of
https://github.com/jakobadam/RDSFactor.git
synced 2025-05-31 09:43:48 +02:00
Removed the bundled radar-radius. Added the original as submodule
This commit is contained in:
parent
3a2dff8fcd
commit
5dcb64b8b6
16 changed files with 52 additions and 1085 deletions
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "radar-radius"]
|
||||||
|
path = radar-radius
|
||||||
|
url = https://github.com/jakobadam/radar-radius
|
|
@ -5,16 +5,38 @@ VisualStudioVersion = 12.0.31101.0
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CICRadarR", "CICRadarR.vbproj", "{04C6C533-9FEA-41B2-B554-A166C7C7FE32}"
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CICRadarR", "CICRadarR.vbproj", "{04C6C533-9FEA-41B2-B554-A166C7C7FE32}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RADAR", "..\radar-radius\RADAR\RADAR.vbproj", "{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|Mixed Platforms = Debug|Mixed Platforms
|
||||||
Debug|x86 = Debug|x86
|
Debug|x86 = Debug|x86
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|Mixed Platforms = Release|Mixed Platforms
|
||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
||||||
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|Mixed Platforms.Build.0 = Debug|x86
|
||||||
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|x86.ActiveCfg = Debug|x86
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|x86.Build.0 = Debug|x86
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|Mixed Platforms.ActiveCfg = Release|x86
|
||||||
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|Mixed Platforms.Build.0 = Release|x86
|
||||||
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|x86.ActiveCfg = Release|x86
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|x86.ActiveCfg = Release|x86
|
||||||
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|x86.Build.0 = Release|x86
|
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|x86.Build.0 = Release|x86
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||||
|
{3AB08A4E-C4FA-4571-A5D4-32BBA807C31D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -7,7 +7,7 @@ Imports System.Security.Cryptography
|
||||||
Imports System.Text
|
Imports System.Text
|
||||||
Imports System
|
Imports System
|
||||||
Imports System.Net.Mail
|
Imports System.Net.Mail
|
||||||
|
Imports RADAR
|
||||||
|
|
||||||
Public Class CICRadarR
|
Public Class CICRadarR
|
||||||
|
|
||||||
|
@ -15,7 +15,9 @@ Public Class CICRadarR
|
||||||
Public Shared ADField As String = ""
|
Public Shared ADField As String = ""
|
||||||
Public Shared ADMailField As String = ""
|
Public Shared ADMailField As String = ""
|
||||||
Public Shared EnableOTP As Boolean
|
Public Shared EnableOTP As Boolean
|
||||||
' TODO: What this?
|
|
||||||
|
' Shared key: used for challange encryption
|
||||||
|
' TODO: Fix
|
||||||
Public Shared encCode As String = "gewsyy#sjs2!"
|
Public Shared encCode As String = "gewsyy#sjs2!"
|
||||||
|
|
||||||
Private Shared DEBUG As Boolean
|
Private Shared DEBUG As Boolean
|
||||||
|
@ -163,8 +165,6 @@ Public Class CICRadarR
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Shared Function GenerateCode() As String
|
Public Shared Function GenerateCode() As String
|
||||||
|
|
||||||
|
|
||||||
Dim dummy As Integer = 0
|
Dim dummy As Integer = 0
|
||||||
|
|
||||||
Dim ordRand As New System.Random()
|
Dim ordRand As New System.Random()
|
||||||
|
|
|
@ -77,12 +77,10 @@
|
||||||
<Import Include="System.Xml.Linq" />
|
<Import Include="System.Xml.Linq" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Conversion.vb" />
|
|
||||||
<Compile Include="exceptions\MissingRadiusSecret.vb" />
|
<Compile Include="exceptions\MissingRadiusSecret.vb" />
|
||||||
<Compile Include="exceptions\MissingUser.vb" />
|
<Compile Include="exceptions\MissingUser.vb" />
|
||||||
<Compile Include="handlers\CitrixHandler.vb" />
|
<Compile Include="handlers\CitrixHandler.vb" />
|
||||||
<Compile Include="handlers\RDSHandler.vb" />
|
<Compile Include="handlers\RDSHandler.vb" />
|
||||||
<Compile Include="VendorSpefic.vb" />
|
|
||||||
<Compile Include="Crypto.vb" />
|
<Compile Include="Crypto.vb" />
|
||||||
<Compile Include="IniFileVb.vb" />
|
<Compile Include="IniFileVb.vb" />
|
||||||
<Compile Include="Log.vb" />
|
<Compile Include="Log.vb" />
|
||||||
|
@ -107,16 +105,12 @@
|
||||||
<DependentUpon>Settings.settings</DependentUpon>
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="NASAuthList.vb" />
|
|
||||||
<Compile Include="ProjectInstaller.Designer.vb">
|
<Compile Include="ProjectInstaller.Designer.vb">
|
||||||
<DependentUpon>ProjectInstaller.vb</DependentUpon>
|
<DependentUpon>ProjectInstaller.vb</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="ProjectInstaller.vb">
|
<Compile Include="ProjectInstaller.vb">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="RADIUSAttributes.vb" />
|
|
||||||
<Compile Include="RADIUSPacket.vb" />
|
|
||||||
<Compile Include="RADIUSServer.vb" />
|
|
||||||
<Compile Include="SmsClass.vb" />
|
<Compile Include="SmsClass.vb" />
|
||||||
<Compile Include="TestService.Designer.vb">
|
<Compile Include="TestService.Designer.vb">
|
||||||
<DependentUpon>TestService.vb</DependentUpon>
|
<DependentUpon>TestService.vb</DependentUpon>
|
||||||
|
@ -124,7 +118,6 @@
|
||||||
<Compile Include="TestService.vb">
|
<Compile Include="TestService.vb">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="UDPServer.vb" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="CICRadarR.resx">
|
<EmbeddedResource Include="CICRadarR.resx">
|
||||||
|
@ -155,6 +148,12 @@
|
||||||
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\radar-radius\RADAR\RADAR.vbproj">
|
||||||
|
<Project>{3ab08a4e-c4fa-4571-a5d4-32bba807c31d}</Project>
|
||||||
|
<Name>RADAR</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
Public Class NASAuthList
|
|
||||||
Inherits System.Collections.Generic.Dictionary(Of String, String)
|
|
||||||
|
|
||||||
Public Sub AddSharedSecret(ByVal nasIP As String, ByVal secret As String)
|
|
||||||
If MyBase.ContainsKey(nasIP) Then
|
|
||||||
MyBase.Item(nasIP) = secret
|
|
||||||
Else
|
|
||||||
MyBase.Add(nasIP, secret)
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Function GetSharedSecret(ByVal nasIP As String) As String
|
|
||||||
Dim res As String = ""
|
|
||||||
MyBase.TryGetValue(nasIP, res)
|
|
||||||
Return res
|
|
||||||
End Function
|
|
||||||
End Class
|
|
|
@ -1,312 +0,0 @@
|
||||||
Imports Microsoft.VisualBasic.Conversion
|
|
||||||
Imports CICRadarR.Conversion
|
|
||||||
|
|
||||||
Public Class RADIUSAttributes
|
|
||||||
Inherits List(Of RADIUSAttribute)
|
|
||||||
|
|
||||||
Friend Function LoadAttributes(ByRef data() As Byte) As Boolean
|
|
||||||
Dim offset As Integer = 20
|
|
||||||
Dim attr As RADIUSAttribute
|
|
||||||
Dim result As Boolean = True
|
|
||||||
|
|
||||||
Do While offset < data.Length And result
|
|
||||||
If offset + 1 > data.Length Then result = False
|
|
||||||
If result Then
|
|
||||||
If data(offset + 1) < 3 Then result = False
|
|
||||||
End If
|
|
||||||
If result Then
|
|
||||||
If offset + data(offset + 1) > data.Length Then result = False
|
|
||||||
End If
|
|
||||||
If result Then
|
|
||||||
attr = New RADIUSAttribute(data, offset)
|
|
||||||
Me.Add(attr)
|
|
||||||
offset += data(offset + 1)
|
|
||||||
End If
|
|
||||||
Loop
|
|
||||||
|
|
||||||
Return result
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public ReadOnly Property Length() As Integer
|
|
||||||
Get
|
|
||||||
Dim result As Integer = 0
|
|
||||||
For Each attr In Me
|
|
||||||
result += attr.Length
|
|
||||||
Next
|
|
||||||
Return result
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Friend ReadOnly Property Bytes() As Byte()
|
|
||||||
Get
|
|
||||||
Dim result() As Byte = {}
|
|
||||||
Dim offset As Integer = 0
|
|
||||||
Array.Resize(result, Me.Length)
|
|
||||||
For Each attr In Me
|
|
||||||
Array.Copy(attr.Bytes, 0, result, offset, attr.Length)
|
|
||||||
offset += attr.Length
|
|
||||||
Next
|
|
||||||
Return result
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
' fixed function so it return correct value (CI)
|
|
||||||
Public Function AttributeExists(ByVal type As RadiusAttributeType) As Boolean
|
|
||||||
Dim attr As RADIUSAttribute
|
|
||||||
Dim result As Boolean = False
|
|
||||||
For Each attr In Me
|
|
||||||
result = (attr.Type = type)
|
|
||||||
|
|
||||||
If result = True Then
|
|
||||||
Return True
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
Return False
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Function GetFirstAttribute(ByVal type As RadiusAttributeType) As RADIUSAttribute
|
|
||||||
Dim atr As RADIUSAttribute
|
|
||||||
For Each atr In Me
|
|
||||||
If atr.Type = type Then Return atr
|
|
||||||
Next
|
|
||||||
Return Nothing
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Function GetAllAttributes(ByVal type As RadiusAttributeType) As RADIUSAttributes
|
|
||||||
Dim ret As New RADIUSAttributes
|
|
||||||
Dim atr As RADIUSAttribute
|
|
||||||
For Each atr In Me
|
|
||||||
If atr.Type = type Then ret.Add(atr)
|
|
||||||
Next
|
|
||||||
Return ret
|
|
||||||
End Function
|
|
||||||
|
|
||||||
'Public Function GetAllVSAs() As RADIUSAttributes
|
|
||||||
' Dim ret As New RADIUSAttributes
|
|
||||||
' Dim atr As RADIUSAttribute
|
|
||||||
' For Each atr In Me
|
|
||||||
' If atr.Type = RadiusAttributeType.VendorSpecific Then ret.Add(atr)
|
|
||||||
' Next
|
|
||||||
' Return ret
|
|
||||||
'End Function
|
|
||||||
|
|
||||||
'Public Function GetAllCiscoAVPairs() As RADIUSAttributes
|
|
||||||
' Dim ret As New RADIUSAttributes
|
|
||||||
' Dim atr As RADIUSAttribute
|
|
||||||
' For Each atr In Me
|
|
||||||
' If atr.GetCiscoAVPair IsNot Nothing Then ret.Add(atr)
|
|
||||||
' Next
|
|
||||||
' Return ret
|
|
||||||
'End Function
|
|
||||||
|
|
||||||
'Public Function GetFirstCiscoAVPair(ByVal type As CiscoAVPairType) As CiscoAVPair
|
|
||||||
' Dim atr As RADIUSAttribute
|
|
||||||
' Dim avpair As CiscoAVPair
|
|
||||||
' For Each atr In Me
|
|
||||||
' If atr.Type = RadiusAttributeType.VendorSpecific Then
|
|
||||||
' avpair = atr.GetCiscoAVPair
|
|
||||||
' If avpair IsNot Nothing Then
|
|
||||||
' If avpair.VendorType = type Then Return avpair
|
|
||||||
' End If
|
|
||||||
' End If
|
|
||||||
' Next
|
|
||||||
' Return Nothing
|
|
||||||
'End Function
|
|
||||||
|
|
||||||
'Public Function GetFirstCiscoAVPair(ByVal name As String) As CiscoAVPair
|
|
||||||
' Dim atr As RADIUSAttribute
|
|
||||||
' Dim avpair As CiscoAVPair
|
|
||||||
' For Each atr In Me
|
|
||||||
' If atr.Type = RadiusAttributeType.VendorSpecific Then
|
|
||||||
' avpair = atr.GetCiscoAVPair
|
|
||||||
' If avpair IsNot Nothing Then
|
|
||||||
' If avpair.VendorName = name Then Return avpair
|
|
||||||
' End If
|
|
||||||
' End If
|
|
||||||
' Next
|
|
||||||
' Return Nothing
|
|
||||||
'End Function
|
|
||||||
End Class
|
|
||||||
|
|
||||||
Public Class RADIUSAttribute
|
|
||||||
Private mType As Byte
|
|
||||||
Private mLength As Byte
|
|
||||||
Private mValue() As Byte = {0}
|
|
||||||
|
|
||||||
Friend Sub New(ByRef data() As Byte, ByVal offset As Integer)
|
|
||||||
mLength = data(offset + 1)
|
|
||||||
Array.Resize(mValue, mLength - 2)
|
|
||||||
Array.Copy(data, offset + 2, mValue, 0, mLength - 2)
|
|
||||||
mType = data(offset)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub New(ByVal type As RadiusAttributeType, ByVal data() As Byte)
|
|
||||||
CommonNew(type, data)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub New(ByVal type As RadiusAttributeType, ByVal data As String)
|
|
||||||
Dim newdata() As Byte = ConvertToBytes(data)
|
|
||||||
CommonNew(type, newdata)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub New(ByVal type As RadiusAttributeType, ByVal data As Long)
|
|
||||||
Dim newdata() As Byte = {data \ 16777216, _
|
|
||||||
(data Mod 16777216) \ 65536, _
|
|
||||||
(data Mod 65536) \ 256, _
|
|
||||||
(data Mod 256)}
|
|
||||||
CommonNew(type, newdata)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub CommonNew(ByVal type As Byte, ByRef data() As Byte)
|
|
||||||
If data.Length > 253 Then
|
|
||||||
mType = 0
|
|
||||||
mLength = 3
|
|
||||||
Else
|
|
||||||
mType = type
|
|
||||||
Array.Resize(mValue, data.Length)
|
|
||||||
Array.Copy(data, 0, mValue, 0, data.Length)
|
|
||||||
mLength = mValue.Length + 2
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public ReadOnly Property Length() As Byte
|
|
||||||
Get
|
|
||||||
Return mLength
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property Type() As RadiusAttributeType
|
|
||||||
Get
|
|
||||||
Return mType
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Friend ReadOnly Property Bytes() As Byte()
|
|
||||||
Get
|
|
||||||
Dim result() As Byte = {}
|
|
||||||
Array.Resize(result, mLength)
|
|
||||||
Array.Copy(mValue, 0, result, 2, mLength - 2)
|
|
||||||
result(0) = mType
|
|
||||||
result(1) = mLength
|
|
||||||
Return result
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property Value() As Byte()
|
|
||||||
Get
|
|
||||||
Return mValue
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public Overrides Function ToString() As String
|
|
||||||
Return ConvertToString(mValue)
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Function GetLong() As Long
|
|
||||||
If mLength <> 6 Then Return 0
|
|
||||||
Return mValue(0) * 16777216 + _
|
|
||||||
mValue(1) * 65536 + _
|
|
||||||
mValue(2) * 256 + _
|
|
||||||
mValue(3)
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Function GetIPAddress() As String
|
|
||||||
If mLength <> 6 Then Return "0.0.0.0"
|
|
||||||
Return mValue(0) & "." & mValue(1) & "." & mValue(2) & "." & mValue(3)
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Function GetHex() As String
|
|
||||||
Dim i As Integer
|
|
||||||
Dim result As String = ""
|
|
||||||
Dim k As String
|
|
||||||
For i = 0 To mLength - 3
|
|
||||||
k = Hex(mValue(i))
|
|
||||||
If k.Length = 1 Then k = "0" & k
|
|
||||||
result = result & k & " "
|
|
||||||
Next
|
|
||||||
Return result
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Function GetTrimHex() As String
|
|
||||||
Return Replace(GetHex, " ", "")
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Function GetVendorSpecific() As VendorSpecificAttribute
|
|
||||||
Return New VendorSpecificAttribute(mValue)
|
|
||||||
End Function
|
|
||||||
|
|
||||||
'Public Function GetCiscoAVPair() As CiscoAVPair
|
|
||||||
' Return New CiscoAVPair(mValue)
|
|
||||||
'End Function
|
|
||||||
|
|
||||||
'Public Function GetVendorSpecific() As CiscoAVPair
|
|
||||||
' Return New CiscoAVPair(mValue)
|
|
||||||
'End Function
|
|
||||||
|
|
||||||
'Public Function CiscoAVPairTypeLookahead() As CiscoAVPairType
|
|
||||||
' If mLength < 8 Then Return CiscoAVPairType.Invalid
|
|
||||||
' If mValue(3) <> 9 Then Return CiscoAVPairType.Invalid
|
|
||||||
' If mValue(2) <> 0 Then Return CiscoAVPairType.Invalid
|
|
||||||
' If mValue(1) <> 0 Then Return CiscoAVPairType.Invalid
|
|
||||||
' If mValue(0) <> 0 Then Return CiscoAVPairType.Invalid
|
|
||||||
' Return mValue(4)
|
|
||||||
'End Function
|
|
||||||
End Class
|
|
||||||
|
|
||||||
Public Enum RadiusAttributeType As Byte
|
|
||||||
Invalid = 0
|
|
||||||
UserName = 1
|
|
||||||
UserPassword = 2
|
|
||||||
CHAPPassword = 3
|
|
||||||
NASIPAddress = 4
|
|
||||||
NASPort = 5
|
|
||||||
ServiceType = 6
|
|
||||||
FramedProtocol = 7
|
|
||||||
FramedIPAddress = 8
|
|
||||||
FramedIPNetmask = 9
|
|
||||||
FramedRouting = 10
|
|
||||||
FilterId = 11
|
|
||||||
FramedMTU = 12
|
|
||||||
FramedCompression = 13
|
|
||||||
LoginIPHost = 14
|
|
||||||
LoginService = 15
|
|
||||||
LoginTCPPort = 16
|
|
||||||
ReplyMessage = 18
|
|
||||||
CallbackNumber = 19
|
|
||||||
CallbackId = 20
|
|
||||||
FramedRoute = 22
|
|
||||||
FramedIPXNetwork = 23
|
|
||||||
State = 24
|
|
||||||
[Class] = 25
|
|
||||||
VendorSpecific = 26
|
|
||||||
SessionTimeout = 27
|
|
||||||
IdleTimeout = 28
|
|
||||||
TerminationAction = 29
|
|
||||||
CalledStationId = 30
|
|
||||||
CallingStationId = 31
|
|
||||||
NASIdentifier = 32
|
|
||||||
ProxyState = 33
|
|
||||||
LoginLATService = 34
|
|
||||||
LoginLATNode = 35
|
|
||||||
LoginLATGroup = 36
|
|
||||||
FramedAppleTalkLink = 37
|
|
||||||
FramedAppleTalkNetwork = 38
|
|
||||||
FramedAppleTalkZone = 39
|
|
||||||
AcctStatusType = 40
|
|
||||||
AcctDelayTime = 41
|
|
||||||
AcctInputOctets = 42
|
|
||||||
AcctOutputOctets = 43
|
|
||||||
AcctSessionId = 44
|
|
||||||
AcctAuthentic = 45
|
|
||||||
AcctSessionTime = 46
|
|
||||||
AcctInputPackets = 47
|
|
||||||
AcctOutputPackets = 48
|
|
||||||
AcctTerminateCause = 49
|
|
||||||
AcctMultiSessionId = 50
|
|
||||||
AcctLinkCount = 51
|
|
||||||
CHAPChallenge = 60
|
|
||||||
NASPortType = 61
|
|
||||||
PortLimit = 62
|
|
||||||
LoginLATPort = 63
|
|
||||||
MessageAuthenticator = 80
|
|
||||||
End Enum
|
|
|
@ -1,253 +0,0 @@
|
||||||
Imports System.Net
|
|
||||||
Imports System.Security.Cryptography
|
|
||||||
Imports CICRadarR.Conversion
|
|
||||||
|
|
||||||
Public Class RADIUSPacket
|
|
||||||
Private mCode As RadiusPacketCode
|
|
||||||
Private mIdentifier As Byte
|
|
||||||
Private mAuthenticator() As Byte = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
|
||||||
Private mAttributes As New RADIUSAttributes
|
|
||||||
Private mEndPoint As IPEndPoint
|
|
||||||
Private mIsValid As Boolean
|
|
||||||
Private mServer As RADIUSServer
|
|
||||||
|
|
||||||
Friend Sub New(ByRef data() As Byte, ByVal endPoint As IPEndPoint, ByRef server As RADIUSServer)
|
|
||||||
'Check validity ...
|
|
||||||
mIsValid = mAttributes.LoadAttributes(data)
|
|
||||||
If mIsValid Then
|
|
||||||
mCode = data(0)
|
|
||||||
mIdentifier = data(1)
|
|
||||||
Array.Copy(data, 4, mAuthenticator, 0, 16)
|
|
||||||
mEndPoint = endPoint
|
|
||||||
mServer = server
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub New(ByVal code As RadiusPacketCode, ByVal identifier As Byte, ByVal attributes As RADIUSAttributes, ByVal endPoint As IPEndPoint)
|
|
||||||
mCode = code
|
|
||||||
mIdentifier = identifier
|
|
||||||
If attributes Is Nothing Then
|
|
||||||
mAttributes = New RADIUSAttributes
|
|
||||||
Else
|
|
||||||
mAttributes = attributes
|
|
||||||
End If
|
|
||||||
If endPoint Is Nothing Then
|
|
||||||
mIsValid = False
|
|
||||||
Else
|
|
||||||
mEndPoint = endPoint
|
|
||||||
mIsValid = True
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public ReadOnly Property IsValid() As Boolean
|
|
||||||
Get
|
|
||||||
Return mIsValid
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property Code() As RadiusPacketCode
|
|
||||||
Get
|
|
||||||
Return mCode
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property Identifier() As Byte
|
|
||||||
Get
|
|
||||||
Return mIdentifier
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property Attributes() As RADIUSAttributes
|
|
||||||
Get
|
|
||||||
Return mAttributes
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property Authenticator() As Byte()
|
|
||||||
Get
|
|
||||||
Return mAuthenticator
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property EndPoint() As IPEndPoint
|
|
||||||
Get
|
|
||||||
Return mEndPoint
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
''' <summary>
|
|
||||||
''' Returns the username supplied in an Access Request. Returns
|
|
||||||
''' Nothing if a User-Name attribute is missing or the packet is not an
|
|
||||||
''' Access Request.
|
|
||||||
''' </summary>
|
|
||||||
''' <value></value>
|
|
||||||
''' <returns></returns>
|
|
||||||
''' <remarks></remarks>
|
|
||||||
Public ReadOnly Property UserName() As String
|
|
||||||
Get
|
|
||||||
If mCode <> RadiusPacketCode.AccessRequest Then Return Nothing
|
|
||||||
If mAttributes.GetFirstAttribute(RadiusAttributeType.UserName) Is Nothing Then Return Nothing
|
|
||||||
Return mAttributes.GetFirstAttribute(RadiusAttributeType.UserName).ToString
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
''' <summary>
|
|
||||||
''' Returns the password supplied in an Access Request. Returns
|
|
||||||
''' Nothing is a User-Password attribute is missing or the packet is not
|
|
||||||
''' an Access Request.
|
|
||||||
''' </summary>
|
|
||||||
''' <value></value>
|
|
||||||
''' <returns></returns>
|
|
||||||
''' <remarks></remarks>
|
|
||||||
Public ReadOnly Property UserPassword() As String
|
|
||||||
Get
|
|
||||||
If mCode <> RadiusPacketCode.AccessRequest Then Return Nothing
|
|
||||||
|
|
||||||
If mAttributes.GetFirstAttribute(RadiusAttributeType.UserPassword) Is Nothing Then Return Nothing
|
|
||||||
|
|
||||||
Dim secret As String = mServer.NASList.GetSharedSecret(mEndPoint.Address.ToString)
|
|
||||||
If secret = "" Then Return Nothing
|
|
||||||
Dim userpass As Byte() = mAttributes.GetFirstAttribute(RadiusAttributeType.UserPassword).Value
|
|
||||||
If userpass.Length Mod 16 > 0 Then Return Nothing
|
|
||||||
|
|
||||||
Dim hasher As MD5 = MD5.Create
|
|
||||||
Dim decoded As Byte() = {}
|
|
||||||
Array.Resize(decoded, userpass.Length)
|
|
||||||
Dim temp As Byte() = {}
|
|
||||||
Array.Resize(temp, secret.Length + 16)
|
|
||||||
Dim segment As Byte() = {}
|
|
||||||
Array.Resize(segment, 16)
|
|
||||||
ConvertToBytes(secret).CopyTo(temp, 0)
|
|
||||||
Dim i As Integer
|
|
||||||
For i = 0 To userpass.Length \ 16 - 1
|
|
||||||
If i = 0 Then
|
|
||||||
mAuthenticator.CopyTo(temp, secret.Length)
|
|
||||||
Else
|
|
||||||
Array.Copy(userpass, (i - 1) * 16, temp, secret.Length, 16)
|
|
||||||
End If
|
|
||||||
Array.Copy(userpass, i * 16, segment, 0, 16)
|
|
||||||
Array.Copy(XorBytes(hasher.ComputeHash(temp), segment), 0, decoded, i * 16, 16)
|
|
||||||
Next
|
|
||||||
hasher = Nothing
|
|
||||||
|
|
||||||
Return ConvertToString(decoded).Trim(Chr(0))
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Friend Function Bytes() As Byte()
|
|
||||||
Dim mLength = 20 + mAttributes.Length
|
|
||||||
Dim result() As Byte = {}
|
|
||||||
Array.Resize(result, mLength)
|
|
||||||
result(0) = mCode
|
|
||||||
result(1) = mIdentifier
|
|
||||||
result(2) = mLength \ 256
|
|
||||||
result(3) = mLength Mod 256
|
|
||||||
mAuthenticator.CopyTo(result, 4)
|
|
||||||
If mLength > 20 Then mAttributes.Bytes.CopyTo(result, 20)
|
|
||||||
Return result
|
|
||||||
End Function
|
|
||||||
|
|
||||||
''' <summary>
|
|
||||||
''' Deprecated. User the UserName and UserPassword properties instead.
|
|
||||||
''' </summary>
|
|
||||||
''' <param name="authList"></param>
|
|
||||||
''' <param name="nasList"></param>
|
|
||||||
''' <returns></returns>
|
|
||||||
''' <remarks></remarks>
|
|
||||||
Public Function AuthenticateAccessRequest(ByRef authList As NASAuthList, ByRef nasList As NASAuthList) As Boolean
|
|
||||||
If authList Is Nothing Then Return False
|
|
||||||
If nasList Is Nothing Then Return False
|
|
||||||
If Not mIsValid Then Return False
|
|
||||||
If mCode <> RadiusPacketCode.AccessRequest Then Return True
|
|
||||||
|
|
||||||
Dim secret As String = nasList.GetSharedSecret(mEndPoint.Address.ToString)
|
|
||||||
If secret = "" Then Return False
|
|
||||||
Dim username As RADIUSAttribute = mAttributes.GetFirstAttribute(RadiusAttributeType.UserName)
|
|
||||||
If username Is Nothing Then Return False
|
|
||||||
Dim userpass As RADIUSAttribute = mAttributes.GetFirstAttribute(RadiusAttributeType.UserPassword)
|
|
||||||
If userpass Is Nothing Then Return False
|
|
||||||
Dim password As String = authList.GetSharedSecret(username.ToString)
|
|
||||||
If password = "" Then Return False
|
|
||||||
|
|
||||||
Dim passlen As Integer = password.Length \ 16
|
|
||||||
If password.Length Mod 16 > 0 Then
|
|
||||||
passlen += 1
|
|
||||||
password = password & StrDup(16 - (password.Length Mod 16), Chr(0))
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim hasher As MD5 = MD5.Create
|
|
||||||
Dim expect() As Byte = {}
|
|
||||||
Array.Resize(expect, passlen * 16)
|
|
||||||
Dim temp() As Byte = {}
|
|
||||||
Array.Resize(temp, secret.Length + 16)
|
|
||||||
ConvertToBytes(secret).CopyTo(temp, 0)
|
|
||||||
Dim i As Integer
|
|
||||||
For i = 0 To passlen - 1
|
|
||||||
If i = 0 Then
|
|
||||||
mAuthenticator.CopyTo(temp, secret.Length)
|
|
||||||
Else
|
|
||||||
Array.Copy(expect, (i - 1) * 16, temp, secret.Length, 16)
|
|
||||||
End If
|
|
||||||
Array.Copy(XorBytes(hasher.ComputeHash(temp), ConvertToBytes(password.Substring(i * 16, 16))), 0, expect, i * 16, 16)
|
|
||||||
Next
|
|
||||||
|
|
||||||
hasher = Nothing
|
|
||||||
|
|
||||||
Return (ConvertToString(expect) = userpass.ToString)
|
|
||||||
End Function
|
|
||||||
|
|
||||||
''' <summary>
|
|
||||||
''' Accept the access request.
|
|
||||||
''' </summary>
|
|
||||||
''' <remarks></remarks>
|
|
||||||
Public Sub AcceptAccessRequest()
|
|
||||||
AcceptAccessRequest(Nothing)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
''' <summary>
|
|
||||||
''' Accept the access request and include the specified attributes in the RADIUS response.
|
|
||||||
''' </summary>
|
|
||||||
''' <param name="attributes">The RADIUS attributes to include with the response.</param>
|
|
||||||
''' <remarks></remarks>
|
|
||||||
Public Sub AcceptAccessRequest(ByVal attributes As RADIUSAttributes)
|
|
||||||
If mCode <> RadiusPacketCode.AccessRequest Then Exit Sub
|
|
||||||
mServer.SendAsResponse(New RADIUSPacket(RadiusPacketCode.AccessAccept, mIdentifier, attributes, mEndPoint), mAuthenticator)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
''' <summary>
|
|
||||||
''' Reject the access request.
|
|
||||||
''' </summary>
|
|
||||||
''' <remarks></remarks>
|
|
||||||
Public Sub RejectAccessRequest()
|
|
||||||
If mCode <> RadiusPacketCode.AccessRequest Then Exit Sub
|
|
||||||
mServer.SendAsResponse(New RADIUSPacket(RadiusPacketCode.AccessReject, mIdentifier, Nothing, mEndPoint), mAuthenticator)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub SendAccessChallenge(ByVal attributes As RADIUSAttributes)
|
|
||||||
mServer.SendAsResponse(New RADIUSPacket(RadiusPacketCode.AccessChallenge, mIdentifier, attributes, mEndPoint), mAuthenticator)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Function XorBytes(ByVal oper1() As Byte, ByVal oper2() As Byte) As Byte()
|
|
||||||
Dim res() As Byte = {}
|
|
||||||
If oper1.Length <> oper2.Length Then Return res
|
|
||||||
Dim i As Integer
|
|
||||||
Array.Resize(res, oper1.Length)
|
|
||||||
For i = 0 To oper1.Length - 1
|
|
||||||
res(i) = oper1(i) Xor oper2(i)
|
|
||||||
Next
|
|
||||||
Return res
|
|
||||||
End Function
|
|
||||||
|
|
||||||
End Class
|
|
||||||
|
|
||||||
Public Enum RadiusPacketCode As Byte
|
|
||||||
AccessRequest = 1
|
|
||||||
AccessAccept = 2
|
|
||||||
AccessReject = 3
|
|
||||||
AccountingRequest = 4
|
|
||||||
AccountingResponse = 5
|
|
||||||
AccessChallenge = 11
|
|
||||||
StatusServer = 12
|
|
||||||
StatusClient = 13
|
|
||||||
Reserved = 255
|
|
||||||
End Enum
|
|
|
@ -1,161 +0,0 @@
|
||||||
Imports System.Net
|
|
||||||
Imports CICRadarR.Conversion
|
|
||||||
|
|
||||||
Public Class RADIUSServer
|
|
||||||
|
|
||||||
Private mSocket As UDPServer
|
|
||||||
Private mSecrets As NASAuthList
|
|
||||||
Private mLastAuthenticator() As Byte = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
|
||||||
|
|
||||||
Public Delegate Sub RADIUSHandler(ByVal packet As RADIUSPacket)
|
|
||||||
|
|
||||||
Private HandlePacket As RADIUSHandler
|
|
||||||
|
|
||||||
Public Sub New(ByVal portNumber As Integer, ByVal onRADIUSPacket As RADIUSHandler, ByRef secrets As NASAuthList)
|
|
||||||
mSocket = New UDPServer(portNumber, AddressOf SocketData)
|
|
||||||
HandlePacket = onRADIUSPacket
|
|
||||||
mSecrets = secrets
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub New(ByVal ipAddress As String, ByVal portNumber As Integer, ByVal onRADIUSPacket As RADIUSHandler, ByRef secrets As NASAuthList)
|
|
||||||
mSocket = New UDPServer(ipAddress, portNumber, AddressOf SocketData)
|
|
||||||
HandlePacket = onRADIUSPacket
|
|
||||||
mSecrets = secrets
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Friend ReadOnly Property NASList() As NASAuthList
|
|
||||||
Get
|
|
||||||
Return mSecrets
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public Sub SendAsRequest(ByVal packet As RADIUSPacket)
|
|
||||||
If packet Is Nothing Then Exit Sub
|
|
||||||
If Not packet.IsValid Then Exit Sub
|
|
||||||
Dim data() As Byte = packet.Bytes
|
|
||||||
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
|
|
||||||
Dim hash() As Byte = {}
|
|
||||||
Dim secret As String = mSecrets.GetSharedSecret(packet.EndPoint.Address.ToString)
|
|
||||||
Array.Resize(hash, data.Length + secret.Length)
|
|
||||||
data.CopyTo(hash, 0)
|
|
||||||
ConvertToBytes(secret).CopyTo(hash, data.Length)
|
|
||||||
hash = hasher.ComputeHash(hash)
|
|
||||||
hash.CopyTo(data, 4)
|
|
||||||
hash.CopyTo(mLastAuthenticator, 0)
|
|
||||||
mSocket.Send(data, packet.EndPoint)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub SendAsResponse(ByVal packet As RADIUSPacket, ByVal requestAuth() As Byte)
|
|
||||||
Try
|
|
||||||
If packet Is Nothing Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
If Not packet.IsValid Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
If requestAuth Is Nothing Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
If requestAuth.Length <> 16 Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim data() As Byte = packet.Bytes
|
|
||||||
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
|
|
||||||
Dim hash() As Byte = {}
|
|
||||||
Dim secret As String = mSecrets.GetSharedSecret(packet.EndPoint.Address.ToString)
|
|
||||||
|
|
||||||
If secret = Nothing Then
|
|
||||||
Throw New MissingRadiusSecret(packet.EndPoint.Address.ToString)
|
|
||||||
End If
|
|
||||||
|
|
||||||
Array.Resize(hash, data.Length + secret.Length)
|
|
||||||
data.CopyTo(hash, 0)
|
|
||||||
ConvertToBytes(secret).CopyTo(hash, data.Length)
|
|
||||||
Array.Copy(requestAuth, 0, hash, 4, 16)
|
|
||||||
hash = hasher.ComputeHash(hash)
|
|
||||||
hash.CopyTo(data, 4)
|
|
||||||
mSocket.Send(data, packet.EndPoint)
|
|
||||||
|
|
||||||
Catch ex As Exception
|
|
||||||
Console.WriteLine(ex.Message)
|
|
||||||
End Try
|
|
||||||
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub SocketData(ByRef data() As Byte, ByRef ep As IPEndPoint)
|
|
||||||
'Verify validity ...
|
|
||||||
If data.Length < 20 Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim len As Integer = data(2) * 256 + data(3)
|
|
||||||
If data.Length <> len Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim code As RadiusPacketCode = data(0)
|
|
||||||
Dim auth As Boolean
|
|
||||||
If code = RadiusPacketCode.AccessRequest Or code = RadiusPacketCode.AccountingRequest Then
|
|
||||||
auth = AuthenticateRequest(data, mSecrets.GetSharedSecret(ep.Address.ToString))
|
|
||||||
Else
|
|
||||||
auth = AuthenticateResponse(data, mSecrets.GetSharedSecret(ep.Address.ToString))
|
|
||||||
End If
|
|
||||||
If Not auth Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
|
|
||||||
Dim packet As New RADIUSPacket(data, ep, Me)
|
|
||||||
HandlePacket(packet)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Function AuthenticateRequest(ByRef dataBytes() As Byte, ByVal secret As String) As Boolean
|
|
||||||
If dataBytes Is Nothing Then Return False
|
|
||||||
If dataBytes(0) = RadiusPacketCode.AccessRequest Then Return True
|
|
||||||
If secret Is Nothing Then Return False
|
|
||||||
Dim res As Boolean = True
|
|
||||||
Dim i As Integer
|
|
||||||
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
|
|
||||||
Dim expectedHash() As Byte = {}
|
|
||||||
|
|
||||||
Array.Resize(Of Byte)(expectedHash, dataBytes.Length + secret.Length)
|
|
||||||
dataBytes.CopyTo(expectedHash, 0)
|
|
||||||
ConvertToBytes(secret).CopyTo(expectedHash, dataBytes.Length)
|
|
||||||
|
|
||||||
For i = 4 To 19 : expectedHash(i) = 0 : Next ' Setting authenticator to zero...
|
|
||||||
|
|
||||||
expectedHash = hasher.ComputeHash(expectedHash)
|
|
||||||
|
|
||||||
' Compare ...
|
|
||||||
i = 4 : Do While res And i <= 19 : If dataBytes(i) <> expectedHash(i - 4) Then : res = False : End If : i += 1 : Loop
|
|
||||||
|
|
||||||
Return res
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function AuthenticateResponse(ByRef dataBytes() As Byte, ByVal secret As String) As Boolean
|
|
||||||
If secret Is Nothing Then Return False
|
|
||||||
If secret = "" Then Return False
|
|
||||||
Dim res As Boolean = True
|
|
||||||
Dim i As Integer
|
|
||||||
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
|
|
||||||
Dim expectedHash() As Byte = {}
|
|
||||||
|
|
||||||
Array.Resize(Of Byte)(expectedHash, dataBytes.Length + secret.Length)
|
|
||||||
dataBytes.CopyTo(expectedHash, 0)
|
|
||||||
ConvertToBytes(secret).CopyTo(expectedHash, dataBytes.Length)
|
|
||||||
|
|
||||||
For i = 4 To 19 : expectedHash(i) = mLastAuthenticator(i - 4) : Next ' Setting authenticator to zero...
|
|
||||||
|
|
||||||
expectedHash = hasher.ComputeHash(expectedHash)
|
|
||||||
|
|
||||||
' Compare ...
|
|
||||||
i = 4 : Do While res And i <= 19 : If dataBytes(i) <> expectedHash(i - 4) Then : res = False : End If : i += 1 : Loop
|
|
||||||
|
|
||||||
Return res
|
|
||||||
End Function
|
|
||||||
|
|
||||||
End Class
|
|
|
@ -1,57 +0,0 @@
|
||||||
Imports System.Net
|
|
||||||
Imports System.Net.Sockets
|
|
||||||
|
|
||||||
Friend Class UDPServer
|
|
||||||
|
|
||||||
Private mSocket As UdpClient
|
|
||||||
Private mAsyncResult As IAsyncResult
|
|
||||||
|
|
||||||
Friend Delegate Sub UDPPacketHandler(ByRef data() As Byte, ByRef endPoint As IPEndPoint)
|
|
||||||
|
|
||||||
Private HandlePacket As UDPPacketHandler
|
|
||||||
|
|
||||||
Friend Sub New(ByVal portNumber As Integer, ByVal onDataArrived As UDPPacketHandler)
|
|
||||||
mSocket = New UdpClient(portNumber)
|
|
||||||
HandlePacket = onDataArrived
|
|
||||||
commonNew()
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Friend Sub New(ByVal ipAddress As String, ByVal portNumber As Integer, ByVal onDataArrived As UDPPacketHandler)
|
|
||||||
Dim ep As New IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portNumber)
|
|
||||||
mSocket = New UdpClient(ep)
|
|
||||||
HandlePacket = onDataArrived
|
|
||||||
commonNew()
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub commonNew()
|
|
||||||
mAsyncResult = mSocket.BeginReceive(New AsyncCallback(AddressOf DataReceived), Nothing)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Private Sub DataReceived(ByVal ar As IAsyncResult)
|
|
||||||
Dim ep As New IPEndPoint(0, 0)
|
|
||||||
Dim ef As Boolean = False
|
|
||||||
Dim data() As Byte = {}
|
|
||||||
Try
|
|
||||||
data = mSocket.EndReceive(mAsyncResult, ep)
|
|
||||||
Catch ex As System.Net.Sockets.SocketException
|
|
||||||
If ex.SocketErrorCode = 10054 Then ' Client killed connection
|
|
||||||
ef = False
|
|
||||||
Else
|
|
||||||
ef = True
|
|
||||||
End If
|
|
||||||
|
|
||||||
End Try
|
|
||||||
If Not ef Then
|
|
||||||
mAsyncResult = mSocket.BeginReceive(New AsyncCallback(AddressOf DataReceived), Nothing)
|
|
||||||
HandlePacket(data, ep)
|
|
||||||
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Friend Sub Send(ByRef data() As Byte, ByRef endPoint As IPEndPoint)
|
|
||||||
mSocket.Send(data, data.Length, endPoint)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
End Class
|
|
|
@ -1,142 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
Imports CICRadarR.Conversion
|
|
||||||
|
|
||||||
Public Class VendorSpecificAttribute
|
|
||||||
|
|
||||||
Private mVendorType As VendorSpecificType
|
|
||||||
Private mVendorName As String
|
|
||||||
Private mVendorValue As String
|
|
||||||
|
|
||||||
Public ReadOnly Property VendorType() As VendorSpecificType
|
|
||||||
Get
|
|
||||||
Return mVendorType
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property VendorName() As String
|
|
||||||
Get
|
|
||||||
Return mVendorName
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public ReadOnly Property VendorValue() As String
|
|
||||||
Get
|
|
||||||
Return mVendorValue
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public Function GetTimeStamp() As DateTime
|
|
||||||
Return ConvertToDateTime(mVendorValue)
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Friend Sub New(ByRef value() As Byte)
|
|
||||||
mVendorType = VendorSpecificType.Invalid
|
|
||||||
mVendorName = ""
|
|
||||||
mVendorValue = ""
|
|
||||||
If value.Length < 6 Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
If value.Length <> value(5) + 4 Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
mVendorType = value(4)
|
|
||||||
If mVendorType = 47 Then
|
|
||||||
mVendorName = "generic"
|
|
||||||
mVendorValue = "TSGateway"
|
|
||||||
Else
|
|
||||||
|
|
||||||
mVendorName = "generic"
|
|
||||||
Dim v() As Byte = {}
|
|
||||||
Array.Resize(v, value.Length - 6)
|
|
||||||
Array.Copy(value, 6, v, 0, v.Length)
|
|
||||||
mVendorValue = ConvertToString(v)
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub New(ByVal type As VendorSpecificType, ByVal value As String)
|
|
||||||
mVendorType = type
|
|
||||||
If type = VendorSpecificType.Invalid Then
|
|
||||||
mVendorName = ""
|
|
||||||
mVendorValue = ""
|
|
||||||
ElseIf type = VendorSpecificType.Generic Then
|
|
||||||
mVendorName = "generic"
|
|
||||||
mVendorValue = value
|
|
||||||
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Public Sub New(ByVal name As String, ByVal value As String)
|
|
||||||
mVendorType = VendorSpecificType.Generic
|
|
||||||
mVendorName = name
|
|
||||||
mVendorValue = value
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Function ToBytes(data As String) As Byte()
|
|
||||||
Dim newdata() As Byte = ConvertToBytes(data)
|
|
||||||
Return newdata
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Sub GetRADIUSAttribute(ByRef attributes As RADIUSAttributes)
|
|
||||||
If attributes Is Nothing Then Exit Sub
|
|
||||||
If mVendorType = VendorSpecificType.Invalid Then
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim data() As Byte = {}
|
|
||||||
Dim len As Byte = 6
|
|
||||||
Dim lvt As Byte = mVendorType
|
|
||||||
' If lvt = CiscoAVPairType.IVR_In Or lvt = CiscoAVPairType.IVR_Out Then lvt = 1
|
|
||||||
If VendorName = "generic" Then
|
|
||||||
len += VendorValue.Length
|
|
||||||
Array.Resize(data, len)
|
|
||||||
ConvertToBytes(VendorValue).CopyTo(data, 6)
|
|
||||||
Else
|
|
||||||
len += VendorName.Length + 1 + VendorValue.Length
|
|
||||||
Array.Resize(data, len)
|
|
||||||
ConvertToBytes(VendorName & "=" & VendorValue).CopyTo(data, 6)
|
|
||||||
End If
|
|
||||||
|
|
||||||
data(4) = lvt
|
|
||||||
data(5) = len - 4
|
|
||||||
data(0) = 0
|
|
||||||
data(1) = 0
|
|
||||||
data(2) = 0
|
|
||||||
data(3) = 9
|
|
||||||
Dim attr As New RADIUSAttribute(RadiusAttributeType.VendorSpecific, data)
|
|
||||||
attributes.Add(attr)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub SetRADIUSAttribute(ByRef attributes As RADIUSAttributes)
|
|
||||||
|
|
||||||
If mVendorType = VendorSpecificType.Invalid Then Exit Sub
|
|
||||||
Dim data() As Byte = {}
|
|
||||||
Dim len As Byte = 6
|
|
||||||
Dim lvt As Byte = mVendorType
|
|
||||||
|
|
||||||
|
|
||||||
len += VendorValue.Length
|
|
||||||
Array.Resize(data, len)
|
|
||||||
ConvertToBytes(VendorValue).CopyTo(data, 6)
|
|
||||||
|
|
||||||
data(4) = lvt
|
|
||||||
data(5) = len - 4
|
|
||||||
data(0) = 0
|
|
||||||
data(1) = 0
|
|
||||||
data(2) = 2 ' Generic value 666. Not sure if this confilct with other vendor, but RFC does not list existing vendor id's
|
|
||||||
data(3) = 154
|
|
||||||
Dim attr As New RADIUSAttribute(RadiusAttributeType.VendorSpecific, data)
|
|
||||||
attributes.Add(attr)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
End Class
|
|
||||||
|
|
||||||
Public Enum VendorSpecificType As Byte
|
|
||||||
Invalid = 0
|
|
||||||
Generic = 1
|
|
||||||
|
|
||||||
End Enum
|
|
|
@ -1,23 +1,19 @@
|
||||||
[CICRadarR]
|
[CICRadarR]
|
||||||
USELOCALMODEM=0
|
ClientList=192.168.121.162
|
||||||
|
SenderEmail=noreply2@isager.dk
|
||||||
SMSC=+4540390999
|
SMSC=+4540390999
|
||||||
Debug=1
|
EnableOTP=0
|
||||||
ADField=telephoneNumber
|
|
||||||
COMPORT=com1
|
|
||||||
NetBiosDomain=isager
|
|
||||||
ClientList=10.10.10.47,192.168.1.139,192.168.1.101,192.168.1.61,192.168.1.44
|
|
||||||
LDAPDomain=isager.lan
|
|
||||||
Provider=https://www.cpsms.dk/sms/?username=myuser&password=mypassword&recipient=***NUMBER***&message=***TEXTMESSAGE***&from=CPSMS
|
Provider=https://www.cpsms.dk/sms/?username=myuser&password=mypassword&recipient=***NUMBER***&message=***TEXTMESSAGE***&from=CPSMS
|
||||||
EnableOTP=1
|
Debug=1
|
||||||
TSGW=1
|
|
||||||
EnableSMS=1
|
|
||||||
EnableEmail=1
|
|
||||||
MailServer=192.168.1.25
|
MailServer=192.168.1.25
|
||||||
SenderEmail=noreply@isager.dk
|
NetBiosDomain=windows-2012-r2
|
||||||
|
TSGW=1
|
||||||
|
LDAPDomain=windows-2012-r2.example.com
|
||||||
|
EnableEmail=0
|
||||||
|
USELOCALMODEM=0
|
||||||
|
ADField=telephoneNumber
|
||||||
|
EnableSMS=1
|
||||||
|
COMPORT=com1
|
||||||
ADMailfield=mail
|
ADMailfield=mail
|
||||||
[Clients]
|
[Clients]
|
||||||
10.10.10.47=iirseiKUQCWnjfg1ZLhF+w==
|
192.168.121.162=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
|
||||||
192.168.1.101=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
|
|
||||||
192.168.1.61=p2fyLMddDfH8aLYwMyDbhQ1l3MY9hAJxx6DyiUOhjXw=
|
|
||||||
192.168.1.139=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
|
|
||||||
192.168.1.44=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
||||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
|
||||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
|
||||||
<security>
|
|
||||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
|
||||||
<!-- UAC Manifest Options
|
|
||||||
If you want to change the Windows User Account Control level replace the
|
|
||||||
requestedExecutionLevel node with one of the following.
|
|
||||||
|
|
||||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
|
||||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
|
||||||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
|
||||||
|
|
||||||
Specifying requestedExecutionLevel node will disable file and registry virtualization.
|
|
||||||
If you want to utilize File and Registry Virtualization for backward
|
|
||||||
compatibility then delete the requestedExecutionLevel node.
|
|
||||||
-->
|
|
||||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
|
||||||
</requestedPrivileges>
|
|
||||||
</security>
|
|
||||||
</trustInfo>
|
|
||||||
|
|
||||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
|
||||||
<application>
|
|
||||||
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
|
|
||||||
|
|
||||||
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
|
|
||||||
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
|
|
||||||
|
|
||||||
</application>
|
|
||||||
</compatibility>
|
|
||||||
|
|
||||||
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
|
|
||||||
<!-- <dependency>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity
|
|
||||||
type="win32"
|
|
||||||
name="Microsoft.Windows.Common-Controls"
|
|
||||||
version="6.0.0.0"
|
|
||||||
processorArchitecture="*"
|
|
||||||
publicKeyToken="6595b64144ccf1df"
|
|
||||||
language="*"
|
|
||||||
/>
|
|
||||||
</dependentAssembly>
|
|
||||||
</dependency>-->
|
|
||||||
|
|
||||||
</asmv1:assembly>
|
|
|
@ -1,66 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<doc>
|
|
||||||
<assembly>
|
|
||||||
<name>
|
|
||||||
CICRadarR
|
|
||||||
</name>
|
|
||||||
</assembly>
|
|
||||||
<members>
|
|
||||||
<member name="P:CICRadarR.My.Resources.Resources.ResourceManager">
|
|
||||||
<summary>
|
|
||||||
Returns the cached ResourceManager instance used by this class.
|
|
||||||
</summary>
|
|
||||||
</member><member name="P:CICRadarR.My.Resources.Resources.Culture">
|
|
||||||
<summary>
|
|
||||||
Overrides the current thread's CurrentUICulture property for all
|
|
||||||
resource lookups using this strongly typed resource class.
|
|
||||||
</summary>
|
|
||||||
</member><member name="T:CICRadarR.My.Resources.Resources">
|
|
||||||
<summary>
|
|
||||||
A strongly-typed resource class, for looking up localized strings, etc.
|
|
||||||
</summary>
|
|
||||||
</member><member name="P:CICRadarR.RADIUSPacket.UserName">
|
|
||||||
<summary>
|
|
||||||
Returns the username supplied in an Access Request. Returns
|
|
||||||
Nothing if a User-Name attribute is missing or the packet is not an
|
|
||||||
Access Request.
|
|
||||||
</summary>
|
|
||||||
<value></value>
|
|
||||||
<returns></returns>
|
|
||||||
<remarks></remarks>
|
|
||||||
</member><member name="P:CICRadarR.RADIUSPacket.UserPassword">
|
|
||||||
<summary>
|
|
||||||
Returns the password supplied in an Access Request. Returns
|
|
||||||
Nothing is a User-Password attribute is missing or the packet is not
|
|
||||||
an Access Request.
|
|
||||||
</summary>
|
|
||||||
<value></value>
|
|
||||||
<returns></returns>
|
|
||||||
<remarks></remarks>
|
|
||||||
</member><member name="M:CICRadarR.RADIUSPacket.AuthenticateAccessRequest(CICRadarR.NASAuthList@,CICRadarR.NASAuthList@)">
|
|
||||||
<summary>
|
|
||||||
Deprecated. User the UserName and UserPassword properties instead.
|
|
||||||
</summary>
|
|
||||||
<param name="authList"></param>
|
|
||||||
<param name="nasList"></param>
|
|
||||||
<returns></returns>
|
|
||||||
<remarks></remarks>
|
|
||||||
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest">
|
|
||||||
<summary>
|
|
||||||
Accept the access request.
|
|
||||||
</summary>
|
|
||||||
<remarks></remarks>
|
|
||||||
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest(CICRadarR.RADIUSAttributes)">
|
|
||||||
<summary>
|
|
||||||
Accept the access request and include the specified attributes in the RADIUS response.
|
|
||||||
</summary>
|
|
||||||
<param name="attributes">The RADIUS attributes to include with the response.</param>
|
|
||||||
<remarks></remarks>
|
|
||||||
</member><member name="M:CICRadarR.RADIUSPacket.RejectAccessRequest">
|
|
||||||
<summary>
|
|
||||||
Reject the access request.
|
|
||||||
</summary>
|
|
||||||
<remarks></remarks>
|
|
||||||
</member>
|
|
||||||
</members>
|
|
||||||
</doc>
|
|
|
@ -1,4 +1,5 @@
|
||||||
Imports System.DirectoryServices
|
Imports System.DirectoryServices
|
||||||
|
Imports RADAR
|
||||||
|
|
||||||
' TODO: I don't use this! It's a leftover, moved out of the way
|
' TODO: I don't use this! It's a leftover, moved out of the way
|
||||||
' from the CICRadarR.vb
|
' from the CICRadarR.vb
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
Imports System.DirectoryServices
|
Imports System.DirectoryServices
|
||||||
|
Imports RADAR
|
||||||
|
|
||||||
Public Class RDSHandler
|
Public Class RDSHandler
|
||||||
|
|
||||||
|
@ -227,7 +228,7 @@ Public Class RDSHandler
|
||||||
attributes.Add(attr)
|
attributes.Add(attr)
|
||||||
attributes.Add(state)
|
attributes.Add(state)
|
||||||
|
|
||||||
mPacket.SendAccessChallenge(attributes)
|
mPacket.SendAccessChallange(attributes)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Function Authenticate() As System.DirectoryServices.SearchResult
|
Private Function Authenticate() As System.DirectoryServices.SearchResult
|
||||||
|
|
1
radar-radius
Submodule
1
radar-radius
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 62c83c7d8c7c6245e9ab13d4c1435dbb5c1ccc11
|
Loading…
Add table
Add a link
Reference in a new issue