diff options
| author | David M. Syzdek <syzdek@bindlebinaries.com> | 2019-05-14 12:23:17 -0800 |
|---|---|---|
| committer | David M. Syzdek <syzdek@bindlebinaries.com> | 2019-05-14 12:23:17 -0800 |
| commit | e8e3fbe71941f28b0e94d2c8ed1382df4be86cf6 (patch) | |
| tree | 415900e52f1ff482f8a3541df93e3fabe021318b /notes/projects/radius/sql/ippool-functions.sql | |
| parent | b9b38cac5e2e41326de396164c8422d946817ef0 (diff) | |
| download | scratchpad-e8e3fbe71941f28b0e94d2c8ed1382df4be86cf6.tar.gz scratchpad-e8e3fbe71941f28b0e94d2c8ed1382df4be86cf6.tar.bz2 scratchpad-e8e3fbe71941f28b0e94d2c8ed1382df4be86cf6.tar.xz scratchpad-e8e3fbe71941f28b0e94d2c8ed1382df4be86cf6.zip | |
Fixing ip assignment tallies
Diffstat (limited to 'notes/projects/radius/sql/ippool-functions.sql')
| -rw-r--r-- | notes/projects/radius/sql/ippool-functions.sql | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/notes/projects/radius/sql/ippool-functions.sql b/notes/projects/radius/sql/ippool-functions.sql index bbfd60f..a879cf3 100644 --- a/notes/projects/radius/sql/ippool-functions.sql +++ b/notes/projects/radius/sql/ippool-functions.sql | |||
| @@ -169,7 +169,7 @@ BEGIN | |||
| 169 | END IF; | 169 | END IF; |
| 170 | 170 | ||
| 171 | -- tallies existing sessions | 171 | -- tallies existing sessions |
| 172 | SELECT count(id) | 172 | SELECT count( address ) AS ipCount |
| 173 | INTO assignPortCount | 173 | INTO assignPortCount |
| 174 | FROM ip | 174 | FROM ip |
| 175 | WHERE ip.username LIKE assignUser | 175 | WHERE ip.username LIKE assignUser |
| @@ -181,10 +181,10 @@ BEGIN | |||
| 181 | 181 | ||
| 182 | -- verifies IP address is not inactive | 182 | -- verifies IP address is not inactive |
| 183 | IF ( assignForce = FALSE ) THEN | 183 | IF ( assignForce = FALSE ) THEN |
| 184 | SELECT network | 184 | PERFORM network |
| 185 | FROM netblock | 185 | FROM netblock |
| 186 | WHERE netblock.network >>= assignIp | 186 | WHERE netblock.network >>= assignIp |
| 187 | AND netblock.active IS FALSE; | 187 | AND netblock.active = FALSE; |
| 188 | IF FOUND THEN | 188 | IF FOUND THEN |
| 189 | RETURN FALSE; | 189 | RETURN FALSE; |
| 190 | END IF; | 190 | END IF; |
| @@ -265,7 +265,7 @@ CREATE OR REPLACE FUNCTION ip_autoassign | |||
| 265 | assignUser TEXT, | 265 | assignUser TEXT, |
| 266 | assignNas TEXT, | 266 | assignNas TEXT, |
| 267 | assignPool TEXT, | 267 | assignPool TEXT, |
| 268 | assignPortLimit INTEGER, DEFAULT 2, | 268 | assignPortLimit INTEGER DEFAULT 2, |
| 269 | assignSess TEXT DEFAULT NULL, | 269 | assignSess TEXT DEFAULT NULL, |
| 270 | assignPrevIp BOOLEAN DEFAULT TRUE | 270 | assignPrevIp BOOLEAN DEFAULT TRUE |
| 271 | ) | 271 | ) |
| @@ -276,6 +276,7 @@ CREATE OR REPLACE FUNCTION ip_autoassign | |||
| 276 | DECLARE | 276 | DECLARE |
| 277 | assignedIp INET; | 277 | assignedIp INET; |
| 278 | assignNasId INTEGER; | 278 | assignNasId INTEGER; |
| 279 | assignPortCount INTEGER; | ||
| 279 | BEGIN | 280 | BEGIN |
| 280 | 281 | ||
| 281 | -- sets defaults | 282 | -- sets defaults |
| @@ -283,6 +284,17 @@ BEGIN | |||
| 283 | assignSess := 'user:' || assignUser; | 284 | assignSess := 'user:' || assignUser; |
| 284 | END IF; | 285 | END IF; |
| 285 | 286 | ||
| 287 | -- tallies existing sessions | ||
| 288 | SELECT count( address ) | ||
| 289 | INTO assignPortCount | ||
| 290 | FROM ip | ||
| 291 | WHERE ip.username LIKE assignUser | ||
| 292 | AND ip.nasId IS NOT NULL | ||
| 293 | AND ip.address != assignIp; | ||
| 294 | IF ( assignPortCount >= assignPortLimit ) THEN | ||
| 295 | RETURN NULL; | ||
| 296 | END IF; | ||
| 297 | |||
| 286 | -- search for user's previous address | 298 | -- search for user's previous address |
| 287 | IF ( assignPrevIp IS TRUE ) THEN | 299 | IF ( assignPrevIp IS TRUE ) THEN |
| 288 | SELECT ip.address, | 300 | SELECT ip.address, |
