1# CIDRMATCH.RC 2# 3# File created 7/12/2005 -GE 4# Last Updated: 4/03/2010 5 6# CIDR (Classless Inter-Domain Routing) 7# 8# Generate partial regexp patterns for every possible IPv4 NETWORK/CIDR 9# pattern from /8 to /32 related to the IPv4 address we are looking at. 10# 11# This file is written entirely in procmail. Yes, I know it's re-inventing the wheel 12# however this may be the only way to ensure maximum backward compatability with 13# the various older operating systems using the SpamBouncer. -GE 14 15:0 16* ! LOCALIP ?? ^000\.000\.000\.000$ 17{ 18 Q1A=${QUAD2} 19 20 # Bit7 21 :0 22 * 1^0 23 * $ ${Q1A}^0 24 * -128^0 25 { 26 BIT7=128 27 Q1A=$= 28 :0 29 * $ ${Q1A}^0 30 * -1^0 31 { Q1A=$= } 32 :0 E 33 { Q1A=0 } 34 } 35 :0 E 36 { BIT7=0 } 37 38 # Bit6 39 :0 40 * 1^0 41 * $ ${Q1A}^0 42 * -64^0 43 { 44 BIT6=64 45 Q1A=$= 46 :0 47 * $ ${Q1A}^0 48 * -1^0 49 { Q1A=$= } 50 :0 E 51 { Q1A=0 } 52 } 53 :0 E 54 { BIT6=0 } 55 56 # Bit5 57 :0 58 * 1^0 59 * $ ${Q1A}^0 60 * -32^0 61 { 62 BIT5=32 63 Q1A=$= 64 :0 65 * $ ${Q1A}^0 66 * -1^0 67 { Q1A=$= } 68 :0 E 69 { Q1A=0 } 70 } 71 :0 E 72 { BIT5=0 } 73 74 # Bit4 75 :0 76 * 1^0 77 * $ ${Q1A}^0 78 * -16^0 79 { 80 BIT4=16 81 Q1A=$= 82 :0 83 * $ ${Q1A}^0 84 * -1^0 85 { Q1A=$= } 86 :0 E 87 { Q1A=0 } 88 } 89 :0 E 90 { BIT4=0 } 91 92 # Bit3 93 :0 94 * 1^0 95 * $ ${Q1A}^0 96 * -8^0 97 { 98 BIT3=8 99 Q1A=$= 100 :0 101 * $ ${Q1A}^0 102 * -1^0 103 { Q1A=$= } 104 :0 E 105 { Q1A=0 } 106 } 107 :0 E 108 { BIT3=0 } 109 110 # Bit2 111 :0 112 * 1^0 113 * $ ${Q1A}^0 114 * -4^0 115 { 116 BIT2=4 117 Q1A=$= 118 :0 119 * $ ${Q1A}^0 120 * -1^0 121 { Q1A=$= } 122 :0 E 123 { Q1A=0 } 124 } 125 :0 E 126 { BIT2=0 } 127 128 # Bit1 129 :0 130 * 1^0 131 * $ ${Q1A}^0 132 * -2^0 133 { 134 BIT1=2 135 Q1A=$= 136 :0 137 * $ ${Q1A}^0 138 * -1^0 139 { Q1A=$= } 140 :0 E 141 { Q1A=0 } 142 } 143 :0 E 144 { BIT1=0 } 145 146 # Bit0 is implied 147 148 # CIDR8 149 CIDR8="${QUAD1}\.0\.0\.0/8" 150 151 # CIDR9 152 :0 153 * $ ${BIT7}^0 154 { 155 CIDRT=$= 156 CIDR9="${QUAD1}\.${CIDRT}\.0\.0/9" 157 } 158 :0 E 159 { CIDR9="${QUAD1}\.0\.0\.0/9" } 160 161 # CIDR10 162 :0 163 * $ ${BIT7}^0 164 * $ ${BIT6}^0 165 { 166 CIDRT=$= 167 CIDR10="${QUAD1}\.${CIDRT}\.0\.0/10" 168 } 169 :0 E 170 { CIDR10="${QUAD1}\.0\.0\.0/10" } 171 172 # CIDR11 173 :0 174 * $ ${BIT7}^0 175 * $ ${BIT6}^0 176 * $ ${BIT5}^0 177 { 178 CIDRT=$= 179 CIDR11="${QUAD1}\.${CIDRT}\.0\.0/11" 180 } 181 :0 E 182 { CIDR11="${QUAD1}\.0\.0\.0/11" } 183 184 185 # CIDR12 186 :0 187 * $ ${BIT7}^0 188 * $ ${BIT6}^0 189 * $ ${BIT5}^0 190 * $ ${BIT4}^0 191 { 192 CIDRT=$= 193 CIDR12="${QUAD1}\.${CIDRT}\.0\.0/12" 194 } 195 :0 E 196 { CIDR12="${QUAD1}\.0\.0\.0/12" } 197 198 # CIDR13 199 :0 200 * $ ${BIT7}^0 201 * $ ${BIT6}^0 202 * $ ${BIT5}^0 203 * $ ${BIT4}^0 204 * $ ${BIT3}^0 205 { 206 CIDRT=$= 207 CIDR13="${QUAD1}\.${CIDRT}\.0\.0/13" 208 } 209 :0 E 210 { CIDR13="${QUAD1}\.0\.0\.0/13" } 211 212 # CIDR14 213 :0 214 * $ ${BIT7}^0 215 * $ ${BIT6}^0 216 * $ ${BIT5}^0 217 * $ ${BIT4}^0 218 * $ ${BIT3}^0 219 * $ ${BIT2}^0 220 { 221 CIDRT=$= 222 CIDR14="${QUAD1}\.${CIDRT}\.0\.0/14" 223 } 224 :0 E 225 { CIDR14="${QUAD1}\.0\.0\.0/14" } 226 227 # CIDR15 228 :0 229 * $ ${BIT7}^0 230 * $ ${BIT6}^0 231 * $ ${BIT5}^0 232 * $ ${BIT4}^0 233 * $ ${BIT3}^0 234 * $ ${BIT2}^0 235 * $ ${BIT1}^0 236 { 237 CIDRT=$= 238 CIDR15="${QUAD1}\.${CIDRT}\.0\.0/15" 239 } 240 :0 E 241 { CIDR15="${QUAD1}\.0\.0\.0/15" } 242 243 # CIDR16 244 CIDR16="${QUAD1}\.${QUAD2}\.0\.0/16" 245 246 Q1A=${QUAD3} 247 248 # Bit7 249 :0 250 * 1^0 251 * $ ${Q1A}^0 252 * -128^0 253 { 254 BIT7=128 255 Q1A=$= 256 :0 257 * $ ${Q1A}^0 258 * -1^0 259 { Q1A=$= } 260 :0 E 261 { Q1A=0 } 262 } 263 :0 E 264 { BIT7=0 } 265 266 # Bit6 267 :0 268 * 1^0 269 * $ ${Q1A}^0 270 * -64^0 271 { 272 BIT6=64 273 Q1A=$= 274 :0 275 * $ ${Q1A}^0 276 * -1^0 277 { Q1A=$= } 278 :0 E 279 { Q1A=0 } 280 } 281 :0 E 282 { BIT6=0 } 283 284 # Bit5 285 :0 286 * 1^0 287 * $ ${Q1A}^0 288 * -32^0 289 { 290 BIT5=32 291 Q1A=$= 292 :0 293 * $ ${Q1A}^0 294 * -1^0 295 { Q1A=$= } 296 :0 E 297 { Q1A=0 } 298 } 299 :0 E 300 { BIT5=0 } 301 302 # Bit4 303 :0 304 * 1^0 305 * $ ${Q1A}^0 306 * -16^0 307 { 308 BIT4=16 309 Q1A=$= 310 :0 311 * $ ${Q1A}^0 312 * -1^0 313 { Q1A=$= } 314 :0 E 315 { Q1A=0 } 316 } 317 :0 E 318 { BIT4=0 } 319 320 # Bit3 321 :0 322 * 1^0 323 * $ ${Q1A}^0 324 * -8^0 325 { 326 BIT3=8 327 Q1A=$= 328 :0 329 * $ ${Q1A}^0 330 * -1^0 331 { Q1A=$= } 332 :0 E 333 { Q1A=0 } 334 } 335 :0 E 336 { BIT3=0 } 337 338 # Bit2 339 :0 340 * 1^0 341 * $ ${Q1A}^0 342 * -4^0 343 { 344 BIT2=4 345 Q1A=$= 346 :0 347 * $ ${Q1A}^0 348 * -1^0 349 { Q1A=$= } 350 :0 E 351 { Q1A=0 } 352 } 353 :0 E 354 { BIT2=0 } 355 356 # Bit1 357 :0 358 * 1^0 359 * $ ${Q1A}^0 360 * -2^0 361 { 362 BIT1=2 363 Q1A=$= 364 :0 365 * $ ${Q1A}^0 366 * -1^0 367 { Q1A=$= } 368 :0 E 369 { Q1A=0 } 370 } 371 :0 E 372 { BIT1=0 } 373 374 # Bit0 is implied 375 376 # CIDR17 377 :0 378 * $ ${BIT7}^0 379 { 380 CIDRT=$= 381 CIDR17="${QUAD1}\.${QUAD2}\.${CIDRT}\.0/17" 382 } 383 :0 E 384 { CIDR17="${QUAD1}\.${QUAD2}\.0\.0/17" } 385 386 # CIDR18 387 :0 388 * $ ${BIT7}^0 389 * $ ${BIT6}^0 390 { 391 CIDRT=$= 392 CIDR18="${QUAD1}\.${QUAD2}\.${CIDRT}\.0/18" 393 } 394 :0 E 395 { CIDR18="${QUAD1}\.${QUAD2}\.0\.0/18" } 396 397 # CIDR19 398 :0 399 * $ ${BIT7}^0 400 * $ ${BIT6}^0 401 * $ ${BIT5}^0 402 { 403 CIDRT=$= 404 CIDR19="${QUAD1}\.${QUAD2}\.${CIDRT}\.0/19" 405 } 406 :0 E 407 { CIDR19="${QUAD1}\.${QUAD2}\.0\.0/19" } 408 409 410 # CIDR20 411 :0 412 * $ ${BIT7}^0 413 * $ ${BIT6}^0 414 * $ ${BIT5}^0 415 * $ ${BIT4}^0 416 { 417 CIDRT=$= 418 CIDR20="${QUAD1}\.${QUAD2}\.${CIDRT}\.0/20" 419 } 420 :0 E 421 { CIDR20="${QUAD1}\.${QUAD2}\.0\.0/20" } 422 423 # CIDR21 424 :0 425 * $ ${BIT7}^0 426 * $ ${BIT6}^0 427 * $ ${BIT5}^0 428 * $ ${BIT4}^0 429 * $ ${BIT3}^0 430 { 431 CIDRT=$= 432 CIDR21="${QUAD1}\.${QUAD2}\.${CIDRT}\.0/21" 433 } 434 :0 E 435 { CIDR21="${QUAD1}\.${QUAD2}\.0\.0/21" } 436 437 # CIDR22 438 :0 439 * $ ${BIT7}^0 440 * $ ${BIT6}^0 441 * $ ${BIT5}^0 442 * $ ${BIT4}^0 443 * $ ${BIT3}^0 444 * $ ${BIT2}^0 445 { 446 CIDRT=$= 447 CIDR22="${QUAD1}\.${QUAD2}\.${CIDRT}\.0/22" 448 } 449 :0 E 450 { CIDR22="${QUAD1}\.${QUAD2}\.0\.0/22" } 451 452 # CIDR23 453 :0 454 * $ ${BIT7}^0 455 * $ ${BIT6}^0 456 * $ ${BIT5}^0 457 * $ ${BIT4}^0 458 * $ ${BIT3}^0 459 * $ ${BIT2}^0 460 * $ ${BIT1}^0 461 { 462 CIDRT=$= 463 CIDR23="${QUAD1}\.${QUAD2}\.${CIDRT}\.0/23" 464 } 465 :0 E 466 { CIDR23="${QUAD1}\.${QUAD2}\.0\.0/23" } 467 468 # CIDR24 469 CIDR24="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/24" 470 471 Q1A=${QUAD4} 472 473 # Bit7 474 :0 475 * 1^0 476 * $ ${Q1A}^0 477 * -128^0 478 { 479 BIT7=128 480 Q1A=$= 481 :0 482 * $ ${Q1A}^0 483 * -1^0 484 { Q1A=$= } 485 :0 E 486 { Q1A=0 } 487 } 488 :0 E 489 { BIT7=0 } 490 491 # Bit6 492 :0 493 * 1^0 494 * $ ${Q1A}^0 495 * -64^0 496 { 497 BIT6=64 498 Q1A=$= 499 :0 500 * $ ${Q1A}^0 501 * -1^0 502 { Q1A=$= } 503 :0 E 504 { Q1A=0 } 505 } 506 :0 E 507 { BIT6=0 } 508 509 # Bit5 510 :0 511 * 1^0 512 * $ ${Q1A}^0 513 * -32^0 514 { 515 BIT5=32 516 Q1A=$= 517 :0 518 * $ ${Q1A}^0 519 * -1^0 520 { Q1A=$= } 521 :0 E 522 { Q1A=0 } 523 } 524 :0 E 525 { BIT5=0 } 526 527 # Bit4 528 :0 529 * 1^0 530 * $ ${Q1A}^0 531 * -16^0 532 { 533 BIT4=16 534 Q1A=$= 535 :0 536 * $ ${Q1A}^0 537 * -1^0 538 { Q1A=$= } 539 :0 E 540 { Q1A=0 } 541 } 542 :0 E 543 { BIT4=0 } 544 545 # Bit3 546 :0 547 * 1^0 548 * $ ${Q1A}^0 549 * -8^0 550 { 551 BIT3=8 552 Q1A=$= 553 :0 554 * $ ${Q1A}^0 555 * -1^0 556 { Q1A=$= } 557 :0 E 558 { Q1A=0 } 559 } 560 :0 E 561 { BIT3=0 } 562 563 # Bit2 564 :0 565 * 1^0 566 * $ ${Q1A}^0 567 * -4^0 568 { 569 BIT2=4 570 Q1A=$= 571 :0 572 * $ ${Q1A}^0 573 * -1^0 574 { Q1A=$= } 575 :0 E 576 { Q1A=0 } 577 } 578 :0 E 579 { BIT2=0 } 580 581 # Bit1 582 :0 583 * 1^0 584 * $ ${Q1A}^0 585 * -2^0 586 { 587 BIT1=2 588 Q1A=$= 589 :0 590 * $ ${Q1A}^0 591 * -1^0 592 { Q1A=$= } 593 :0 E 594 { Q1A=0 } 595 } 596 :0 E 597 { BIT1=0 } 598 599 # Bit0 is implied 600 601 # CIDR25 602 :0 603 * $ ${BIT7}^0 604 { 605 CIDRT=$= 606 CIDR25="${QUAD1}\.${QUAD2}\.${QUAD3}\.${CIDRT}/25" 607 } 608 :0 E 609 { CIDR25="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/25" } 610 611 # CIDR26 612 :0 613 * $ ${BIT7}^0 614 * $ ${BIT6}^0 615 { 616 CIDRT=$= 617 CIDR26="${QUAD1}\.${QUAD2}\.${QUAD3}\.${CIDRT}/26" 618 } 619 :0 E 620 { CIDR26="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/26" } 621 622 # CIDR27 623 :0 624 * $ ${BIT7}^0 625 * $ ${BIT6}^0 626 * $ ${BIT5}^0 627 { 628 CIDRT=$= 629 CIDR27="${QUAD1}\.${QUAD2}\.${QUAD3}\.${CIDRT}/27" 630 } 631 :0 E 632 { CIDR27="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/27" } 633 634 635 # CIDR28 636 :0 637 * $ ${BIT7}^0 638 * $ ${BIT6}^0 639 * $ ${BIT5}^0 640 * $ ${BIT4}^0 641 { 642 CIDRT=$= 643 CIDR28="${QUAD1}\.${QUAD2}\.${QUAD3}\.${CIDRT}/28" 644 } 645 :0 E 646 { CIDR28="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/28" } 647 648 # CIDR29 649 :0 650 * $ ${BIT7}^0 651 * $ ${BIT6}^0 652 * $ ${BIT5}^0 653 * $ ${BIT4}^0 654 * $ ${BIT3}^0 655 { 656 CIDRT=$= 657 CIDR29="${QUAD1}\.${QUAD2}\.${QUAD3}\.${CIDRT}/29" 658 } 659 :0 E 660 { CIDR29="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/29" } 661 662 # CIDR30 663 :0 664 * $ ${BIT7}^0 665 * $ ${BIT6}^0 666 * $ ${BIT5}^0 667 * $ ${BIT4}^0 668 * $ ${BIT3}^0 669 * $ ${BIT2}^0 670 { 671 CIDRT=$= 672 CIDR30="${QUAD1}\.${QUAD2}\.${QUAD3}\.${CIDRT}/30" 673 } 674 :0 E 675 { CIDR30="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/30" } 676 677 # CIDR31 678 :0 679 * $ ${BIT7}^0 680 * $ ${BIT6}^0 681 * $ ${BIT5}^0 682 * $ ${BIT4}^0 683 * $ ${BIT3}^0 684 * $ ${BIT2}^0 685 * $ ${BIT1}^0 686 { 687 CIDRT=$= 688 CIDR31="${QUAD1}\.${QUAD2}\.${QUAD3}\.${CIDRT}/31" 689 } 690 :0 E 691 { CIDR31="${QUAD1}\.${QUAD2}\.${QUAD3}\.0/31" } 692 693 # CIDR32 694 CIDR32="${QUAD1}\.${QUAD2}\.${QUAD3}\.${QUAD4}(/32)?" 695 696 LOCALIPREGEXP="^(${CIDR8}|${CIDR9}|${CIDR10}|${CIDR11}|${CIDR12}|${CIDR13}|${CIDR14}|${CIDR15}|${CIDR16}|${CIDR17}|${CIDR18}|${CIDR19}|${CIDR20}|${CIDR21}|${CIDR22}|${CIDR23}|${CIDR24}|${CIDR25}|${CIDR26}|${CIDR27}|${CIDR28}|${CIDR29}|${CIDR30}|${CIDR31}|${CIDR32})$" 697 698 SBLOG="L9-functions/cidrmatch.rc: Debug: LOCALIP=${LOCALIP}" 699 INCLUDERC=${SBDIR}/functions/loglevel.rc 700 SBLOG="L9-functions/cidrmatch.rc: Debug: LOCALIPREGEXP=${LOCALIPREGEXP}" 701 INCLUDERC=${SBDIR}/functions/loglevel.rc 702} 703:0 E 704{ 705 SBLOG="L8-functions/cidrmatch.rc: Debug: LOCALIP=${LOCALIP} Setting LOCALIPREGEXP='NULL'" 706 INCLUDERC=${SBDIR}/functions/loglevel.rc 707 LOCALIPREGEXP='NULL' 708} 709