From a89eb2fde33d052a815767f17111a05a2b763e24 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Sat, 14 Feb 2009 10:58:32 -0500
Subject: [PATCH] Fixed moving of site when the client is changed.

---
 server/plugins-available/shelluser_base_plugin.inc.php |  108 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 70 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..59cfad9 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,27 @@
 		
 		$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 .= ' --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']);
 			
-			exec($command);
-			$app->log("Added shelluser: ".$data['new']['username'],LOGLEVEL_DEBUG);
+				exec($command);
+				$app->log("Added shelluser: ".$data['new']['username'],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 +101,34 @@
 		
 		$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("Updated shelluser: $command ",LOGLEVEL_DEBUG);
+					$app->log("Updated shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG);
+				} 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 +137,21 @@
 		
 		$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) {
+				$command = 'userdel --force';
+				$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