<?php require_once 'lib/init.php'; $norender = false; initVars('domain', 'docroot'); $error_documents = array(401, 403, 404, 500); header('Cache-Control: private'); switch ($task) { case 'add': if (!checkPackage('site')) { setmsg(t('The package limitation reached.'), 'warning'); } $dirs = ZFile::getUserDirs($me); if (checktoken()) { $domain = $_REQUEST['domain']; $docroot = $_REQUEST['docroot']; // check domain $break = false; if (true !== ($res = ZVhosts::chkDomain($domain))) { $err['domain'] = t('Domain Invalid.'); if ($res == 'occupied') { $err['domain'] = t('Domain Occupied.'); } $break = true; } // check docroot if (!in_array($docroot, $dirs)) { $err['docroot'] = t('Please select a valid document root.'); $break = true; } $docroot = str_replace('~/', "/home/{$me}/", $docroot);
break; case 'edit': $name = isset($_REQUEST['name']) ? $_REQUEST['name'] : ''; $name = preg_replace("/[^a-z0-9_]+/i", "", $name); if (!$name) { redirect('ftp.php'); } $password = $_REQUEST['password']; $owner = strtok($name, '_'); $users = ZUser::getUsers(); $account = ZFtp::getFtpAccount($name); if (!$account) { setmsg(t('No such user.')); } $myuid = ZUser::getuid($owner); $dirs = ZFile::getUserDirs($owner); $docroot = trim($account->home); $docroot = str_replace("/home/{$owner}", '~', $docroot); if (checktoken()) { $op = $_REQUEST['op']; if ($op == 'remove') { if (ZFtp::removeFtpAccount($name)) { setmsg(t('Ftp Account Deleted.'), 'notice', 'ftp.php'); } } else { if ('suspend' == $op) { if (ZFtp::suspendFtpUser($name, !intval($_REQUEST['suspend']))) { setmsg('', 'notice'); } else { setmsg(t('Error')); }
function getUserDirs($user) { return ZFile::getUserDirs($user); }
function getUserDirs($user) { global $fakeroot; $arr = ZFile::getAllDirs($fakeroot . '/home/' . $user); if (!$arr) { $arr = array(); } array_unshift($arr, '~/'); foreach ($arr as $k => $v) { $arr[$k] = str_replace('\\', '/', str_replace(realpath($fakeroot . '/home/' . $user), '~', $v)); } return $arr; }
function syncQuota() { global $pdo; $arr = file(ZFile::getfile('/etc/passwd')); $uids = array(); foreach ($arr as $v) { $tmp = explode(':', $v); $uids[$tmp[0]] = $tmp[2]; $pdo->update('user', array('uid' => $tmp[2], 'gid' => $tmp[3]), "user='******'"); } $sql = "SELECT * FROM user"; $users = $pdo->fetchAll($sql); foreach ($users as $v) { $user = $v->user; $quota = ZPackage::getPackage($v->package)->space; if (preg_match('/^[\\d\\.]+$/', $quota)) { $quota .= 'G'; } $kb = intval(human2bytes($quota) / 1024); $uid = $uids[$user]; if ($uid < 9000) { continue; } if ($quota == -1) { $kb = 0; } //var_dump($kb, $quota,human2bytes($quota.'GB'));echo '<hr>'; shell_exec("quotaquery set {$uid} {$kb},{$kb},0,0"); shell_exec("usermod -s /zh/bin/shell_{$v->shell} {$user}"); } //exit; }