#!/usr/bin/perl # Filename: cdir # Author: G Ling Silva # Date: January, 1996 # SYNOPSIS: cdir # DESCRIPTION: Check file permission # system 'clear'; chop($help = <<'EOP'); File Permission Check: a) Directory b) Change permission h) Help x) Exit EOP $prompt = 'cdir>'; # # Main loop # print $help; while (1) { print $prompt; if (($ans = substr(,0,1)) ne '') { # Get command if ($ans eq 'a') { &get_dir; # Print directory } elsif ($ans eq 'b') { &mod_entries; # Modify file permission } elsif ($ans eq 'h') { print $help; # Print help message } elsif ($ans eq 'x') { die "Klart!\n"; # Exit } } } # # Get directory # sub get_dir { system 'ls -lF | more'; return 0; } # # Modify file mode # sub mod_entries { do { print "\nInput filename: "; chop ($filename = ); # Get filename print "\n"; if ($filename) { if (!(-e $filename)) { # Check if file exists warn "CDIR: $filename not found!\n"; } else { # Process entry open (LS, "/bin/ls -l $filename |") || warn "CDIR: Can't run ls\n"; $inmode = ; $inmode =~ /^(\S+)/; # Get 1st word from ls output $inmode = $1; close(LS); print "Actual permissions for filename $filename: $inmode\n"; $outmode = 0; print "Permissions for USER:\n"; $outmode |= (&get_mode_mask << 6); # Shift 1st digit into position print "Permissions for GROUP:\n"; $outmode |= (&get_mode_mask << 3); # Shift 2nd digit into postion print "Permissions for OTHER:\n"; $outmode |= &get_mode_mask; # Add last digit printf ("New permission: %lo\n", $outmode); chmod $outmode, $filename; # Change actual permission } } } while ($filename ne ''); # Until null entry return 0; } # # Get permission mask # sub get_mode_mask { $omode = 0; print "Readable (y/N): "; if (substr(, 0, 1) =~ /[Yy]/) { $omode |= 4; } print "Writable (y/N): "; if (substr(, 0, 1) =~ /[Yy]/) { $omode |= 2; } print "Executable (y/N): "; if (substr(, 0, 1) =~ /[Yy]/) { $omode |= 1; } return $omode; }