/** * Changes a MySQL user password * * @since 1.0 * @package facileManager * @subpackage fmSQLPass * * @param string $server_name Hostname of the database server * @param integer $server_port Server port to connect to * @param string $admin_user User to login with * @param string $admin_pass User password to login with * @param string $user Database user to change * @param string $user_password New password * @param string $server_group Server group to process * @return string */ function changeMySQLUserPassword($server_name, $server_port, $admin_user, $admin_pass, $user, $user_password, $server_group) { global $__FM_CONFIG; /** Connect to remote server */ $verbose_output = ' --> Connecting to MySQL '; if (!socketTest($server_name, $server_port, 5)) { return $verbose_output . "[failed] - Could not connect to {$server_name} on tcp/{$server_port}\n"; } $remote_connection = @new mysqli($server_name, $admin_user, $admin_pass, null, $server_port); if (!$remote_connection->connect_error) { $verbose_output .= "[ok]\n"; } else { $verbose_output .= '[failed] - ' . $remote_connection->connect_error . "\n"; return $verbose_output; } /** Ensure database user exists before changing the password */ $verbose_output .= " --> Verifying {$user} exists "; list($user_login, $user_host) = explode('@', $user); $user_host_query = !empty($user_host) ? "AND Host='{$user_host}'" : null; if ($result = $remote_connection->query("SELECT User FROM mysql.user WHERE User='******' {$user_host_query}")) { if ($result->num_rows) { $verbose_output .= "[ok]\n --> Updating the password for {$user} "; $remote_connection->query("UPDATE mysql.user SET Password=PASSWORD('{$user_password}') WHERE User='******' {$user_host_query}"); if ($remote_connection->affected_rows > 0) { $verbose_output .= "[ok]\n"; /** Update last changed */ basicUpdate('fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'groups', $server_group, 'group_pwd_change', time(), 'group_id'); /** Flush privileges */ $verbose_output .= ' --> Flushing privileges '; $remote_connection->query('FLUSH PRIVILEGES'); $verbose_output .= $remote_connection->error ? '[failed] - ' . $remote_connection->error . "\n" : "[ok]\n"; /** Log entry */ addLogEntry("Updated MySQL Account ({$server_name} : {$user})."); } else { $verbose_output .= '[failed] - '; $verbose_output .= $remote_connection->error ? $remote_connection->error . "\n" : "Password for {$user} was not different.\n"; } } else { $verbose_output .= "[failed] - User account ({$user}) does not exist.\n"; } } else { $verbose_output .= '[failed] - ' . $remote_connection->error . "\n"; } $remote_connection->close(); return $verbose_output; }
} else { if (getOption('client_auto_register')) { /** Add new server */ $add_server = moduleAddServer('add'); if ($add_server !== true) { $data = _('Could not add server to account.') . "\n"; } } else { $data = _('Client automatic registration is not allowed.') . "\n"; } } } /** Client installs */ if (array_key_exists('install', $_GET)) { /** Set flags */ $data = basicUpdate('fm_' . $__FM_CONFIG[$_POST['module_name']]['prefix'] . 'servers', $_POST['SERIALNO'], 'server_installed', 'yes', 'server_serial_no'); if (function_exists('moduleCompleteClientInstallation')) { moduleCompleteClientInstallation(); } $fm_shared_module_servers->updateClientVersion(); } /** Client upgrades */ if (array_key_exists('upgrade', $_GET)) { if (!isset($__FM_CONFIG[$_POST['module_name']]['min_client_auto_upgrade_version'])) { $__FM_CONFIG[$_POST['module_name']]['min_client_auto_upgrade_version'] = 0; } $current_module_version = getOption('client_version', 0, $_POST['module_name']); if ($_POST['server_client_version'] == $current_module_version) { $data = sprintf(_("Latest version: %s\nNo upgrade available."), $current_module_version) . "\n"; } elseif (version_compare($_POST['server_client_version'], $__FM_CONFIG[$_POST['module_name']]['min_client_auto_upgrade_version'], '<')) { $data = sprintf(_("Latest version: %s\nThis upgrade requires a manual installation."), $current_module_version) . "\n";
/** * Assigns SOA to domain_id * * @since 1.3 * @package facileManager * @subpackage fmDNS * * @param id $soa_id SOA ID to assign * @param id $domain_id Domain ID to assign to * @return boolean */ function assignSOA($soa_id, $domain_id) { global $__FM_CONFIG, $fm_dns_zones; $old_soa_id = getNameFromID($domain_id, "fm_{$__FM_CONFIG['fmDNS']['prefix']}domains", 'domain_', 'domain_id', 'soa_id'); if (basicUpdate("fm_{$__FM_CONFIG['fmDNS']['prefix']}domains", $domain_id, 'soa_id', $soa_id, 'domain_id')) { /** Delete old custom SOA */ if (getNameFromID($old_soa_id, "fm_{$__FM_CONFIG['fmDNS']['prefix']}soa", 'soa_', 'soa_id', 'soa_template') == 'no') { updateStatus("fm_{$__FM_CONFIG['fmDNS']['prefix']}soa", $old_soa_id, 'soa_', 'deleted', 'soa_id'); } if (!isset($fm_dns_zones)) { include ABSPATH . 'fm-modules/' . $_SESSION['module'] . '/classes/class_zones.php'; } /** Update the SOA serial number */ foreach ($fm_dns_zones->getZoneTemplateChildren($domain_id) as $child_id) { $domain_id = getParentDomainID($child_id); if (reloadAllowed($domain_id) && getSOACount($domain_id) && getNSCount($domain_id)) { $this->updateSOAReload($child_id, 'yes'); } } } }
/** * Updates the selected zone */ function update() { global $fmdb, $__FM_CONFIG; $domain_id = sanitize($_POST['domain_id']); /** Validate post */ $_POST['domain_mapping'] = getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_mapping'); $_POST['domain_type'] = getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_type'); $post = $this->validatePost($_POST); if (!is_array($post)) { return $post; } $sql_edit = $domain_name_servers = $domain_view = null; $old_name = displayFriendlyDomainName(getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'domains', 'domain_', 'domain_id', 'domain_name')); $log_message = "Updated a zone ({$old_name}) with the following details:\n"; /** If changing zone to clone or different domain_type, are there any existing associated records? */ if ($post['domain_clone_domain_id'] || $post['domain_type'] != 'master') { basicGet('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'records', $domain_id, 'record_', 'domain_id'); if ($fmdb->num_rows) { return __('There are associated records with this zone.'); } } /** Format domain_view */ $log_message_views = null; if (is_array($post['domain_view'])) { foreach ($post['domain_view'] as $val) { if ($val == 0) { $domain_view = 0; break; } $domain_view .= $val . ';'; $view_name = getNameFromID($val, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'views', 'view_', 'view_id', 'view_name'); $log_message_views .= $val ? "{$view_name}; " : null; } $post['domain_view'] = rtrim($domain_view, ';'); } /** Format domain_name_servers */ $log_message_name_servers = null; foreach ($post['domain_name_servers'] as $val) { if ($val == '0') { $domain_name_servers = 0; break; } $domain_name_servers .= $val . ';'; $server_name = getNameFromID($val, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', 'server_', 'server_id', 'server_name'); $log_message_name_servers .= $val ? "{$server_name}; " : null; } $post['domain_name_servers'] = rtrim($domain_name_servers, ';'); if (!$post['domain_name_servers']) { $post['domain_name_servers'] = 0; } $exclude = array('submit', 'action', 'domain_id', 'domain_required_servers', 'domain_forward'); foreach ($post as $key => $data) { if (!in_array($key, $exclude)) { $sql_edit .= strlen(sanitize($data)) ? $key . "='" . mysql_real_escape_string($data) . "'," : $key . '=NULL,'; if ($key == 'domain_view') { $data = $log_message_views; } if ($key == 'domain_name_servers') { $data = $log_message_name_servers; } $log_message .= $data ? formatLogKeyData('domain_', $key, $data) : null; if ($key == 'domain_default' && $data == 'yes') { $query = "UPDATE `fm_{$__FM_CONFIG['fmDNS']['prefix']}domains` SET {$key} = 'no' WHERE `account_id`='{$_SESSION['user']['account_id']}'"; $result = $fmdb->query($query); } } } $sql_edit .= "domain_reload='no'"; /** Set the server_build_config flag for existing servers */ if (getSOACount($domain_id) && getNSCount($domain_id)) { setBuildUpdateConfigFlag(getZoneServers($domain_id, array('masters', 'slaves')), 'yes', 'build'); } /** Update the zone */ $query = "UPDATE `fm_{$__FM_CONFIG['fmDNS']['prefix']}domains` SET {$sql_edit} WHERE `domain_id`='{$domain_id}' AND `account_id`='{$_SESSION['user']['account_id']}'"; $result = $fmdb->query($query); if ($fmdb->sql_errors) { return __('Could not update the zone because a database error occurred.'); } $rows_affected = $fmdb->rows_affected; /** Update the child zones */ if ($post['domain_template'] == 'yes') { $query = "UPDATE `fm_{$__FM_CONFIG['fmDNS']['prefix']}domains` SET domain_view='{$post['domain_view']}' WHERE `domain_template_id`='{$domain_id}' AND `account_id`='{$_SESSION['user']['account_id']}'"; $result = $fmdb->query($query); if ($fmdb->sql_errors) { return __('Could not update the child zones because a database error occurred.'); } $rows_affected += $fmdb->rows_affected; } /** Add mandatory config options */ $query = "INSERT INTO `fm_{$__FM_CONFIG['fmDNS']['prefix']}config` \n\t\t\t(account_id,domain_id,cfg_name,cfg_data) VALUES ({$_SESSION['user']['account_id']}, {$domain_id}, "; $required_servers = sanitize($post['domain_required_servers']); if (!$post['domain_template_id']) { if ($post['domain_type'] == 'forward') { if (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_data', null, "AND cfg_name='forwarders'")) { basicUpdate("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_id', null, "AND cfg_name='forwarders'"), 'cfg_data', $required_servers, 'cfg_id'); } else { $result = $fmdb->query($query . "'forwarders', '" . $required_servers . "')"); } $log_message .= formatLogKeyData('domain_', 'forwarders', $required_servers); $domain_forward = sanitize($post['domain_forward'][0]); if (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_data', null, "AND cfg_name='forward'")) { basicUpdate("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_id', null, "AND cfg_name='forward'"), 'cfg_data', $domain_forward, 'cfg_id'); } else { $result = $fmdb->query($query . "'forward', '" . $domain_forward . "')"); } $log_message .= formatLogKeyData('domain_', 'forward', $domain_forward); } elseif (in_array($post['domain_type'], array('slave', 'stub'))) { if (getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_data', null, "AND cfg_name='masters'")) { basicUpdate("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", getNameFromID($domain_id, 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'config', 'cfg_', 'domain_id', 'cfg_id', null, "AND cfg_name='masters'"), 'cfg_data', $required_servers, 'cfg_id'); } else { $query .= "'masters', '" . $required_servers . "')"; $result = $fmdb->query($query); } $log_message .= formatLogKeyData('domain_', 'masters', $required_servers); } } else { /** Remove all zone config options */ basicDelete("fm_{$__FM_CONFIG['fmDNS']['prefix']}config", $domain_id, 'domain_id'); } if ($fmdb->sql_errors) { return __('Could not update zone because a database error occurred.') . ' ' . $fmdb->last_error; } /** Return if there are no changes */ if ($rows_affected + ($fmdb->rows_affected = 0)) { return true; } /** Set the server_build_config flag for new servers */ if (getSOACount($domain_id) && getNSCount($domain_id)) { setBuildUpdateConfigFlag(getZoneServers($domain_id, array('masters', 'slaves')), 'yes', 'build'); } /** Delete associated records from fm_{$__FM_CONFIG['fmDNS']['prefix']}track_builds */ basicDelete('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'track_builds', $domain_id, 'domain_id', false); addLogEntry($log_message); return true; }
/** * Deletes the selected user * * @since 1.0 * @package facileManager */ function delete($id, $type = 'user') { global $fm_name; if ($type == 'user') { /** Ensure user is not current LDAP template user */ if (getOption('auth_method') == 2) { $template_user_id = getOption('ldap_user_template'); if ($id == $template_user_id) { return _('This user is the LDAP user template and cannot be deleted at this time.'); } } $field = 'user_login'; } elseif ($type == 'group') { $field = 'group_name'; if (basicUpdate('fm_users', $id, 'user_group', null, 'user_group') === false) { return _('This group could not be removed from the associated users.'); } } $tmp_name = getNameFromID($id, 'fm_' . $type . 's', $type . '_', $type . '_id', $field); if (!updateStatus('fm_' . $type . 's', $id, $type . '_', 'deleted', $type . '_id')) { return sprintf(_('This %s could not be deleted.'), $type) . "\n"; } else { addLogEntry(sprintf(_("Deleted %s '%s'."), $type, $tmp_name), $fm_name); return true; } }