]> git.proxmox.com Git - pve-common.git/blobdiff - data/PVE/INotify.pm
add parser for "/etc/apt/auth.conf"
[pve-common.git] / data / PVE / INotify.pm
index 850668a0d730bfc3e83a8413b76466cd0e6ced6c..f18a10bb9a3533555e0b1389e1bedf2f818a019c 100644 (file)
@@ -973,4 +973,74 @@ sub read_iscsi_initiatorname {
 register_file('initiatorname', "/etc/iscsi/initiatorname.iscsi",  
              \&read_iscsi_initiatorname);
 
+sub read_apt_auth {
+    my ($filename, $fd) = @_;
+
+    local $/;
+
+    my $raw = <$fd>;
+
+    $raw =~ s/^\s+//;
+
+    my @tokens = split(/\s+/, $raw);
+
+    my $data = {};
+
+    my $machine;
+    while (defined(my $tok = shift @tokens)) {
+
+       $machine = shift @tokens if $tok eq 'machine';
+       next if !$machine;
+       $data->{$machine} = {} if !$data->{$machine};
+
+       $data->{$machine}->{login} = shift @tokens if $tok eq 'login';
+       $data->{$machine}->{password} = shift @tokens if $tok eq 'password';
+    };
+
+    return $data;
+}
+
+my $format_apt_auth_data = sub {
+    my $data = shift;
+
+    my $raw = '';
+
+    foreach my $machine (sort keys %$data) {
+       my $d = $data->{$machine};
+       $raw .= "machine $machine\n";
+       $raw .= " login $d->{login}\n" if $d->{login};
+       $raw .= " password $d->{password}\n" if $d->{password};
+       $raw .= "\n";
+    }
+
+    return $raw;
+};
+
+sub write_apt_auth {
+    my ($filename, $fh, $data) = @_;
+
+    my $raw = &$format_apt_auth_data($data);
+
+    die "write failed: $!" unless print $fh "$raw\n";
+   
+    return $data;
+}
+
+sub update_apt_auth {
+    my ($filename, $fh, $data) = @_;
+
+    my $orig = read_apt_auth($filename, $fh);
+
+    foreach my $machine (keys %$data) {
+       $orig->{$machine} = $data->{$machine};
+    }
+
+    return &$format_apt_auth_data($orig);
+}
+
+register_file('apt-auth', "/etc/apt/auth.conf",  
+             \&read_apt_auth, \&write_apt_auth,
+             \&update_apt_auth);
+
 1;