- Timestamp:
- 08/11/17 17:43:47 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cgi-bin/search-rpc.cgi
r903 r905 143 143 _commoncheck(\%args, 'n'); 144 144 145 my $sql = q(SELECT s.cidr,s.custid,s.type,s.description,a.dispname FROM searchme s JOIN alloctypes a ON s.type = a.type);146 147 145 my @fields; 148 146 my @vals; … … 150 148 151 149 my %mt = (EXACT => '=', 150 EQUAL => '=', 152 151 NOT => '!~', 152 # CIDR options 153 MASK => 'MASK', 154 WITHIN => '<<=', 155 CONTAINS => '>>=', 153 156 ); 154 157 … … 158 161 push @matchtypes, '='; 159 162 } 163 164 ## CIDR query options. 160 165 if ($args{cidr}) { 161 # Magic! 162 } 166 $args{cidr} =~ s/^\s*(.+)\s*$/$1/g; 167 # strip matching type substring, if any - only applies to full-CIDR 168 my ($mnote) = $args{cidr} =~ /^(\w+):/; 169 $args{cidr} =~ s/^$mnote:// if $mnote; 170 171 if ($args{cidr} eq '') { # We has a blank CIDR. Ignore it. 172 } elsif ($args{cidr} =~ /\//) { 173 my ($net,$maskbits) = split /\//, $args{cidr}; 174 if ($args{cidr} =~ /^(\d{1,3}\.){3}\d{1,3}\/\d{2}$/) { 175 # Full CIDR match. 176 push @fields, 's.cidr'; 177 push @vals, $args{cidr}; 178 if ($mnote =~ /(EQUAL|EXACT|CONTAINS|WITHIN)/) { 179 push @matchtypes, $mt{$1}; 180 } else { # default to exact match 181 push @matchtypes, '='; 182 } 183 } elsif ($args{cidr} =~ /^(\d{1,3}\.){2}\d{1,3}\/\d{2}$/) { 184 # Partial match; beginning of subnet and maskbits are provided 185 # Show any blocks with the leading octet(s) and that masklength 186 # eg 192.168.179/26 should show all /26 subnets in 192.168.179 187 # Need some more magic for bare /nn searches: 188 push @fields, 's.cidr','masklen(s.cidr)'; 189 push @vals, "$net.0/24", $maskbits; 190 push @matchtypes, '<<=','='; 191 } 192 } elsif ($args{cidr} =~ /^(\d{1,3}\.){3}\d{1,3}$/) { 193 # Specific IP address match. Will show the parent chain down to the final allocation. 194 push @fields, 's.cidr'; 195 push @vals, $args{cidr}; 196 push @matchtypes, '>>='; 197 } elsif ($args{cidr} =~ /^\d{1,3}(\.(\d{1,3}(\.(\d{1,3}\.?)?)?)?)?$/) { 198 # 1, 2, or 3 leading octets in CIDR 199 push @fields, 'text(s.cidr)'; 200 push @vals, "$args{cidr}\%"; 201 push @matchtypes, 'LIKE'; # hmm 202 } else { 203 # do nothing. 204 ##fixme we'll ignore this to clear out the references to legacy code. 205 } # done with CIDR query options. 206 207 } # args{cidr} 208 163 209 foreach (qw(custid description notes city) ) { 164 210 if ($args{$_}) { … … 166 212 if ($args{$_} =~ /^(EXACT|NOT):/) { 167 213 push @matchtypes, $mt{$1}; 168 $args{$_} =~ s/^ (?:EXACT|NOT)://;214 $args{$_} =~ s/^$1://; 169 215 } else { 170 216 push @matchtypes, '~*'; … … 174 220 } 175 221 222 my $sql = q(SELECT s.cidr,s.custid,s.type,s.description,s.city,a.dispname FROM searchme s JOIN alloctypes a ON s.type = a.type); 176 223 my @sqlcriteria; 177 224 for (my $i = 0; $i <= $#fields; $i++) { … … 185 232 return $result; 186 233 } # rpc_search() 187
Note:
See TracChangeset
for help on using the changeset viewer.