From: <abe...@us...> - 2013-01-12 03:46:48
|
Revision: 5887 http://astlinux.svn.sourceforge.net/astlinux/?rev=5887&view=rev Author: abelbeck Date: 2013-01-12 03:46:38 +0000 (Sat, 12 Jan 2013) Log Message: ----------- web interface, add XMPP Server (prosody) configuration support Modified Paths: -------------- branches/1.0/package/webinterface/altweb/admin/edit.php branches/1.0/package/webinterface/altweb/admin/network.php branches/1.0/package/webinterface/altweb/common/license-packages.txt Added Paths: ----------- branches/1.0/package/webinterface/altweb/admin/xmpp.php Modified: branches/1.0/package/webinterface/altweb/admin/edit.php =================================================================== --- branches/1.0/package/webinterface/altweb/admin/edit.php 2013-01-11 00:18:23 UTC (rev 5886) +++ branches/1.0/package/webinterface/altweb/admin/edit.php 2013-01-12 03:46:38 UTC (rev 5887) @@ -30,6 +30,7 @@ 'stunnel' => 'Restart Stunnel Proxy', 'miniupnpd' => 'Restart Univ. Plug\'n\'Play', 'apcupsd' => 'Restart UPS Daemon', + 'prosody' => 'Restart XMPP Server', 'zabbix' => 'Restart Zabbix Monitor', 'asterisk' => 'Restart Asterisk', 'cron' => 'Reload Cron for root' @@ -209,6 +210,8 @@ $result = restartPROCESS($process, 36, $result, 'init', 4); } elseif ($process === 'stunnel') { $result = restartPROCESS($process, 37, $result, 'init'); + } elseif ($process === 'prosody') { + $result = restartPROCESS($process, 38, $result, 'init'); } elseif ($process === 'cron') { $result = updateCRON('root', 30, $result); } @@ -318,6 +321,8 @@ putHtml('<p style="color: green;">Zabbix Monitoring has Restarted.</p>'); } elseif ($result == 37) { putHtml('<p style="color: green;">Stunnel Proxy has Restarted.</p>'); + } elseif ($result == 38) { + putHtml('<p style="color: green;">XMPP Server has Restarted.</p>'); } elseif ($result == 99) { putHtml('<p style="color: red;">Action Failed.</p>'); } elseif ($result == 999) { Modified: branches/1.0/package/webinterface/altweb/admin/network.php =================================================================== --- branches/1.0/package/webinterface/altweb/admin/network.php 2013-01-11 00:18:23 UTC (rev 5886) +++ branches/1.0/package/webinterface/altweb/admin/network.php 2013-01-12 03:46:38 UTC (rev 5887) @@ -782,6 +782,10 @@ $result = saveNETWORKsettings($NETCONFDIR, $NETCONFFILE); header('Location: /admin/siptlscert.php'); exit; + } elseif (isset($_POST['submit_xmpp'])) { + $result = saveNETWORKsettings($NETCONFDIR, $NETCONFFILE); + header('Location: /admin/xmpp.php'); + exit; } elseif (isset($_POST['submit_zabbix'])) { $result = saveNETWORKsettings($NETCONFDIR, $NETCONFFILE); header('Location: /admin/zabbix.php'); @@ -885,6 +889,8 @@ $result = restartPROCESS($process, 36, $result, 'init', 4); } elseif ($process === 'stunnel') { $result = restartPROCESS($process, 37, $result, 'init'); + } elseif ($process === 'prosody') { + $result = restartPROCESS($process, 38, $result, 'init'); } } else { $result = 2; @@ -957,6 +963,8 @@ putHtml('<p style="color: green;">Zabbix Monitoring has Restarted.</p>'); } elseif ($result == 37) { putHtml('<p style="color: green;">Stunnel Proxy has Restarted.</p>'); + } elseif ($result == 38) { + putHtml('<p style="color: green;">XMPP Server has Restarted.</p>'); } elseif ($result == 99) { putHtml('<p style="color: red;">Action Failed.</p>'); } elseif ($result == 100) { @@ -1038,6 +1046,8 @@ putHtml('<option value="miniupnpd"'.$sel.'>Restart Univ. Plug\'n\'Play</option>'); $sel = ($reboot_restart === 'apcupsd') ? ' selected="selected"' : ''; putHtml('<option value="apcupsd"'.$sel.'>Restart UPS Daemon</option>'); + $sel = ($reboot_restart === 'prosody') ? ' selected="selected"' : ''; + putHtml('<option value="prosody"'.$sel.'>Restart XMPP Server</option>'); $sel = ($reboot_restart === 'zabbix') ? ' selected="selected"' : ''; putHtml('<option value="zabbix"'.$sel.'>Restart Zabbix Monitor</option>'); $sel = ($reboot_restart === 'asterisk') ? ' selected="selected"' : ''; @@ -1408,6 +1418,10 @@ putHtml('Asterisk SIP-TLS Server Certificate:'); putHtml('<input type="submit" value="SIP-TLS Certificate" name="submit_sip_tls" class="button" /></td></tr>'); + putHtml('<tr class="dtrow1"><td style="text-align: left;" colspan="6">'); + putHtml('XMPP Server, Messaging and Presence:'); + putHtml('<input type="submit" value="Configure XMPP" name="submit_xmpp" class="button" /></td></tr>'); + if (is_file('/etc/init.d/zabbix')) { putHtml('<tr class="dtrow1"><td style="text-align: left;" colspan="6">'); putHtml('Zabbix Monitoring:'); Added: branches/1.0/package/webinterface/altweb/admin/xmpp.php =================================================================== --- branches/1.0/package/webinterface/altweb/admin/xmpp.php (rev 0) +++ branches/1.0/package/webinterface/altweb/admin/xmpp.php 2013-01-12 03:46:38 UTC (rev 5887) @@ -0,0 +1,469 @@ +<?php + +// Copyright (C) 2013 Lonnie Abelbeck +// This is free software, licensed under the GNU General Public License +// version 3 as published by the Free Software Foundation; you can +// redistribute it and/or modify it under the terms of the GNU +// General Public License; and comes with ABSOLUTELY NO WARRANTY. + +// xmpp.php for AstLinux +// 11-01-2013 +// +// System location of /mnt/kd/rc.conf.d directory +$XMPPCONFDIR = '/mnt/kd/rc.conf.d'; +// System location of gui.xmpp.conf file +$XMPPCONFFILE = '/mnt/kd/rc.conf.d/gui.xmpp.conf'; + +$verbosity_menu = array ( + 'error' => 'Low', + 'warn' => 'Medium', + 'info' => 'High', + 'none' => 'None' +); + +$myself = $_SERVER['PHP_SELF']; + +require_once '../common/functions.php'; + +// Function: get_HOSTNAME_DOMAIN +// +function get_HOSTNAME_DOMAIN() { + $hostname_domain = ''; + + // System location of gui.network.conf file + $NETCONFFILE = '/mnt/kd/rc.conf.d/gui.network.conf'; + + if (is_file($NETCONFFILE)) { + $netvars = parseRCconf($NETCONFFILE); + if (($hostname = getVARdef($netvars, 'HOSTNAME')) !== '') { + if (($domain = getVARdef($netvars, 'DOMAIN')) !== '') { + $hostname_domain = $hostname.'.'.$domain; + } + } + } + return($hostname_domain); +} + +// Function: xmppGETclients +// +function xmppGETclients($vars) { + $id = 0; + + if (is_file('/mnt/kd/prosody/prosody.cfg.lua')) { + $tmpfile = tempnam("/tmp", "PHP_"); + shell('prosodyctl mod_listusers >'.$tmpfile.' 2>/dev/null', $status); + if ($status == 0) { + if (($fh = @fopen($tmpfile, "r")) !== FALSE) { + while (! feof($fh)) { + if (($line = trim(fgets($fh, 1024))) !== '') { + $db['data'][$id]['user'] = $line; + $id++; + } + } + fclose($fh); + } + } + @unlink($tmpfile); + } + // Sort by Username + if ($id > 1) { + foreach ($db['data'] as $key => $row) { + $user[$key] = $row['user']; + } + array_multisort($user, SORT_ASC, SORT_STRING, $db['data']); + } + return($db); +} + +// Function: saveXMPPsettings +// +function saveXMPPsettings($conf_dir, $conf_file) { + $result = 11; + + if (! is_dir($conf_dir)) { + return(3); + } + if (($fp = @fopen($conf_file,"wb")) === FALSE) { + return(3); + } + fwrite($fp, "### gui.xmpp.conf - start ###\n###\n"); + + $value = 'XMPP_ENABLE="'.$_POST['xmpp_enable'].'"'; + fwrite($fp, "### XMPP Enable\n".$value."\n"); + + $value = 'XMPP_ENABLE_S2S="'.$_POST['xmpp_enable_s2s'].'"'; + fwrite($fp, "### XMPP Server to Server Connections\n".$value."\n"); + + $value = 'XMPP_SYSLOG="'.$_POST['verbosity'].'"'; + fwrite($fp, "### Log Syslog\n".$value."\n"); + + $value = 'XMPP_C2S_PORT="'.trim($_POST['xmpp_c2s_port']).'"'; + fwrite($fp, "### Client to Server TCP Port\n".$value."\n"); + + $value = 'XMPP_S2S_PORT="'.trim($_POST['xmpp_s2s_port']).'"'; + fwrite($fp, "### Server to Server TCP Port\n".$value."\n"); + + $value = 'XMPP_HOSTNAME="'.trim($_POST['xmpp_hostname']).'"'; + fwrite($fp, "### XMPP VirtualHost\n".$value."\n"); + + $value = 'XMPP_ADMIN_USERS="'.trim($_POST['xmpp_admin_users']).'"'; + fwrite($fp, "### Admin Users\n".$value."\n"); + + $value = 'XMPP_ENABLE_MODULES="'.trim($_POST['xmpp_enable_modules']).'"'; + fwrite($fp, "### Enable Additional Modules\n".$value."\n"); + + $value = 'XMPP_DISABLE_MODULES="'.trim($_POST['xmpp_disable_modules']).'"'; + fwrite($fp, "### Disable Default Modules\n".$value."\n"); + + $value = 'XMPP_CONFERENCE="'.trim($_POST['xmpp_conference']).'"'; + fwrite($fp, "### Multi-User Chat Conference\n".$value."\n"); + + $value = 'XMPP_CERT=""'; + fwrite($fp, "### Default Certificate Path\n".$value."\n"); + + $value = 'XMPP_KEY=""'; + fwrite($fp, "### Default Key Path\n".$value."\n"); + + fwrite($fp, "### gui.xmpp.conf - end ###\n"); + fclose($fp); + + return($result); +} + +// Function: changeUserPass +// +function changeUserPass() { + + $user = str_replace(' ', '', $_POST['user']); + $pass = str_replace(' ', '', stripslashes($_POST['pass'])); + + if ($user === '') { + return(FALSE); + } + if ($pass === '') { + return(1); + } + if (! is_file('/mnt/kd/prosody/prosody.cfg.lua')) { + return(2); + } + + shell("echo -e '$pass\\n$pass' | prosodyctl passwd '$user' >/dev/null 2>/dev/null", $status); + + return($status == 0 ? TRUE : FALSE); +} + +// Function: addUserPass +// +function addUserPass() { + + $user = str_replace(' ', '', $_POST['user']); + $pass = str_replace(' ', '', stripslashes($_POST['pass'])); + + if ($user === '') { + return(FALSE); + } + if ($pass === '') { + return(1); + } + if (! is_file('/mnt/kd/prosody/prosody.cfg.lua')) { + return(2); + } + if (! preg_match('/^[a-zA-Z0-9][a-zA-Z0-9._-]*[@][a-zA-Z][a-zA-Z0-9._-]*[a-zA-Z]$/', $user)) { + return(4); + } + + shell("echo -e '$pass\\n$pass' | prosodyctl adduser '$user' >/dev/null 2>/dev/null", $status); + + return($status == 0 ? TRUE : FALSE); +} + +// Function: deleteUser +// +function deleteUser($user) { + + if ($user === '') { + return(FALSE); + } + if (! is_file('/mnt/kd/prosody/prosody.cfg.lua')) { + return(2); + } + + shell("prosodyctl deluser '$user' >/dev/null 2>/dev/null", $status); + + return($status == 0 ? TRUE : FALSE); +} + +if (is_file($XMPPCONFFILE)) { + $vars = parseRCconf($XMPPCONFFILE); +} else { + $vars = NULL; +} +$db = xmppGETclients($vars); + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $result = 1; + if (! $global_admin) { + $result = 999; + } elseif (isset($_POST['submit_save'])) { + $ok = 0; + $n = count($db['data']); + for ($i = 0; $i < $n; $i++) { + if ($db['data'][$i]['user'] === str_replace(' ', '', $_POST['user'])) { + $ok = changeUserPass(); + break; + } + } + if ($ok === 0) { + $ok = addUserPass(); + } + $result = saveXMPPsettings($XMPPCONFDIR, $XMPPCONFFILE); + if ($result == 11 && $ok === 1) { + $result = 12; + } elseif ($result == 11 && $ok === 4) { + $result = 4; + } elseif ($result == 11 && $ok === TRUE) { + $result = 15; + } + } elseif (isset($_POST['submit_restart'])) { + $result = 99; + if (isset($_POST['confirm_restart'])) { + $result = restartPROCESS('prosody', 10, $result, 'init'); + } else { + $result = 2; + } + } elseif (isset($_POST['submit_delete'])) { + $ok = 0; + $delete = $_POST['delete']; + if (count($delete) > 0) { + foreach ($delete as $deluser) { + if (($ok = deleteUser($deluser)) === FALSE) { + break; + } + } + } + $result = saveXMPPsettings($XMPPCONFDIR, $XMPPCONFFILE); + if ($result == 11 && $ok === FALSE) { + $result = 13; + } elseif ($result == 11 && $ok === TRUE) { + $result = 14; + } + } elseif (isset($_POST['submit_sip_tls'])) { + $result = saveXMPPsettings($XMPPCONFDIR, $XMPPCONFFILE); + header('Location: /admin/siptlscert.php'); + exit; + } + header('Location: '.$myself.'?result='.$result); + exit; +} else { // Start of HTTP GET +$ACCESS_RIGHTS = 'admin'; +require_once '../common/header.php'; + + putHtml('<center>'); + if (isset($_GET['result'])) { + $result = $_GET['result']; + if ($result == 2) { + putHtml('<p style="color: red;">No Action, check "Confirm" for this action.</p>'); + } elseif ($result == 3) { + putHtml('<p style="color: red;">Error creating file.</p>'); + } elseif ($result == 4) { + putHtml('<p style="color: red;">Invalid username, specify a JID, including a host. Example: al...@ex...</p>'); + } elseif ($result == 10) { + putHtml('<p style="color: green;">XMPP Server has Restarted.</p>'); + } elseif ($result == 11) { + putHtml('<p style="color: green;">Settings saved, click "Restart Server" to apply any changed settings.</p>'); + } elseif ($result == 12) { + putHtml('<p style="color: red;">Missing Password, User not added or changed.</p>'); + } elseif ($result == 13) { + putHtml('<p style="color: red;">User(s) failed to be deleted.</p>'); + } elseif ($result == 14) { + putHtml('<p style="color: green;">User(s) successfully deleted.</p>'); + } elseif ($result == 15) { + putHtml('<p style="color: green;">User successfully added or changed.</p>'); + } elseif ($result == 99) { + putHtml('<p style="color: red;">Action Failed.</p>'); + } elseif ($result == 999) { + putHtml('<p style="color: red;">Permission denied for user "'.$global_user.'".</p>'); + } else { + putHtml('<p style="color: orange;">No Action.</p>'); + } + } else { + putHtml('<p> </p>'); + } + putHtml('</center>'); +?> + <center> + <table class="layout"><tr><td><center> + <form method="post" action="<?php echo $myself;?>"> + <table width="100%" class="stdtable"> + <tr><td style="text-align: center;" colspan="3"> + <h2>XMPP Server Configuration:</h2> + </td></tr><tr><td style="text-align: center;"> + <input type="submit" class="formbtn" value="Save Settings" name="submit_save" /> + </td><td style="text-align: center;"> + <input type="submit" class="formbtn" value="Restart Server" name="submit_restart" /> + – + <input type="checkbox" value="restart" name="confirm_restart" /> Confirm + </td><td style="text-align: center;"> + <input type="submit" class="formbtn" value="Delete Checked" name="submit_delete" /> + </td></tr></table> +<?php + + if (isset($_GET['user'])) { + $edit_user = $_GET['user']; + } else { + $edit_user = ''; + } + + putHtml('<table width="100%" class="stdtable">'); + putHtml('<tr class="dtrow0"><td width="180"> </td><td> </td></tr>'); + +if (! is_file('/mnt/kd/ssl/sip-tls/keys/server.crt') || ! is_file('/mnt/kd/ssl/sip-tls/keys/server.key')) { + putHtml('<tr class="dtrow0"><td class="dialogText" style="text-align: left;" colspan="2">'); + putHtml('<strong>Missing SIP-TLS Server Certificate:</strong> <i>(Shared with XMPP)</i>'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Create SIP-TLS<br />Server Certificate:'); + putHtml('</td><td style="text-align: left;">'); + putHtml('<input type="submit" value="SIP-TLS Certificate" name="submit_sip_tls" class="button" />'); + putHtml('</td></tr>'); +} + putHtml('<tr class="dtrow0"><td class="dialogText" style="text-align: left;" colspan="2">'); + putHtml('<strong>XMPP Configuration Options:</strong>'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('XMPP Server:'); + putHtml('</td><td style="text-align: left;">'); + $xmpp_enable = getVARdef($vars, 'XMPP_ENABLE'); + putHtml('<select name="xmpp_enable">'); + putHtml('<option value="">disabled</option>'); + $sel = ($xmpp_enable === 'yes') ? ' selected="selected"' : ''; + putHtml('<option value="yes"'.$sel.'>enabled</option>'); + putHtml('</select>'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Server-to-Server<br />Connections:'); + putHtml('</td><td style="text-align: left;">'); + $xmpp_enable_s2s = getVARdef($vars, 'XMPP_ENABLE_S2S'); + putHtml('<select name="xmpp_enable_s2s">'); + putHtml('<option value="no">disabled</option>'); + $sel = ($xmpp_enable_s2s === 'yes') ? ' selected="selected"' : ''; + putHtml('<option value="yes"'.$sel.'>enabled</option>'); + putHtml('</select>'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Log Verbosity:'); + putHtml('</td><td style="text-align: left;">'); + $verbosity = getVARdef($vars, 'XMPP_SYSLOG'); + putHtml('<select name="verbosity">'); + foreach ($verbosity_menu as $key => $value) { + $sel = ($verbosity === $key) ? ' selected="selected"' : ''; + putHtml('<option value="'.$key.'"'.$sel.'>'.$value.'</option>'); + } + putHtml('</select>'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Client-to-Server<br />TCP Port:'); + putHtml('</td><td style="text-align: left;">'); + if (($value = getVARdef($vars, 'XMPP_C2S_PORT')) === '') { + $value = '5222'; + } + putHtml('<input type="text" size="10" maxlength="6" name="xmpp_c2s_port" value="'.$value.'" />'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Server-to-Server<br />TCP Port:'); + putHtml('</td><td style="text-align: left;">'); + if (($value = getVARdef($vars, 'XMPP_S2S_PORT')) === '') { + $value = '5269'; + } + putHtml('<input type="text" size="10" maxlength="6" name="xmpp_s2s_port" value="'.$value.'" />'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Hostname:'); + putHtml('</td><td style="text-align: left;">'); + if (($hostname = getVARdef($vars, 'XMPP_HOSTNAME')) === '') { + $hostname = get_HOSTNAME_DOMAIN(); + } + putHtml('<input type="text" size="56" maxlength="200" name="xmpp_hostname" value="'.$hostname.'" />'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Admin Users:'); + putHtml('</td><td style="text-align: left;">'); + $value = getVARdef($vars, 'XMPP_ADMIN_USERS'); + putHtml('<input type="text" size="56" maxlength="200" name="xmpp_admin_users" value="'.$value.'" />'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Enable Additional<br />Modules:'); + putHtml('</td><td style="text-align: left;">'); + $value = getVARdef($vars, 'XMPP_ENABLE_MODULES'); + putHtml('<input type="text" size="56" maxlength="200" name="xmpp_enable_modules" value="'.$value.'" />'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Disable Default<br />Modules:'); + putHtml('</td><td style="text-align: left;">'); + $value = getVARdef($vars, 'XMPP_DISABLE_MODULES'); + putHtml('<input type="text" size="56" maxlength="200" name="xmpp_disable_modules" value="'.$value.'" />'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;">'); + putHtml('Multi-User Chat<br />Conference:'); + putHtml('</td><td style="text-align: left;">'); + $value = getVARdef($vars, 'XMPP_CONFERENCE'); + putHtml('<input type="text" size="56" maxlength="200" name="xmpp_conference" value="'.$value.'" />'); + putHtml('</td></tr>'); +if ($value === '') { + putHtml('<tr class="dtrow1"><td style="text-align: right;"><i>Example:</i></td><td style="text-align: left;">'); + putHtml('<i>conference.'.$hostname.'</i>'); + putHtml('</td></tr>'); +} + +if (is_file('/mnt/kd/prosody/prosody.cfg.lua')) { + putHtml('<tr class="dtrow0"><td class="dialogText" style="text-align: left;" colspan="2">'); + putHtml('<strong>Client Credentials:</strong>'); + putHtml('</td></tr>'); + putHtml('<tr><td style="text-align: right;">'); + putHtml('Username:'); + putHtml('</td><td style="text-align: left;">'); + putHtml('<input type="text" size="46" maxlength="128" name="user" value="'.$edit_user.'" />'); + putHtml('</td></tr>'); + putHtml('<tr><td style="text-align: right;">'); + putHtml('Password:'); + putHtml('</td><td style="text-align: left;">'); + putHtml('<input type="password" size="46" maxlength="128" name="pass" value="" />'); + putHtml('</td></tr>'); + putHtml('</table>'); + + putHtml('<table width="66%" class="datatable">'); + putHtml("<tr>"); + + if (($n = count($db['data'])) > 0) { + echo '<td class="dialogText" style="text-align: left; font-weight: bold;">', "Users", "</td>"; + echo '<td class="dialogText" style="text-align: center; font-weight: bold;">', "Delete", "</td>"; + for ($i = 0; $i < $n; $i++) { + putHtml("</tr>"); + echo '<tr ', ($i % 2 == 0) ? 'class="dtrow0"' : 'class="dtrow1"', '>'; + echo '<td><a href="'.$myself.'?user='.$db['data'][$i]['user'].'" class="actionText">'.$db['data'][$i]['user'].'</a>', '</td>'; + echo '<td style="text-align: center;">', '<input type="checkbox" name="delete[]" value="', $db['data'][$i]['user'], '" />', '</td>'; + } + } else { + echo '<td style="color: orange; text-align: center;">No Client Credentials.', '</td>'; + } + putHtml("</tr>"); +} + putHtml("</table>"); + putHtml("</form>"); + putHtml("</center></td></tr></table>"); + putHtml("</center>"); +} // End of HTTP GET +require_once '../common/footer.php'; + +?> Property changes on: branches/1.0/package/webinterface/altweb/admin/xmpp.php ___________________________________________________________________ Added: svn:executable + * Modified: branches/1.0/package/webinterface/altweb/common/license-packages.txt =================================================================== --- branches/1.0/package/webinterface/altweb/common/license-packages.txt 2013-01-11 00:18:23 UTC (rev 5886) +++ branches/1.0/package/webinterface/altweb/common/license-packages.txt 2013-01-12 03:46:38 UTC (rev 5887) @@ -37,3 +37,6 @@ MS-Win Installer~Copyright (c) 2010-2011 Tom Chadwin, Nullsoft, et al. SILK CODEC~Copyright (c) 2010-2012 Skype and/or Microsoft. All rights reserved. Licensed via Digium, Inc. SpanDSP~Copyright (c) 2003-2012 Steve Underwood <st...@co...>. All rights reserved. +Prosody~Copyright (c) 2008-2010 Matthew Wild and Waqas Hussain. +Lua~Copyright (c) 1994-2012 Lua.org, PUC-Rio. All rights reserved. +perl~Copyright (c) 1987-2012 by Larry Wall, et al. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |