Project

General

Profile

« Previous | Next » 

Revision ee11cc6e

Added by Scott Ullrich over 20 years ago

Say welcome to the pfSense package manager!

View differences:

cf/conf/config.xml
1 1
<?xml version="1.0"?>
2
<!-- m0n0wall default system configuration -->
3
<m0n0wall>
2
<!-- pfSense default system configuration -->
3
<pfsense>
4 4
	<version>1.4</version>
5 5
	<lastchange></lastchange>
6 6
	<system>
......
521 521
		</wolentry>
522 522
		-->
523 523
	</wol>
524
</m0n0wall>
524
	<installedpackages>
525
	</installedpackages>
526
</pfsense>
conf.default/config.xml
1 1
<?xml version="1.0"?>
2
<!-- m0n0wall default system configuration -->
3
<m0n0wall>
2
<!-- pfSense default system configuration -->
3
<pfsense>
4 4
	<version>1.4</version>
5 5
	<lastchange></lastchange>
6 6
	<system>
......
519 519
		</wolentry>
520 520
		-->
521 521
	</wol>
522
</m0n0wall>
522
	<installedpackages>
523
	</installedpackages>
524
</pfsense>
etc/inc/config.inc
85 85
*******************************************************************************
86 86
* FATAL ERROR                                                                 *
87 87
* The device that contains the configuration file (config.xml) could not be   *
88
* found. m0n0wall cannot continue booting.                                    *
88
* found. pfSense cannot continue booting.                                     *
89 89
*******************************************************************************
90 90

  
91 91

  
......
126 126

  
127 127
		/* read cache */
128 128
		$config = unserialize(file_get_contents("{$g['tmp_path']}/config.cache"));
129

  
129 130
	} else {
130 131

  
131 132
		if (!file_exists("{$g['conf_path']}/config.xml")) {
......
139 140
					echo "file is inserted. If it isn't, your configuration changes will be lost\n";
140 141
					echo "on reboot.\n";
141 142
				} else {
142
					echo "XML configuration file not found. m0n0wall cannot continue booting.\n";
143
					echo "XML configuration file not found.  pfSense cannot continue booting.\n";
143 144
					mwexec("/sbin/halt");
144 145
					exit;
145 146
				}
......
158 159

  
159 160
*******************************************************************************
160 161
* WARNING!                                                                    *
161
* The current configuration has been created with a newer version of m0n0wall *
162
* The current configuration has been created with a newer version of pfSense  *
162 163
* than this one! This can lead to serious misbehavior and even security       *
163
* holes! You are urged to either upgrade to a newer version of m0n0wall or    *
164
* holes! You are urged to either upgrade to a newer version of pfSense or     *
164 165
* revert to the default configuration immediately!                            *
165 166
*******************************************************************************
166 167

  
......
203 204

  
204 205
/* convert configuration, if necessary */
205 206
function convert_config() {
206
	global $config, $g;
207
	global $config, $pkg_config, $g;
207 208

  
208 209
	if ($config['version'] == $g['latest_config'])
209 210
		return;		/* already at latest version */
etc/inc/globals.inc
1 1
<?php
2 2
/*
3 3
    globals.inc
4
    part of m0n0wall (http://m0n0.ch/wall)
5
    
4
    part of pfSense (www.pfsense.com)
5
    Copyright (C) 2004 Scott Ullrich
6

  
7
    Originally Part of m0n0wall
6 8
    Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
7 9
    All rights reserved.
8
    
10

  
9 11
    Redistribution and use in source and binary forms, with or without
10 12
    modification, are permitted provided that the following conditions are met:
11
    
13

  
12 14
    1. Redistributions of source code must retain the above copyright notice,
13 15
       this list of conditions and the following disclaimer.
14
    
16

  
15 17
    2. Redistributions in binary form must reproduce the above copyright
16 18
       notice, this list of conditions and the following disclaimer in the
17 19
       documentation and/or other materials provided with the distribution.
18
    
20

  
19 21
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 22
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
21 23
    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
......
43 45
    "www_path" => "/usr/local/www",
44 46
    "captiveportal_path" => "/usr/local/captiveportal",
45 47
    "xml_rootobj" => "m0n0wall",
48
    "xml_pkg_rootobj" => "pfSense_pkgs",
46 49
    "pppoe_interface" => "ng0",
47 50
    "n_pptp_units" => 16,
48 51
    "pptp_subnet" => 28,
49
    "debug" => false,
52
    "debug" => true,
50 53
    "latest_config" => "1.4",
51 54
    "nopccard_platforms" => array("wrap", "net48xx")
52 55
);
usr/local/www/fbegin.inc
50 50
              routes</a><br>
51 51
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/system_firmware.php" class="navlnk">Firmware</a><br>
52 52
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/system_advanced.php" class="navlnk">Advanced</a><br>
53
	      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/pkg_mgr.php" class="navlnk">Package Manager</a><br>
53 54
              <strong>Interfaces</strong>
54 55
			  <?php if (!isset($config['system']['webgui']['noassigninterfaces'])): ?>
55 56
			  <a href="/interfaces_assign.php" class="navlnks">(assign)</a>
usr/local/www/pkg_mgr.php
1
#!/usr/local/bin/php
2
<?php
3
/*
4
    pkg_mgr.php
5
    Copyright (C) 2004 Scott Ullrich
6
    All rights reserved.
7

  
8
    originally part of m0n0wall (http://m0n0.ch/wall)
9
    Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10
    All rights reserved.
11

  
12
    Redistribution and use in source and binary forms, with or without
13
    modification, are permitted provided that the following conditions are met:
14

  
15
    1. Redistributions of source code must retain the above copyright notice,
16
       this list of conditions and the following disclaimer.
17

  
18
    2. Redistributions in binary form must reproduce the above copyright
19
       notice, this list of conditions and the following disclaimer in the
20
       documentation and/or other materials provided with the distribution.
21

  
22
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
    AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
    POSSIBILITY OF SUCH DAMAGE.
32
*/
33

  
34
require("guiconfig.inc");
35
require("xmlparse_pkg.inc");
36

  
37
$a_out = &$pkg_config['packages'];
38

  
39
if ($_POST) {
40

  
41
    $pconfig = $_POST;
42

  
43
    $retval = 0;
44

  
45
    if (!file_exists($d_sysrebootreqd_path)) {
46
		config_lock();
47
        $retval |= filter_configure();
48
		config_unlock();
49
    }
50
    $savemsg = get_std_save_message($retval);
51

  
52
    if ($retval == 0) {
53
        if (file_exists($d_natconfdirty_path))
54
            unlink($d_natconfdirty_path);
55
        if (file_exists($d_filterconfdirty_path))
56
            unlink($d_filterconfdirty_path);
57
    }
58
}
59

  
60
?>
61
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
62
<html>
63
<head>
64
<title><?=gentitle("System: Package Manager");?></title>
65
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
66
<link href="gui.css" rel="stylesheet" type="text/css">
67
</head>
68

  
69
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
70
<?php include("fbegin.inc"); ?>
71
<p class="pgtitle">System: Package Manager</p>
72
<form action="firewall_nat_out_load_balancing.php" method="post">
73
<?php if ($savemsg) print_info_box($savemsg); ?>
74
<?php if (file_exists($d_natconfdirty_path)): ?><p>
75
<?php print_info_box_np("The Package Manager configuration has been changed.<br>You must apply the changes in order for them to take effect.");?><br>
76
<input name="apply" type="submit" class="formbtn" id="apply" value="Apply changes"></p>
77
<?php endif; ?>
78
<?php
79
$configa = $config;
80
if(!file_exists("/tmp/pkg_config.xml")) {
81
            mwexec("cd {$g['tmp_path']} && /usr/bin/fetch \"http://www.pfsense.com/packages/pkg_config.xml\" >/dev/null 2>&1 ");
82
            if(!file_exists("{$g['tmp_path']}/pkg_config.xml")) {
83
                        print_info_box_np("Could not download pkg_config.xml from pfSense.com.  Check your DNS settings.");
84
                        die;
85
            }
86
}
87

  
88
$pkg_config = parse_xml_config("{$g['tmp_path']}/pkg_config.xml", "pfsensepkgs");
89

  
90
if(!$pkg_config['packages']) {
91
            print_info_box_np("Could not find any packages in pkg_config.xml");
92
}
93
?>
94
<table width="100%" border="0" cellpadding="0" cellspacing="0">  <tr><td>
95
  <ul id="tabnav">
96
    <li class="tabact">Available Packages</a></li>
97
    <li class="tabinact"><a href="pkg_mgr_installed.php">Installed Packages</a></li>
98
  </ul>
99
  </td></tr>
100
  <tr>
101
    <td class="tabcont">
102
              <table width="100%" border="0" cellpadding="6" cellspacing="0">
103
                <tr>
104
                  <td width="25%" class="listhdrr">Package Name</td>
105
                  <td width="25%" class="listhdrr">Category</td>
106
                  <td width="50%" class="listhdr">Description</td>
107
                </tr>
108

  
109
		<?php
110
		 $i = 0;
111
		    foreach ($pkg_config['packages']['package'] as $pkg) {
112
                        if(is_array($configa['installedpackages']['package'])) {
113
                            foreach ($configa['installedpackages']['package'] as $installed) {
114
                                        if($installed['name'] == $pkg['name'])
115
                                                    $pkg['name'] = "";
116
                            }
117
                        }
118
                        if($pkg['name'] <> "") {
119
                            ?>
120
                            <tr valign="top">
121
                                <td class="listlr">
122
                                    <?= $pkg['name'] ?>
123
                                </td>
124
                                <td class="listlr">
125
                                    <?= $pkg['category'] ?>
126
                                </td>
127
                                <td class="listbg">
128
                                    <font color="#FFFFFFF">
129
                                    <?= $pkg['descr'] ?>
130
                                </td>
131
                                <td valign="middle" class="list" nowrap>
132
                                    <a href="pkg_mgr_install.php?id=<?=$i;?>"><img src="plus.gif" width="17" height="17" border="0"></a>
133

  
134
                                </td>
135
                            </tr>
136

  
137
                            <?php
138
                            $i++;
139
                        }
140
		    }
141
		?>
142
        </table>
143
    </td>
144
  </tr>
145
</table>
146
</form>
147
<?php include("fend.inc"); ?>
148
</body>
149
</html>
150

  
151

  
152

  
153

  
154

  
155

  
156

  
157

  
158

  
159

  
usr/local/www/pkg_mgr_install.php
1
#!/usr/local/bin/php
2
<?php
3
/*
4
    pkg_mgr_install.php
5
    Copyright (C) 2004 Scott Ullrich
6
    All rights reserved.
7

  
8
    Redistribution and use in source and binary forms, with or without
9
    modification, are permitted provided that the following conditions are met:
10

  
11
    1. Redistributions of source code must retain the above copyright notice,
12
       this list of conditions and the following disclaimer.
13

  
14
    2. Redistributions in binary form must reproduce the above copyright
15
       notice, this list of conditions and the following disclaimer in the
16
       documentation and/or other materials provided with the distribution.
17

  
18
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20
    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
    AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
22
    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
    POSSIBILITY OF SUCH DAMAGE.
28
*/
29

  
30
require("guiconfig.inc");
31
require("xmlparse_pkg.inc");
32

  
33
function update_status($status) {
34
            echo "\n<script language=\"JavaScript\">document.forms[0].status.value=\"" . $status . "\";</script>";
35
}
36

  
37
function execute_command_return_output($command) {
38
    $fd = popen($command . " 2>&1 ", "r");
39
    echo "\n<script language=\"JavaScript\">this.document.forms[0].output.value = \"\";</script>";
40
    $counter = 0;
41
    $counter2 = 0;
42
    while(!feof($fd)) {
43
	$tmp = fread($fd,49);
44
	$tmp1 = ereg_replace("\n","\\n", $tmp);
45
	$text = ereg_replace("\"","'", $tmp1);
46
	if($lasttext == "..") {
47
	    $text = "";
48
	    $lasttext = "";
49
	    $counter=$counter-2;
50
	} else {
51
	    $lasttext .= $text;
52
	}
53
	if($counter > 51) {
54
	    $counter = 0;
55
	    $extrabreak = "\\n";
56
	} else {
57
	    $extrabreak = "";
58
	    $counter++;
59
	}
60
	if($counter2 > 600) {
61
	    echo "\n<script language=\"JavaScript\">this.document.forms[0].output.value = \"\";</script>";
62
	    $counter2 = 0;
63
	} else
64
	    $counter2++;
65
	echo "\n<script language=\"JavaScript\">this.document.forms[0].output.value = this.document.forms[0].output.value + \"" . $text . $extrabreak .  "\"; f('output'); </script>";
66
    }
67
    fclose($fd);
68
}
69

  
70
$a_out = &$pkg_config['packages'];
71

  
72
?>
73
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
74
<html>
75
<head>
76
<title><?=gentitle("System: Package Manager: Install Package");?></title>
77
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
78
<link href="gui.css" rel="stylesheet" type="text/css">
79
</head>
80

  
81
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
82
<?php include("fbegin.inc"); ?>
83
<p class="pgtitle">System: Package Manager: Install Package</p>
84
<form action="firewall_nat_out_load_balancing.php" method="post">
85
<?php if ($savemsg) print_info_box($savemsg); ?>
86
<?php if (file_exists($d_natconfdirty_path)): ?><p>
87
<?php print_info_box_np("The Package Manager configuration has been changed.<br>You must apply the changes in order for them to take effect.");?><br>
88
<input name="apply" type="submit" class="formbtn" id="apply" value="Apply changes"></p>
89
<?php endif; ?>
90
<?php
91
if(!file_exists("/tmp/pkg_config.xml")) {
92
            mwexec("cd {$g['tmp_path']} && /usr/bin/fetch \"http://www.pfsense.com/packages/pkg_config.xml\" >/dev/null 2>&1 ");
93
            if(!file_exists("{$g['tmp_path']}/pkg_config.xml")) {
94
                        print_info_box_np("Could not download pkg_config.xml from pfSense.com.  Check your DNS settings.");
95
                        die;
96
            }
97
}
98

  
99
$pkg_config = parse_xml_config("{$g['tmp_path']}/pkg_config.xml", "pfsensepkgs");
100

  
101
$id = $_GET['id'];
102

  
103
if(!$pkg_config['packages']) {
104
            print_info_box_np("Could not find any packages in pkg_config.xml");
105
}
106
?>
107
<table width="100%" border="0" cellpadding="0" cellspacing="0">  <tr><td>
108
  <ul id="tabnav">
109
    <li class="tabact">Available Packages</a></li>
110
    <li class="tabinact"><a href="pkg_mgr_installed.php">Installed Packages</a></li>
111
  </ul>
112
  </td></tr>
113
  <tr>
114
    <td class="tabcont">
115
              <table width="100%" border="0" cellpadding="6" cellspacing="0">
116
               <tr>
117
                 <td>
118
	             <textarea cols="55" rows="1" name="status" id="status" wrap="hard">One moment please... This will take a while!</textarea>
119
	             <textarea cols="55" rows="25" name="output" id="output" wrap="hard"></textarea>
120
                 </td>
121
               </tr>
122
        </table>
123
    </td>
124
  </tr>
125
</table>
126
</form>
127
<?php include("fend.inc"); ?>
128
</body>
129
</html>
130

  
131
<?
132

  
133
/* install the package */
134

  
135
$a_out = &$pkg_config['packages']['package'];
136
$pkgent = array();
137
$pkgent['name'] = $pkg_config['packages']['package'][$id]['name'];
138
$pkgent['descr'] = $pkg_config['packages']['package'][$id]['descr'];
139
$pkgent['category'] = $pkg_config['packages']['package'][$id]['category'];
140
$pkgent['depends_on_package'] = $a_out[$id]['depends_on_package'];
141
$pkgent['depends_on_package_base'] = $a_out[$id]['depends_on_package_base'];
142
$pkgent['pfsense_package'] = $a_out[$id]['pfsense_package'];
143
$pkgent['pfsense_package_base'] = $a_out[$id]['pfsense_package_base'];
144
$a_out = &$config['packages']['package'];
145

  
146
update_status("Downloading and installing " . $pkgent['name'] . " ... ");
147

  
148
execute_command_return_output("cd /tmp/ && /usr/sbin/pkg_add -r " . $pkgent['pfsense_package_base'] . "/" . $pkgent['pfsense_package']);
149

  
150
if ($pkgent['pfsense_package_base'])
151
            execute_command_return_output("cd /tmp/ && /usr/sbin/pkg_add -r " . $pkgent['depends_on_package_base'] . "/" . $pkgent['depends_on_package']);
152

  
153
// XXX: ensure package is REALLY installed before doing below...
154

  
155
$config = parse_xml_config("{$g['conf_path']}/config.xml", $g['xml_rootobj']);
156

  
157
$config['installedpackages']['package'][] = $pkgent;
158

  
159
if (isset($id) && $a_out[$id])
160
        $a_out[$id] = $pkgent;
161
else
162
        $a_out[] = $pkgent;
163

  
164
write_config();
165

  
166
update_status("Package installation completed.");
167
?>
168

  
169

  
170

  
171

  
172

  
173

  
174

  
175

  
176

  
usr/local/www/pkg_mgr_installed.php
1
#!/usr/local/bin/php
2
<?php
3
/*
4
    pkg_mgr.php
5
    Copyright (C) 2004 Scott Ullrich
6
    All rights reserved.
7

  
8
    originally part of m0n0wall (http://m0n0.ch/wall)
9
    Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10
    All rights reserved.
11

  
12
    Redistribution and use in source and binary forms, with or without
13
    modification, are permitted provided that the following conditions are met:
14

  
15
    1. Redistributions of source code must retain the above copyright notice,
16
       this list of conditions and the following disclaimer.
17

  
18
    2. Redistributions in binary form must reproduce the above copyright
19
       notice, this list of conditions and the following disclaimer in the
20
       documentation and/or other materials provided with the distribution.
21

  
22
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
    AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
    POSSIBILITY OF SUCH DAMAGE.
32
*/
33

  
34
require("guiconfig.inc");
35
require("xmlparse_pkg.inc");
36

  
37
?>
38
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
39
<html>
40
<head>
41
<title><?=gentitle("System: Package Manager");?></title>
42
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
43
<link href="gui.css" rel="stylesheet" type="text/css">
44
</head>
45

  
46
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
47
<?php include("fbegin.inc"); ?>
48
<p class="pgtitle">System: Package Manager</p>
49
<form action="firewall_nat_out_load_balancing.php" method="post">
50
<?php if ($savemsg) print_info_box($savemsg); ?>
51
<?php if (file_exists($d_natconfdirty_path)): ?><p>
52
<?php print_info_box_np("The Package Manager configuration has been changed.<br>You must apply the changes in order for them to take effect.");?><br>
53
<input name="apply" type="submit" class="formbtn" id="apply" value="Apply changes"></p>
54
<?php endif; ?>
55
<table width="100%" border="0" cellpadding="0" cellspacing="0">  <tr><td>
56
  <ul id="tabnav">
57
    <li class="tabinact"><a href="pkg_mgr.php">Available Packages</a></li>
58
    <li class="tabact">Installed Packages</li>
59
  </ul>
60
  </td></tr>
61
  <tr>
62
    <td class="tabcont">
63
              <table width="100%" border="0" cellpadding="6" cellspacing="0">
64
                <tr>
65
                  <td width="25%" class="listhdrr">Package Name</td>
66
                  <td width="25%" class="listhdrr">Category</td>
67
                  <td width="50%" class="listhdr">Description</td>
68
                </tr>
69

  
70
		<?php
71
		 $i = 0;
72
                 if($config['installedpackages']['package']) {
73
		    foreach ($config['installedpackages']['package'] as $pkg) {
74
                        if($pkg['name'] <> "") {
75
                            ?>
76
                            <tr valign="top">
77
                                <td class="listlr">
78
                                    <?= $pkg['name'] ?>
79
                                </td>
80
                                <td class="listlr">
81
                                    <?= $pkg['category'] ?>
82
                                </td>
83
                                <td class="listbg">
84
                                    <font color="#FFFFFFF">
85
                                    <?= $pkg['descr'] ?>
86
                                </td>
87
                                <td valign="middle" class="list" nowrap>
88
                                    <a href="pkg_mgr_delete.php?id=<?=$i;?>"><img src="x.gif" width="17" height="17" border="0"></a>
89

  
90
                                </td>
91
                            </tr>
92

  
93
                            <?php
94
                            $i++;
95
                        }
96
		    }
97
                 }
98
		?>
99
        </table>
100
    </td>
101
  </tr>
102
</table>
103
</form>
104
<?php include("fend.inc"); ?>
105
</body>
106
</html>
107

  
108

  
109

  
110

  
111

  
112

  
113

  
114

  
115

  
116

  

Also available in: Unified diff