Listing 4: uucancel.pl
1 #
2 # @(#) uucancel.pl - kill UUCP jobs by machine, user or all
3 # Copyright 1992, Chris Hare, UniLabs Research Group
4 # December 1992. Born out of idea from Becca Thomas.
5 #
6 # This PERL script is based upon a shell program of the same name written
7 # for Rebecca Thomas of UNIX/World Magazine, to be published sometime in
8 # 1993.
9 #
10 # This script will kill UUCP jobs as selected by the user. The options
11 # are
12 # -a - to kill ALL UUCP jobs in the queue
13 # -s - to kill UUCP jobs scheduled for this printer
14 # -u - to kill UUCP jobs for this user
15 # NOTE : This script works ONLY with HDB uustat. Version 2 uustat is not
16 # supported.
17 #
18 # You must have the getopts.pl library file
19 require "getopts.pl";
20 #
21 # validte the user - we need to get the actual NAME of the EFFECTIVE ID
22 #
23 ( $id, @rest ) = getpwuid( $> );
24 $USAGE = "Usage : $0 [ -a ] [ -s system ] [ -u user ]";
25 #
26 # check for command line options and arguments.
27 #
28 &Getopts ('as:u:');
29 #
30 # Parse each of the options and define the command that will be used to get the
31 # desired information from uustat
32 #
33 if ( $opt_a )
34 {
35 $CMD = "uustat -a";
36 }
37 elsif ( $opt_s )
38 {
39 $CMD = "uustat -s $opt_s";
40 }
41 elsif ( $opt_u )
42 {
43 $CMD = "uustat -u $opt_u";
44 }
45 else
46 {
47 printf "$USAGE\n";
48 exit (2);
49 }
50
51 #
52 # CMD is the command named above, which is determined by the command line
53 # flag. The ^[^ ] is a space and tab between the '[]'. This is
54 # set to match any character at the beginning of the line EXCEPT a space or
55 # a tab.
56 #
57 printf "cmd=:$CMD:\n";
58 open( cmd_pipe, "$CMD | grep '^[^ ]' |" );
59
60 while (<cmd_pipe>)
61 {
62 # Cancel the UUCP jobs, and report the job numbers as they are cancelled
63 chop;
64 y/ / /s;
65 ( $job_id, $date, $dir, $machine, $user, @text ) = split(/ /);
66 printf "date=$date dir=$dir mach=$machine user=$user\n";
67 printf "Cancelling UUCP request id $job_id($user) ...\n\t";
68 if ( $id eq $user || $id eq root )
69 {
70 system( "uustat -k$job_id" );
71 }
72 else
73 {
74 printf "request denied : not owner or root\n";
75 }
76 }
77 exit (0);
|