| krakoukas |
5th December 2007 18:20 |
Webdav + quota access to web's root patch
Here is my contribution for giving a webdav access to ISPconfig web's roots.
It consists in a modification of /root/ispconfig/scripts/lib/config.lib.php (after line 1660 in 2.2.18)
If your ISPconfig server hostname is www.mydomain.com, for account like userhost.userdomain.com you will get access to your webdav account through https://www.mydomain.com/userhost.userdomain.com/
You will need a database for webdav user mysql_auth mechanism:
DB: webdav, Table: users (login, pass)
Code:
$mod->tpl->assign( array( FP_RESOURCE_CONFIG => $fp_resource_config,
FP_ACCESS_CONFIG => $fp_access_config));
$mod->tpl->parse(TABLE, table);
/*
HERE Add webdav ssl access to /web directories
*/
if ($go_info["server"]["webdav"] == 1) {
$myserver = trim(shell_exec("hostname -f"), "\r\n");
$webdav = "
<VirtualHost ".$web["web_ip"].":443>
ServerName ".$myserver.":443
ServerAdmin webmaster@".$web["web_domain"]."
DocumentRoot /var/www/sharedip
SetEnvIf User-Agent \".*MSIE.*\" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
<IfModule mod_ssl.c>
NameVirtualHost ".$myserver.":443
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/new.cert.cert
SSLCertificateKeyFile /etc/apache2/ssl/new.cert.key
</IfModule>
";
foreach ($webs as $web)
{
$webdav_root = $mod->system->server_conf["server_path_httpd_root"]."/"."web".$web["doc_id"]."/"."web";
$my_quota = $web["web_speicher"]."000";
$webdav .= "Alias /".$web["web_host"].".".$web["web_domain"]." ".$webdav_root;
$mod->log("Update QUOTA for ".$web["web_host"].".".$web["web_domain"].": ".$web["web_speicher"]." Mo - Webdav access ".$webdav_root);
$webdav .= "
<Location /".$web["web_host"].".".$web["web_domain"].">
DAV On
AddType text/plain .html
AddType text/plain .htm
AddType text/plain .js
AddType text/plain .css
AddType text/plain .xml
AddType text/plain .php
DAVSATMaxAreaSize ".$my_quota."
AuthType Basic
AuthName \"Data Webdav Access\"
Auth_MySQL_DB webdav
Auth_MySQL_Password_Table users
Auth_MySQL_Username_Field login
Auth_MySQL_Password_Field pass
Auth_MySQL_Empty_Passwords off
Auth_MySQL_Encryption_Types PHP_MD5
<Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require user ".$web["web_host"].".".$web["web_domain"]."
</Limit>
</Location>";
}
$webdav .= "
</VirtualHost>";
}
if(!empty($webs)){
$vhost_text = $mod->tpl->fetch();
// ICI Add Webdav to vhost
if ($go_info["server"]["webdav"] == 1) $vhost_text .= $webdav;
} else {
$vhost_text = "";
}
It modifies your vhost file if you add : $go_info["server"]["webdav"] = 1;
in /home/admispconfig/ispconfig/lib/config.inc.php
For mod_dav quota and auth_mysql apache2 needs to be patched and right modules have to be loaded and configure:
Quote:
# Normal Install apache2 and required modules
apt-get install apache2 libapache-mod-dav libapache2-mod-auth-mysql apache2-doc
# Compile quota patched webdav module
cd /usr/src
wget http://leche.goodcrew.ne.jp/webdav/w...-quota-2.3.txt
wget http://archive.apache.org/dist/httpd...-2.0.55.tar.gz
tar -xvzf httpd-2.0.55.tar.gz
cd httpd-2.0.55
patch -p2 < ../webdav-2.0.55-quota-2.3.txt
./configure --enable-modules=most --enable-mods-shared=all
make
# Replace mod_dav module with patched one
mv /usr/lib/apache2/modules/mod_dav.so /usr/lib/apache2/modules/mod_dav.so-bkp
mv /usr/lib/apache2/modules/mod_dav_fs.so /usr/lib/apache2/modules/mod_dav_fs.so-bkp
cp ./modules/dav/main/.libs/mod_dav.so /usr/lib/apache2/modules/mod_dav.so
cp ./modules/dav/fs/.libs/mod_dav_fs.so /usr/lib/apache2/modules/mod_dav_fs.so
# Activate apache webdav module
ln -s /etc/apache2/mods-available/dav_fs.conf /etc/apache2/mods-enabled/dav_fs.conf
ln -s /etc/apache2/mods-available/dav_fs.load /etc/apache2/mods-enabled/dav_fs.load
ln -s /etc/apache2/mods-available/dav.load /etc/apache2/mods-enabled/dav.load
# Enable and Configure auth_mysql
ln -s /etc/apache2/mods-available/auth_mysql.load /etc/apache2/mods-enabled/auth_mysql.load
ln -s /etc/apache2/mods-available/auth_mysql.conf /etc/apache2/mods-enabled/auth_mysql.conf
# Give database reference (user/password) for auth_mysql
vi /etc/apache2/mods-available/auth_mysql.conf
Quote:
Auth_MySQL_Info localhost davdbuser davdbpasswd
|
/etc/init.d/apache2 restart
|
For SSL certificate:
Quote:
cd /etc/apache2/ssl/
openssl req -new > new.cert.csr
# Remove password
openssl rsa -in privkey.pem -out new.cert.key
# Key signing by cert
openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 3650
chmod 400 /etc/apache2/ssl/new.cert.key
|
Now have fun and Enjoy!
PS: If your accounts always have ISPconfig users, you can use sys_user database for mysql_auth, and modify a little this script...
|