uid/gid mismatch with directory

If u rsync Data from one Server to a new ispCP-Server, sometimes an error like the following appear in /var/log/apache/suexec.log :

[2010-06-10 15:10:34]: target uid/gid (2036/2036) mismatch with directory (2035/2035) or program (2035/2035)

U can fix it wit a little Script. This script Grab all Domains from the ispCP-Database and set the right uid and gid for the User-Files:

First create a script with your Mysql-Root Password:

[client]
user=root
password=mysql_password

Then create a file (name it like u want) an insert the following code into it:

#!/bin/bash
#
# PROCESS DIRECTORY RIGHTS (OWNERSHIP & CHMOD)
# 
#
# !!!! Edit path to mysql.cnf file !!!!
mycnf=/root/mysql.cnf
 
# sample mysql.cnf looks like this:
# Please uncomment it and add your own Data
# [client]
# user=user_for_ispcp_database_usualy_root
# password=password_of_user
 
for domain_id in `echo "SELECT domain_id FROM ispcp.domain" | mysql --defaults-file=$mycnf -s`;
do
uid=`echo "SELECT domain_uid FROM ispcp.domain WHERE domain_id='$domain_id'" | mysql --defaults-file=$mycnf -s`;
gid=`echo "SELECT domain_gid FROM ispcp.domain WHERE domain_id='$domain_id'" | mysql --defaults-file=$mycnf -s`;
dmn=`echo "SELECT domain_name FROM ispcp.domain WHERE domain_id='$domain_id'" | mysql --defaults-file=$mycnf -s`;
echo "===========================================================";
echo " $dmn";
echo "===========================================================";
 
# process ftp
echo "UPDATE \`ispcp\`.\`ftp_group\` SET \`gid\`='$gid' WHERE \`groupname\`='$dmn'" | mysql --defaults-file=/root/mysql.cnf -s
echo "UPDATE \`ispcp\`.\`ftp_users\` SET \`uid\`=$uid, \`gid\`='$gid' WHERE \`userid\` like '%@$dmn'" | mysql --defaults-file=/root/mysql.cnf -s
chown -R vu$uid:vu$gid /var/www/virtual/$dmn
 
chmod 770 /var/www/virtual/$dmn
chown vu$uid:www-data /var/www/virtual/$dmn
 
chown -R vu$uid:www-data /var/www/virtual/$dmn/backups
chmod 770 /var/www/virtual/$dmn/backups
 
chown -R vu$uid:vu$gid /var/www/virtual/$dmn/cgi-bin
chmod 755 /var/www/virtual/$dmn/phptmp
 
chown -R vu$uid:vu$gid /var/www/virtual/$dmn/errors
chmod 775 /var/www/virtual/$dmn/errors
 
chown -R vu$uid:vu$gid /var/www/virtual/$dmn/htdocs
find /var/www/virtual/$dmn/htdocs -type d -exec chmod 775 {} \;
 
chown vu$uid:www-data /var/www/virtual/$dmn/.ht*
chown vu$uid:www-data /var/www/virtual/$dmn/.svn*
chmod 640 /var/www/virtual/$dmn/.ht*
 
chown -R vu$uid:www-data /var/www/virtual/$dmn/logs
chmod 770 /var/www/virtual/$dmn/logs
 
chown -R vu$uid:www-data /var/www/virtual/$dmn/phptmp
chmod 770 /var/www/virtual/$dmn/phptmp
 
chown -R vu$uid:vu$gid /var/www/fcgi/$dmn
chmod 755 /var/www/fcgi/$dmn
chmod 755 /var/www/fcgi/$dmn/php5-fcgi-starter
 
chown -R vmail:mail /var/mail/virtual/*
sleep 1
 
done

Make the script executable <cli>chmod +x ./myWonderfullNewRenamerScript</cli> And run it <cli>./myWonderfullNewRenamerScript</cli>

Credits

This Wiki is based on the Thread from <fc #FF0000> fulltilt</fc> and the Blog of <fc #FF0000>BenBe</fc>. Thanks for this workarround.

For me it works like a charm. — Samuel Suther 2010/06/10 17:19