#!/usr/bin/perl

use Getopt::Std;
use strict;

my %opts; getopts('tyqV', \%opts);

if (!$opts{'q'}) { open(QUIET, ">&STDOUT"); }
else { open(QUIET, ">>/dev/null"); }

print "\nA)dd, D)elete, or V)iew overrides, or Q)uit? [advq] ";
while (chomp(my $choice = <STDIN>)) {
 if ($choice =~ /^\s*v/i) {
  my @overrides = `dpkg-statoverride --list`;
  print QUIET "\nProgram\t\t\t\t\tUser\tGroup\tMode\n";
  if (!@overrides) { print "No file permissions have been overridden.\n"; }
  foreach (@overrides) {
   my @data = split / /;
   chomp (my $program = pop @data);
   print $program;
   for (my $i = 40 - length $program; $i > 0; $i -= 8) { print "\t"; }
   print join ("\t", @data);
   print "\n";
  }
  print "\n";
 } elsif ($choice =~ /^\s*d/i) {
  print "Remove which override? ";
  chomp (my $o = <STDIN>);
  if ($o) { system('feta', feta_opts(), 'remove-overrides', $o); }
  else { print STDERR "W: Not removing any override.\n"; }
 } elsif ($choice =~ /^\s*a/i) {
  my @params;
  print "Add an override for: "; $params[3] = <STDIN>;
  print "User: "; $params[0] = <STDIN>;
  print "Group: "; $params[1] = <STDIN>;
  print "Mode: "; $params[2] = <STDIN>;
  chomp @params;
  if (@params == 4) { system('feta', feta_opts(), 'add-override', @params); }
  else { print STDERR "W: One or more fields were left blank; not overriding anything."; }
 } elsif ($choice =~ /^\s*\q/i) { exit 0; }
   else { $choice && print STDERR "Unknown command $choice.\n"; }

 print "\nA)dd, D)elete, V)iew overrides, or Q)uit? [advq] ";
}

sub feta_opts {
 my @opts;
 foreach ('y','t','V','q') { if ($opts{$_}) { push (@opts, "-$_"); } }
 return @opts;
}
