#! /usr/bin/perl -i =head1 NAME netswap.pl =head1 AUTHOR Daniel Kelemen =head1 SYNOPSIS netswap.pl [FILENAME]- Scan the configuration file and setup local networking parameters based upon contents. nconf files should be of form: hostname: foo domainname: bar.com ip: 192.168.16.42 subnetmask: 255.255.0.0 gateway: 192.168.1.1 dns: 192.168.2.1 =head1 DESCRIPTION Switch local network parameters =cut my $line = my $param_name = my $param_val = ""; my $filename = shift || die "Usage: netswap.pl CONFILENAME\n"; open(FH,"$filename") || die "Could not open network configuration file: [$filename] for reading.\n"; while(){ $line = $_; next unless ($line !~ m/^\s*$/) or ($line !~ m/^\s*\#/); $line =~ m/^(.*):(.*)$/; $param_name = $1; $param_val = $2; $param_name =~ s/^\s*//g; $param_name =~ s/\s*$//g; $param_val =~ s/^\s*//g; $param_val =~ s/\s.*$//g; ${$param_name} = $param_val; } close FH; print "new hostname = [$hostname]\nnew domainname = [$domainname]\nnew ip = [$ip]\nnew Subnet Mask = [$subnetmask]\nnew DNS = [$dns]\nnew gateway = [$gateway]\n"; # We do /etc/hosts: my %pass = ("^.*$hostname.*" => "$ip\t$hostname.$domainname\t$hostname"); # Replace the whole line for this hostname. file_edit("/etc/hosts",\%pass); # We do /etc/sysconfig/network: %pass = ("^GATEWAY.*" => "GATEWAY=\"$gateway\"","^HOSTNAME.*" => "HOSTNAME=\"$hostname\"","^DOMAINNAME.*" => "DOMAINNAME=\"$domainname\""); file_edit("/etc/sysconfig/network",\%pass); # We do /etc/sysconfig/network-scripts/ifcfg-eth0; %pass = ("^IPADDR.*" => "IPADDR=\"$ip\"","^NETMASK.*" => "NETMASK=\"$subnetmask\""); file_edit("/etc/sysconfig/network-scripts/ifcfg-eth0",\%pass); # We do the /etc/resolv.conf: %pass = ("^nameserver.*" => "nameserver $dns","^SEARCH.*" => "SEARCH $domainname"); file_edit("/etc/resolv.conf",\%pass); `/etc/init.d/network restart`; # FIN ########################file_edit################### =head1 file_edit(@) accepts: list containing filename to edit as first item, hash reference as second item. Hash should contain search expressions as keys, replacement expressions as values. eg. file_edit("/etc/hosts",(foo => bar)); will replace all occurrences of 'foo' with 'bar' in /etc/hosts. =cut sub file_edit(@) { my $filename = shift; my $hash_ref = shift; my %lines = %$hash_ref; die "File [$filename] cannot be found!\n" unless (-e $filename); @ARGV = ($filename); # put the filename where perl can find it. while(<>){ $line = $_; foreach $search (keys %lines){ if ($line =~ m/$search/i) { # not sure about insensitivity here. $line =~ s/$search/$lines{$search}/ig; } } print $line; } # End while line read for file } # End file_edit.