From 902d15046334045b5f24c2d9e179b3db6e1ee3f4 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 11 Apr 2012 13:23:07 -0700 Subject: [PATCH] don't override manually entered IP address with auto-assignment, #17163 --- FS/FS/svc_broadband.pm | 9 +++++- httemplate/edit/process/svc_broadband.cgi | 6 ++-- httemplate/elements/tr-select-router_block_ip.html | 33 ++++++++++++++-------- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/FS/FS/svc_broadband.pm b/FS/FS/svc_broadband.pm index 2b6be2c6c..64cc3770e 100755 --- a/FS/FS/svc_broadband.pm +++ b/FS/FS/svc_broadband.pm @@ -428,7 +428,8 @@ sub check { } else { my $addr_block = $self->addr_block; - unless ( $addr_block and $addr_block->manual_flag ) { + if ( $self->ip_addr eq '' + and not ( $addr_block and $addr_block->manual_flag ) ) { my $error = $self->assign_ip_addr; return $error if $error; } @@ -525,6 +526,12 @@ sub _check_ip_addr { else { return 'Cannot parse address: '.$self->ip_addr unless $self->NetAddr; } + + if ( $self->addr_block + and not $self->addr_block->NetAddr->contains($self->NetAddr) ) { + return 'Address '.$self->ip_addr.' not in block '.$self->addr_block->cidr; + } + # if (my $dup = qsearchs('svc_broadband', { # ip_addr => $self->ip_addr, # svcnum => {op=>'!=', value => $self->svcnum} diff --git a/httemplate/edit/process/svc_broadband.cgi b/httemplate/edit/process/svc_broadband.cgi index 31def255c..90eab4aad 100644 --- a/httemplate/edit/process/svc_broadband.cgi +++ b/httemplate/edit/process/svc_broadband.cgi @@ -13,9 +13,9 @@ die "access denied" sub precheck { my $cgi = shift; - if ( !defined($cgi->param('ip_addr')) ) { - $cgi->param('ip_addr', $cgi->param('prev_ip_addr') || ''); - } + my $ip_addr = $cgi->param('ip_addr'); + $ip_addr =~ s/[^\d\.]//g; # converts '(automatic)' to null + $cgi->param('ip_addr', $ip_addr); $cgi->param("usergroup", [ $cgi->param('usergroup') ]); '' } diff --git a/httemplate/elements/tr-select-router_block_ip.html b/httemplate/elements/tr-select-router_block_ip.html index ed8fe810f..95d1787b8 100644 --- a/httemplate/elements/tr-select-router_block_ip.html +++ b/httemplate/elements/tr-select-router_block_ip.html @@ -1,23 +1,34 @@ <& /elements/tr-td-label.html, label => ($opt{'label'} || 'Router') &> @@ -27,7 +38,7 @@ function lock_ip_addr(obj, i) { records => \@routers, name_col => 'routername', value_col => 'routernum', - onchange => 'lock_ip_addr', + onchange => 'update_ip_addr', curr_value=> $opt{'routernum'}, }, { @@ -39,6 +50,7 @@ function lock_ip_addr(obj, i) { name_col => 'cidr', link_col => 'routernum', empty_label => '(any)', + onchange => 'update_ip_addr', curr_value => $opt{'blocknum'}, }, ] @@ -52,12 +64,11 @@ function lock_ip_addr(obj, i) { % } % else { + value="<% $opt{'ip_addr'} |h%>" onfocus="clearhint_ip_addr(this)"> % } - <%init> -- 2.11.0