Prevent access to the /lib/ directory
[WebKit-https.git] / Websites / bugs.webkit.org / describecomponents.cgi
1 #!/usr/bin/env perl -wT
2 # -*- Mode: perl; indent-tabs-mode: nil -*-
3 #
4 # The contents of this file are subject to the Mozilla Public
5 # License Version 1.1 (the "License"); you may not use this file
6 # except in compliance with the License. You may obtain a copy of
7 # the License at http://www.mozilla.org/MPL/
8 #
9 # Software distributed under the License is distributed on an "AS
10 # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11 # implied. See the License for the specific language governing
12 # rights and limitations under the License.
13 #
14 # The Original Code is the Bugzilla Bug Tracking System.
15 #
16 # The Initial Developer of the Original Code is Netscape Communications
17 # Corporation. Portions created by Netscape are
18 # Copyright (C) 1998 Netscape Communications Corporation. All
19 # Rights Reserved.
20 #
21 # Contributor(s): Terry Weissman <terry@mozilla.org>
22 #                 Bradley Baetz <bbaetz@student.usyd.edu.au>
23 #                 Frédéric Buclin <LpSolit@gmail.com>
24
25 use strict;
26 use lib qw(. lib);
27
28 use Bugzilla;
29 use Bugzilla::Constants;
30 use Bugzilla::Util;
31 use Bugzilla::Error;
32 use Bugzilla::Product;
33
34 my $user = Bugzilla->login();
35 my $cgi = Bugzilla->cgi;
36 my $template = Bugzilla->template;
37 my $vars = {};
38
39 print $cgi->header();
40
41 # This script does nothing but displaying mostly static data.
42 Bugzilla->switch_to_shadow_db;
43
44 my $product_name = trim($cgi->param('product') || '');
45 my $product = new Bugzilla::Product({'name' => $product_name});
46
47 unless ($product && $user->can_access_product($product->name)) {
48     # Products which the user is allowed to see.
49     my @products = @{$user->get_accessible_products};
50
51     if (scalar(@products) == 0) {
52         ThrowUserError("no_products");
53     }
54     # If there is only one product available but the user entered
55     # another product name, we display a list with this single
56     # product only, to not confuse the user with components of a
57     # product he didn't request.
58     elsif (scalar(@products) > 1 || $product_name) {
59         $vars->{'classifications'} = [{object => undef, products => \@products}];
60         $vars->{'target'} = "describecomponents.cgi";
61         # If an invalid product name is given, or the user is not
62         # allowed to access that product, a message is displayed
63         # with a list of the products the user can choose from.
64         if ($product_name) {
65             $vars->{'message'} = "product_invalid";
66             # Do not use $product->name here, else you could use
67             # this way to determine whether the product exists or not.
68             $vars->{'product'} = $product_name;
69         }
70
71         $template->process("global/choose-product.html.tmpl", $vars)
72           || ThrowTemplateError($template->error());
73         exit;
74     }
75
76     # If there is only one product available and the user didn't specify
77     # any product name, we show this product.
78     $product = $products[0];
79 }
80
81 ######################################################################
82 # End Data/Security Validation
83 ######################################################################
84
85 $vars->{'product'} = $product;
86
87 $template->process("reports/components.html.tmpl", $vars)
88   || ThrowTemplateError($template->error());