From a5b276444c1e2fa9c960131723ffd6955fb92f48 Mon Sep 17 00:00:00 2001
From: karailiev <karailiev@ispconfig3>
Date: Tue, 11 Aug 2009 15:20:21 -0400
Subject: [PATCH] ticket 827 For some reason till has made the version number not to load when no user is logged in. Due to ajax login the version number remains not loaded even after login until the whole page is reloaded. I didn't find any comment why is this done, so I revert it.
---
server/plugins-available/shelluser_base_plugin.inc.php | 133 +++++++++++++++++++++++++++++++------------
1 files changed, 95 insertions(+), 38 deletions(-)
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 7e6b485..3f86b42 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -32,6 +32,20 @@
var $plugin_name = 'shelluser_base_plugin';
var $class_name = 'shelluser_base_plugin';
+ var $min_uid = 499;
+
+ //* This function is called during ispconfig installation to determine
+ // if a symlink shall be created for this plugin.
+ function onInstall() {
+ global $conf;
+
+ if($conf['services']['web'] == true) {
+ return true;
+ } else {
+ return false;
+ }
+
+ }
/*
@@ -58,23 +72,40 @@
$app->uses('system');
- // Get the UID of the parent user
- $uid = intval($app->system->getuid($data['new']['puser']));
- if($uid > 999) {
- $command = 'useradd';
- $command .= ' --home '.escapeshellcmd($data['new']['dir']);
- $command .= ' --gid '.escapeshellcmd($data['new']['pgroup']);
- $command .= ' --non-unique ';
- $command .= ' --password '.escapeshellcmd($data['new']['password']);
- $command .= ' --shell '.escapeshellcmd($data['new']['shell']);
- $command .= ' --uid '.escapeshellcmd($uid);
- $command .= ' '.escapeshellcmd($data['new']['username']);
+ if($app->system->is_user($data['new']['puser'])) {
+ // Get the UID of the parent user
+ $uid = intval($app->system->getuid($data['new']['puser']));
+ if($uid > $this->min_uid) {
+ $command = 'useradd';
+ $command .= ' -d '.escapeshellcmd($data['new']['dir']);
+ $command .= ' -g '.escapeshellcmd($data['new']['pgroup']);
+ $command .= ' -o '; // non unique
+ if($data['new']['password'] != '') $command .= ' -p '.escapeshellcmd($data['new']['password']);
+ $command .= ' -s '.escapeshellcmd($data['new']['shell']);
+ $command .= ' -u '.escapeshellcmd($uid);
+ $command .= ' '.escapeshellcmd($data['new']['username']);
- exec($command);
- $app->log("Added shelluser: ".$data['new']['username'],LOGLEVEL_DEBUG);
+ exec($command);
+ $app->log("Executed command: ".$command,LOGLEVEL_DEBUG);
+ $app->log("Added shelluser: ".$data['new']['username'],LOGLEVEL_DEBUG);
+
+ //* Create .bash_history file
+ exec('touch '.escapeshellcmd($data['new']['dir']).'/.bash_history');
+ exec('chmod 755 '.escapeshellcmd($data['new']['dir']).'/.bash_history');
+ exec('chown '.escapeshellcmd($data['new']['username']).':'.escapeshellcmd($data['new']['pgroup']).' '.escapeshellcmd($data['new']['dir']).'/.bash_history');
+
+ //* Disable shell user temporarily if we use jailkit
+ if($data['new']['chroot'] == 'jailkit') {
+ $command = 'usermod -L '.escapeshellcmd($data['new']['username']);
+ exec($command);
+ $app->log("Disabling shelluser temporarily: ".$command,LOGLEVEL_DEBUG);
+ }
+ } else {
+ $app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR);
+ }
} else {
- $app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR);
+ $app->log("Skippung insert of user:".$data['new']['username'].", parent user ".$data['new']['puser']." does not exist.",LOGLEVEL_WARN);
}
}
@@ -83,24 +114,43 @@
$app->uses('system');
- // Get the UID of the parent user
- $uid = intval($app->system->getuid($data['new']['puser']));
- if($uid > 999) {
- $command = 'usermod';
- $command .= ' --home '.escapeshellcmd($data['new']['dir']);
- $command .= ' --gid '.escapeshellcmd($data['new']['pgroup']);
- $command .= ' --non-unique ';
- $command .= ' --password '.escapeshellcmd($data['new']['password']);
- $command .= ' --shell '.escapeshellcmd($data['new']['shell']);
- $command .= ' --uid '.escapeshellcmd($uid);
- $command .= ' --login '.escapeshellcmd($data['new']['username']);
- $command .= ' '.escapeshellcmd($data['old']['username']);
+ if($app->system->is_user($data['new']['puser'])) {
+ // Get the UID of the parent user
+ $uid = intval($app->system->getuid($data['new']['puser']));
+ if($uid > $this->min_uid) {
+ // Check if the user that we want to update exists, if not, we insert it
+ if($app->system->is_user($data['old']['username'])) {
+ $command = 'usermod';
+ $command .= ' --home '.escapeshellcmd($data['new']['dir']);
+ $command .= ' --gid '.escapeshellcmd($data['new']['pgroup']);
+ // $command .= ' --non-unique ';
+ $command .= ' --password '.escapeshellcmd($data['new']['password']);
+ if($data['new']['chroot'] != 'jailkit') $command .= ' --shell '.escapeshellcmd($data['new']['shell']);
+ // $command .= ' --uid '.escapeshellcmd($uid);
+ $command .= ' --login '.escapeshellcmd($data['new']['username']);
+ $command .= ' '.escapeshellcmd($data['old']['username']);
- exec($command);
- $app->log("Updated shelluser: ".$data['new']['username'],LOGLEVEL_DEBUG);
-
+ exec($command);
+ $app->log("Executed command: $command ",LOGLEVEL_DEBUG);
+ $app->log("Updated shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG);
+
+
+ //* Create .bash_history file
+ if(!is_file($data['new']['dir']).'/.bash_history') {
+ exec('touch '.escapeshellcmd($data['new']['dir']).'/.bash_history');
+ exec('chmod 755 '.escapeshellcmd($data['new']['dir']).'/.bash_history');
+ exec('chown '.escapeshellcmd($data['new']['username']).':'.escapeshellcmd($data['new']['pgroup']).' '.escapeshellcmd($data['new']['dir']).'/.bash_history');
+ }
+
+ } else {
+ // The user does not exist, so we insert it now
+ $this->insert($event_name,$data);
+ }
+ } else {
+ $app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR);
+ }
} else {
- $app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR);
+ $app->log("Skippung update for user:".$data['new']['username'].", parent user ".$data['new']['puser']." does not exist.",LOGLEVEL_WARN);
}
}
@@ -109,17 +159,24 @@
$app->uses('system');
- // Get the UID of the user
- $userid = intval($app->system->getuid($data['old']['username']));
- if($userid > 999) {
- $command = 'userdel';
- $command .= ' '.escapeshellcmd($data['old']['username']);
+ if($app->system->is_user($data['old']['username'])) {
+ // Get the UID of the user
+ $userid = intval($app->system->getuid($data['old']['username']));
+ if($userid > $this->min_uid) {
+ // We delete only non jailkit users, jailkit users will be deleted by the jailkit plugin.
+ if ($data['old']['chroot'] != "jailkit") {
+ $command = 'userdel -f';
+ $command .= ' '.escapeshellcmd($data['old']['username']);
- exec($command);
- $app->log("Deleted shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG);
+ exec($command);
+ $app->log("Deleted shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG);
+ }
+ } else {
+ $app->log("UID = $userid for shelluser:".$data['old']['username']." not allowed.",LOGLEVEL_ERROR);
+ }
} else {
- $app->log("UID = $userid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR);
+ $app->log("User:".$data['new']['username']." does not exist in in /etc/passwd, skipping delete.",LOGLEVEL_WARN);
}
}
--
Gitblit v1.9.1