[pve-devel] r5491 - in pve-common/trunk/data: . PVE
svn-commits at proxmox.com
svn-commits at proxmox.com
Tue Feb 8 10:53:12 CET 2011
Author: dietmar
Date: 2011-02-08 10:53:11 +0100 (Tue, 08 Feb 2011)
New Revision: 5491
Modified:
pve-common/trunk/data/ChangeLog
pve-common/trunk/data/PVE/INotify.pm
pve-common/trunk/data/PVE/JSONSchema.pm
Log:
Modified: pve-common/trunk/data/ChangeLog
===================================================================
--- pve-common/trunk/data/ChangeLog 2011-02-08 04:48:40 UTC (rev 5490)
+++ pve-common/trunk/data/ChangeLog 2011-02-08 09:53:11 UTC (rev 5491)
@@ -1,3 +1,11 @@
+2011-02-08 Proxmox Support Team <support at proxmox.com>
+
+ * PVE/INotify.pm (update_file): use PVE::Tools, changed interface
+ (update_etc_resolv_conf): do not touch other options (like
+ 'sortlist' and 'options'),
+
+ * PVE/JSONSchema.pm (pve_verify_ipv4): register IPv4 format.
+
2011-02-02 Proxmox Support Team <support at proxmox.com>
* PVE/Tools.pm (next_vnc_port): moved from qemu-server
Modified: pve-common/trunk/data/PVE/INotify.pm
===================================================================
--- pve-common/trunk/data/PVE/INotify.pm 2011-02-08 04:48:40 UTC (rev 5490)
+++ pve-common/trunk/data/PVE/INotify.pm 2011-02-08 09:53:11 UTC (rev 5491)
@@ -10,6 +10,7 @@
use File::Basename;
use Fcntl qw(:DEFAULT :flock);
use PVE::SafeSyslog;
+use PVE::Tools;
use Storable qw(dclone);
use Linux::Inotify2;
use base 'Exporter';
@@ -110,7 +111,7 @@
my $fh = IO::File->new($tmpname, O_WRONLY|O_CREAT, $perm);
die "unable to open file '$tmpname' - $!\n" if !$fh;
- $res = &$writer ($filename, $fh, $data);
+ $res = &$writer($filename, $fh, $data);
die "closing file '$tmpname' failed - $!\n" unless close $fh;
};
@@ -152,40 +153,31 @@
my $lkfn = "$filename.lock";
- if (!open (FLCK, ">>$lkfn")) {
- die "unable to open lock file '$lkfn' - $?";
- }
+ my $timeout = 10;
- if (!flock (FLCK, LOCK_EX)) {
- close (FLCK);
- die "unable to aquire lock for file '$lkfn' - $?";
- }
+ my $fd;
- my $newdata;
+ my $code = sub {
- eval {
+ $fd = IO::File->new ($filename, "r");
+
+ my $new = &$update($filename, $fd, $data, @args);
- my $olddata = read_file ($filename);
-
- if ($data) {
- my $res = &$update ($filename, $olddata, $data, @args);
- if (defined ($res)) {
- $newdata = write_file ($filename, $res);
- } else {
- $newdata = $olddata;
- }
+ if (defined($new)) {
+ PVE::Tools::file_set_contents($filename, $new, $ccinfo->{perm});
} else {
- $newdata = $olddata;
+ unlink $filename;
}
};
+ PVE::Tools::lock_file($lkfn, $timeout, "update_file", $code);
my $err = $@;
- close (FLCK);
+ close($fd) if defined($fd);
die $err if $err;
- return $newdata;
+ return undef;
}
sub discard_changes {
@@ -264,7 +256,7 @@
$diff = ccache_compute_diff ($filename, $shadow);
}
- my $res = &$parser ($filename, $fd);
+ my $res = &$parser($filename, $fd);
if (!$ccinfo->{nocache}) {
$ccinfo->{version} = $cver;
@@ -538,43 +530,50 @@
my $res = {};
+ my $nscount = 0;
while (my $line = <$fh>) {
chomp $line;
- if ($line =~ m/^search\s+(\S+)\s*/) {
- $res->{search} = $1;
+ if ($line =~ m/^(search|domain)\s+(\S+)\s*/) {
+ $res->{search} = $2;
} elsif ($line =~ m/^nameserver\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*/) {
- push @{$res->{nameservers}}, $1;
+ $nscount++;
+ if ($nscount <= 3) {
+ $res->{"dns$nscount"} = $1;
+ }
}
}
return $res;
}
-sub write_etc_resolv_conf {
- my ($filename, $fh, $resolv) = @_;
+sub update_etc_resolv_conf {
+ my ($filename, $fh, $resolv, @args) = @_;
- my $data = "search $resolv->{search}\n";
+ my $data = "";
- my $written = {};
- my $nslist = [];
+ $data = "search $resolv->{search}\n"
+ if $resolv->{search};
- foreach my $ns (@{$resolv->{nameservers}}) {
- if ($ns ne '0.0.0.0' && !$written->{$ns}) {
+ my $written = {};
+ foreach my $k ("dns1", "dns2", "dns3") {
+ my $ns = $resolv->{$k};
+ if ($ns && $ns ne '0.0.0.0' && !$written->{$ns}) {
$written->{$ns} = 1;
$data .= "nameserver $ns\n";
- push @$nslist, $ns;
}
}
- die "write failed: $!" unless print $fh $data;
-
- $resolv->{nameservers} = $nslist;
- return $resolv;
+ while (my $line = <$fh>) {
+ next if $line =~ m/^(search|domain|nameserver)\s+/;
+ $data .= $line
+ }
+
+ return $data;
}
register_file ('resolvconf', "/etc/resolv.conf",
- \&read_etc_resolv_conf,
- \&write_etc_resolv_conf);
+ \&read_etc_resolv_conf, undef,
+ \&update_etc_resolv_conf);
Modified: pve-common/trunk/data/PVE/JSONSchema.pm
===================================================================
--- pve-common/trunk/data/PVE/JSONSchema.pm 2011-02-08 04:48:40 UTC (rev 5490)
+++ pve-common/trunk/data/PVE/JSONSchema.pm 2011-02-08 09:53:11 UTC (rev 5491)
@@ -106,6 +106,20 @@
return $node;
}
+register_format('ipv4', \&pve_verify_ipv4);
+sub pve_verify_ipv4 {
+ my ($ipv4, $noerr) = @_;
+
+ if ($ipv4 !~ m/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ ||
+ !(($1 > 0) && ($1 < 255) &&
+ ($2 <= 255) && ($3 <= 255) &&
+ ($4 > 0) && ($4 < 255))) {
+ return undef if $noerr;
+ die "value does not look like a valid IP address\n";
+ }
+ return $ipv4;
+}
+
sub check_format {
my ($format, $value) = @_;
More information about the pve-devel
mailing list