adding alternc-upnp for home hosted server, 1st step

This commit is contained in:
Benjamin Sonntag 2012-09-02 16:36:48 +00:00
parent 591ba86425
commit 5be25b0945
9 changed files with 242 additions and 2 deletions

6
.gitattributes vendored
View File

@ -593,3 +593,9 @@ tools/top_ftp_users -text
tools/top_http_users -text
tools/top_mysql_users -text
/tx-to-repos.sh -text
upnp/Makefile -text
upnp/adminmenu_upnp.php -text
upnp/m_upnp.php -text
upnp/update_upnp.sh -text
upnp/upnp-cron -text
upnp/upnp.sql -text

33
debian/control vendored
View File

@ -91,7 +91,7 @@ Description: Squirrelmail-Webmail plugin and configuration for AlternC
.
More information at http://www.alternc.com/
Homepage: http://www.alternc.com/
Description-fr.UTF-8: Suite logicielle d'hébergement mutualisé pour Debian
Description-fr.UTF-8: Webmail Squirrelmail pour AlternC
AlternC est un logiciel d'hébergement mutualisé pour serveur Linux.
Il permet de gérer les sites web, domaines, ftp, emails, alias,
statistiques web, listes de discussions, comptes jabber, etc.
@ -122,7 +122,7 @@ Description: Roundcube-Webmail plugin and configuration for AlternC
.
More information at http://www.alternc.com/
Homepage: http://www.alternc.com/
Description-fr.UTF-8: Suite logicielle d'hébergement mutualisé pour Debian
Description-fr.UTF-8: Webmail Roundcube pour AlternC
AlternC est un logiciel d'hébergement mutualisé pour serveur Linux.
Il permet de gérer les sites web, domaines, ftp, emails, alias,
statistiques web, listes de discussions, comptes jabber, etc.
@ -150,3 +150,32 @@ Description: Awstats statistics module for AlternC
managment to the virtual desktop.
.
More information on http://www.alternc.com/.
Package: alternc-upnp
Architecture: all
Pre-depends: debconf (>= 0.5.00) | debconf-2.0
Depends: debianutils (>= 1.13.1), alternc (>= 1.1), miniupnpc
Description: UPnP client for AlternC
AlternC is a mutualized hosting software manager for Linux.
It allows you to manage your websites, domains, ftp, emails, aliases,
web statistics, mailing-lists, jabber accounts, etc.
.
This extension to AlternC is installing a UPnP IGD client and make it so
that your router required tcp and udp port are forwarded to AlternC.
You need that only if your AlternC's server is behind a NAT router.
.
More information at http://www.alternc.com/
Homepage: http://www.alternc.com/
Description-fr.UTF-8: Client UPnP pour AlternC
AlternC est un logiciel d'hébergement mutualisé pour serveur Linux.
Il permet de gérer les sites web, domaines, ftp, emails, alias,
statistiques web, listes de discussions, comptes jabber, etc.
.
Cette extension d'AlternC installe un client UPnP IGD et fait de telle
sorte que les ports udp et tcp nécessaire au fonctionnement de votre
serveur sous AlternC soient transmis depuis votre routeur.
Vous n'avez besoin de cette extension que si votre serveur AlternC est
situé derrière un routeur NAT.
.
Pour plus d'informations, consultez http://www.alternc.com/

3
debian/rules vendored
View File

@ -99,6 +99,9 @@ install: build
# alternc-squirrelmail:
(cd squirrelmail && $(MAKE) install DESTDIR=$(CURDIR)/debian/alternc-squirrelmail)
# alternc-upnp
(cd upnp && $(MAKE) install DESTDIR=$(CURDIR)/debian/alternc-upnp)
# alternc-awstats:
(cd awstats && $(MAKE) install DESTDIR=$(CURDIR)/debian/alternc-awstats)
cd ..

32
upnp/Makefile Normal file
View File

@ -0,0 +1,32 @@
# ----------------------------------------------------------------------
# AlternC - Web Hosting System
# Copyright (C) 2000-2012 by the AlternC Development Team.
# https://alternc.org/
# ----------------------------------------------------------------------
# LICENSE
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License (GPL)
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# To read the license please visit http://www.gnu.org/copyleft/gpl.html
# ----------------------------------------------------------------------
# Purpose of file: Install the files of alternc-upnp packages
# ----------------------------------------------------------------------
install:
# Desktop files
install -m 644 m_upnp.php $(DESTDIR)/var/alternc/bureau/class/
install -m 644 upnp_list.php upnp_change.php $(DESTDIR)/var/alternc/bureau/admin/
install -m 644 adminmenu_upnp.php $(DESTDIR)/var/alternc/bureau/admin/
# Cron
install -m 755 update_upnp.sh $(DESTDIR)/usr/lib/alternc/
# Install script
install -m 644 upnp.sql $(DESTDIR)/usr/share/alternc/install/
install -m 755 upnp-install $(DESTDIR)/usr/lib/alternc/install.d

1
upnp/adminmenu_upnp.php Normal file
View File

@ -0,0 +1 @@
<a href="upnp_list.php"><?php __("Manage UPnP port forwarding"); ?></a>

104
upnp/m_upnp.php Normal file
View File

@ -0,0 +1,104 @@
<?php
/*
----------------------------------------------------------------------
AlternC - Web Hosting System
Copyright (C) 2000-2012 by the AlternC Development Team.
https://alternc.org/
----------------------------------------------------------------------
LICENSE
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License (GPL)
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
To read the license please visit http://www.gnu.org/copyleft/gpl.html
----------------------------------------------------------------------
Purpose of file: Manage UPnP ports forwarding from router
----------------------------------------------------------------------
*/
/**
* This class handle UPnP forwarding from a IGD/UPnP compliant router
* you need this only when you are behind a IGD-compliant router
* each class may exports a hook that defined named port/protocol to
* forward to the local IP address of the server.
* this class manage the upnp table
* and its configuration from admin control panel
*/
class m_upnp {
/* ----------------------------------------------------------------- */
/** get the list of current upnp forwards and their status
* @return array the attributes of all port-forwards
*/
function get_forward_list() {
global $db,$err;
$err->log("upnp","get_forward_list");
$db->query("SELECT * FROM upnp");
$res=array();
while ($db->next_record()) {
$res[]=$db->Record;
}
return $res;
}
/* ----------------------------------------------------------------- */
/** enable a upnp port in the upnp table
* @param integer the id of the port to enable
* @return boolean TRUE if the port has been properly forwarded
* FALSE if an error occurred
*/
function enable_port($id) {
global $db,$err;
$id=intval($id);
$err->log("upnp","enable_port($id)");
$db->query("SELECT enabled FROM upnp WHERE id=$id;");
if (!$db->next_record()) {
$err->raise("upnp",_("The required port is not currently defined"));
return false;
}
if (!$db->f("enabled")) {
$db->query("UPDATE upnp SET enabled=1 WHERE id=$id;");
$err->raise("upnp",_("The specified upnp port is now enabled"));
return true;
}
$err->raise("upnp",_("The specified upnp port is already enabled"));
return true;
}
/* ----------------------------------------------------------------- */
/** disable a upnp port in the upnp table
* @param integer the id of the port to disable
* @return boolean TRUE if the port has been properly forwarded
* FALSE if an error occurred
*/
function disable_port($id) {
global $db,$err;
$id=intval($id);
$err->log("upnp","disable_port($id)");
$db->query("SELECT enabled FROM upnp WHERE id=$id;");
if (!$db->next_record()) {
$err->raise("upnp",_("The required port is not currently defined"));
return false;
}
if ($db->f("enabled")) {
$db->query("UPDATE upnp SET enabled=0 WHERE id=$id;");
$err->raise("upnp",_("The specified upnp port is now disabled"));
return true;
}
$err->raise("upnp",_("The specified upnp port is already disabled"));
return true;
}
}

47
upnp/update_upnp.sh Normal file
View File

@ -0,0 +1,47 @@
#!/bin/bash
#
# This configures the upnp client for AlternC
#
CONFIG_FILE="/etc/alternc/local.sh"
if [ ! -r "$CONFIG_FILE" ]; then
echo "Can't access $CONFIG_FILE."
exit 1
fi
. "$CONFIG_FILE"
# Some vars
umask 022
LOCK_FILE="/tmp/alternc-upnp.lock"
# Somes check before start operations
if [ `id -u` -ne 0 ]; then
log_error "must be launched as root"
elif [ -z "$INTERNAL_IP" -o -z "$PUBLIC_IP" ]; then
log_error "Bad configuration. Please use: dpkg-reconfigure alternc"
elif [ -f "$LOCK_FILE" ]; then
process=$(ps f -p `cat "$LOCK_FILE"|tail -1`|tail -1|awk '{print $NF;}')
if [ "$(basename $process)" = "$(basename "$0")" ] ; then
log_error "last cron unfinished or stale lock file ($LOCK_FILE)."
else
rm "$LOCK_FILE"
fi
fi
# We lock the application
echo $$ > "$LOCK_FILE"
# Check the status of the router
upnpc -s
if [ "$?" != "0" ]
then
fi
rm -f "$LOCK_FILE"
exit 0

3
upnp/upnp-cron Normal file
View File

@ -0,0 +1,3 @@
# This shell script configures the UPnP client if necessary:
* * * * * root /usr/lib/alternc/update_upnp.sh

15
upnp/upnp.sql Normal file
View File

@ -0,0 +1,15 @@
CREATE TABLE IF NOT EXISTS `upnp` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`class` varchar(64) NOT NULL,
`protocol` varchar(3) NOT NULL,
`port` int(10) unsigned NOT NULL,
`mandatory` tinyint(3) unsigned NOT NULL,
`enabled` tinyint(3) unsigned NOT NULL,
`lastcheck` datetime NOT NULL,
`lastupdate` datetime NOT NULL,
`result` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM COMMENT='UPnP port forwards and their status.';