~ubuntu-branches/ubuntu/lucid/request-tracker3.8/lucid-security

« back to all changes in this revision

Viewing changes to bin/rt

  • Committer: Bazaar Package Importer
  • Author(s): Dominic Hargreaves, Dominic Hargreaves, Christian Perrier
  • Date: 2009-06-16 21:46:59 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20090616214659-5ji9k1n3qyc2br3n
Tags: 3.8.4-1
[ Dominic Hargreaves ]
* Add missing comma in Depends (fixes FTBFS on etch)
* Update debconf translations: pt.po, ja.po, sv.po, it.po, cs.po, ru.po
  (Closes: #519885, #519922, #520603, #520759, #521199, #521926)
* Document preference for not using SQLite in production
  (Closes: #512750)

[ Christian Perrier ]
* Debconf templates and debian/control reviewed by the debian-l10n-
  english team as part of the Smith review project.
  (Closes: #522367, #520959)
* [Debconf translation updates]
  - Japanese. Closes: #522896
  - German. Closes: #520958
  - Portuguese. Closes: #523481
  - Galician. Closes: #524256
  - Galician. Closes: #524256
  - Spanish. Closes: #524449
  - Italian. Closes: #524715
  - Russian. Closes: #524894
  - Swedish. Closes: #525171
  - French. Closes: #525281

[ Dominic Hargreaves ]
* Don't tell dbconfig to comment out unused variables, since this
  breaks MySQL and Postgres database configuration (Closes: #523090)
* Update Standards-Version (no changes)
* Switch dependency on sysklogd to rsyslog (Closes: #526914)
* New upstream release; includes
  - Minor security fix (Closes: #533069)
  - Add missing Postgres index (Closes: #512653)
* Patch webmux.pl to provide a better error message when the wrong
  major version of RT is in @INC (for example in a mod_perl context).
  (Closes: #518692)
* Add some more example Exim 4 configuration (Closes: #238345)
* Don't apply database ACLs in databases managed by dbconfig-common.
* Remove unused ACL patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
161
161
    shift @ARGV if ($ARGV[0] eq 'rt');    # ignore a leading 'rt'
162
162
    if (@ARGV && exists $actions{$ARGV[0]}) {
163
163
        $action = shift @ARGV;
164
 
        $actions{$action}->($action);
 
164
        return $actions{$action}->($action);
165
165
    }
166
166
    else {
167
167
        print STDERR "rt: Unknown command '@ARGV'.\n";
168
168
        print STDERR "rt: For help, run 'rt help'.\n";
 
169
        return 1;
169
170
    }
170
171
}
171
172
 
172
 
handler();
173
 
exit;
 
173
exit handler();
174
174
 
175
175
# Handler functions.
176
176
# ------------------
190
190
 
191
191
sub version {
192
192
    print "rt $VERSION\n";
 
193
    return 0;
193
194
}
194
195
 
195
196
sub logout {
196
197
    submit("$REST/logout") if defined $session->cookie;
 
198
    return 0;
197
199
}
198
200
 
199
201
sub quit {
203
205
 
204
206
my %help;
205
207
sub help {
206
 
    my ($action, $type) = @_;
 
208
    my ($action, $type, $rv) = @_;
 
209
    $rv = defined $rv ? $rv : 0;
207
210
    my $key;
208
211
 
209
212
    # What help topics do we know about?
252
255
    }
253
256
 
254
257
    print STDERR $help{$key}, "\n\n";
 
258
    return $rv;
255
259
}
256
260
 
257
261
# Displays a list of objects that match some specified condition.
344
348
        $bad = 1;
345
349
    }
346
350
    #return help("list", $type) if $bad;
347
 
    return suggest_help("list", $type) if $bad;
 
351
    return suggest_help("list", $type, $bad) if $bad;
348
352
 
349
353
    print "Query:$q\n" if ! $rawprint;
350
354
    my $r = submit("$REST/search/$type", { query => $q, %data });
354
358
        my $forms = Form::parse($r->content);
355
359
        prettylist ($forms);
356
360
    }
 
361
    return 0;
357
362
}
358
363
 
359
364
# Displays selected information about a single object.
427
432
        $bad = 1;
428
433
    }
429
434
    #return help("show", $type) if $bad;
430
 
    return suggest_help("show", $type) if $bad;
 
435
    return suggest_help("show", $type, $bad) if $bad;
431
436
 
432
437
    my $r = submit("$REST/show", { id => \@objects, %data });
433
438
    my $c = $r->content;
446
451
        my $forms = Form::parse($c);
447
452
        prettyshow ($forms);
448
453
    }
 
454
    return 0;
449
455
}
450
456
 
451
457
# To create a new object, we ask the server for a form with the defaults
554
560
        @objects = ("$type/new") if defined($type);
555
561
    }
556
562
    #return help($action, $type) if $bad;
557
 
    return suggest_help($action, $type) if $bad;
 
563
    return suggest_help($action, $type, $bad) if $bad;
558
564
 
559
565
    # We need a form to make changes to. We usually ask the server for
560
566
    # one, but we can avoid that if we are fed one on STDIN, or if the
638
644
 
639
645
    if ($output) {
640
646
        print $text;
641
 
        return;
 
647
        return 0;
642
648
    }
643
649
 
644
650
    my $synerr = 0;
664
670
            }
665
671
            else {
666
672
                print $r->content;
667
 
                return;
 
673
                return 0;
668
674
            }
669
675
        }
670
676
        print $r->content;
671
677
    }
 
678
    return 0;
672
679
}
673
680
 
674
681
# handler for special edit commands. A valid edit command is constructed and
713
720
        $bad = 1;
714
721
        whine "unrecognized action $action.";
715
722
    }
716
 
    return help("edit") if $bad;
 
723
    return help("edit", undef, $bad) if $bad;
717
724
    @ARGV = ( $id, "set", $what );
718
725
    print "Executing: rt edit @ARGV\n";
719
726
    return edit("edit");
741
748
            if (/-a/) {
742
749
                unless (-f $ARGV[0] && -r $ARGV[0]) {
743
750
                    whine "Cannot read attachment: '$ARGV[0]'.";
744
 
                    return;
 
751
                    return 0;
745
752
                }
746
753
                push @files, shift @ARGV;
747
754
            }
811
818
                goto NEXT;
812
819
            }
813
820
            elsif (!@$o) {
814
 
                return;
 
821
                return 0;
815
822
            }
816
823
            @files = @{ vsplit($k->{Attachment}) };
817
824
 
829
836
 
830
837
    my $r = submit("$REST/ticket/$id/comment", \%data);
831
838
    print $r->content;
 
839
    return 0;
832
840
}
833
841
 
834
842
# Merge one ticket into another.
856
864
        $bad = 1;
857
865
    }
858
866
    #return help("merge", "ticket") if $bad;
859
 
    return suggest_help("merge", "ticket") if $bad;
 
867
    return suggest_help("merge", "ticket", $bad) if $bad;
860
868
 
861
869
    my $r = submit("$REST/ticket/$id[0]/merge/$id[1]");
862
870
    print $r->content;
 
871
    return 0;
863
872
}
864
873
 
865
874
# Link one ticket to another.
906
915
        whine "Too $bad arguments specified.";
907
916
        $bad = 1;
908
917
    }
909
 
    return suggest_help("link", $type) if $bad;
 
918
    return suggest_help("link", $type, $bad) if $bad;
910
919
 
911
920
    my $r = submit("$REST/$type/link", \%data);
912
921
    print $r->content;
 
922
    return 0;
913
923
}
914
924
 
915
925
# Take/steal a ticket
944
954
        whine "Too $bad arguments specified.";
945
955
        $bad = 1;
946
956
    }
947
 
    return suggest_help("take", "ticket") if $bad;
 
957
    return suggest_help("take", "ticket", $bad) if $bad;
948
958
 
949
959
    my $r = submit("$REST/ticket/$id/take", \%data);
950
960
    print $r->content;
 
961
    return 0;
951
962
}
952
963
 
953
964
# Grant/revoke a user's rights.
960
971
    }
961
972
 
962
973
    $revoke = 1 if $cmd->{action} eq 'revoke';
 
974
    return 0;
963
975
}
964
976
 
965
977
# Client <-> Server communication.
1441
1453
    my $sub = (caller(1))[3];
1442
1454
    $sub =~ s/^main:://;
1443
1455
    warn "rt: $sub: @_\n";
1444
 
    return;
 
1456
    return 0;
1445
1457
}
1446
1458
 
1447
1459
sub read_passwd {
1502
1514
        # XXX: This should become a real parser, à la Text::ParseWords.
1503
1515
        $line =~ s/^\s+//;
1504
1516
        $line =~ s/\s+$//;
1505
 
        push @words, split /\s*,\s*/, $line;
 
1517
        my ( $a, $b ) = split /,/, $line, 2;
 
1518
 
 
1519
        while ($a) {
 
1520
            no warnings 'uninitialized';
 
1521
            if ( $a =~ /^'/ ) {
 
1522
                my $s = $a;
 
1523
                while ( $a !~ /'$/ || (   $a !~ /(\\\\)+'$/
 
1524
                            && $a =~ /(\\)+'$/ )) {
 
1525
                    ( $a, $b ) = split /,/, $b, 2;
 
1526
                    $s .= ',' . $a;
 
1527
                }
 
1528
                push @words, $s;
 
1529
            }
 
1530
            elsif ( $a =~ /^q{/ ) {
 
1531
                my $s = $a;
 
1532
                while ( $a !~ /}$/ ) {
 
1533
                    ( $a, $b ) =
 
1534
                      split /,/, $b, 2;
 
1535
                    $s .= ',' . $a;
 
1536
                }
 
1537
                $s =~ s/^q{/'/;
 
1538
                $s =~ s/}/'/;
 
1539
                push @words, $s;
 
1540
            }
 
1541
            else {
 
1542
                push @words, $a;
 
1543
            }
 
1544
            ( $a, $b ) = split /,/, $b, 2;
 
1545
        }
 
1546
 
 
1547
 
1506
1548
    }
1507
1549
 
1508
1550
    return \@words;
1577
1619
 
1578
1620
    $spec =~ s|^(?:$type/)?|$type/| if defined $type;
1579
1621
    return $spec if ($spec =~ m{^$name/(?:$idlist|$labels)(?:/.*)?$}o);
1580
 
    return;
 
1622
    return 0;
1581
1623
}
1582
1624
 
1583
1625
sub suggest_help {
1584
 
    my ($action, $type) = @_;
 
1626
    my ($action, $type, $rv) = @_;
1585
1627
 
1586
1628
    print STDERR "rt: For help, run 'rt help $action'.\n" if defined $action;
1587
1629
    print STDERR "rt: For help, run 'rt help $type'.\n" if defined $type;
 
1630
    return $rv;
1588
1631
}
1589
1632
 
1590
1633
sub str2time {
2190
2233
        -t type         Specifies object type.
2191
2234
        -f a,b,c        Restrict the display to the specified fields.
2192
2235
        -S var=val      Submits the specified variable with the request.
2193
 
        -v              Verbose display
 
2236
 
2194
2237
    Examples:
2195
2238
 
2196
2239
        rt show -t ticket -f id,subject,status 1-3
2198
2241
        rt show ticket/3/attachments/29/content
2199
2242
        rt show ticket/1-3/links
2200
2243
        rt show ticket/3/history
2201
 
        rt show -v ticket/3/history
 
2244
        rt show -l ticket/3/history
2202
2245
        rt show -t user 2
2203
2246
        rt show 2
2204
2247