Author: fapeeler
Date: Fri Aug 28 18:36:11 2009
New Revision: 808983

URL: http://svn.apache.org/viewvc?rev=808983&view=rev
Log:
VCL-185

added logoff_user routine, user del fails if user is still logged on



Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm?rev=808983&r1=808982&r2=808983&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm Fri Aug 28 
18:36:11 2009
@@ -97,6 +97,11 @@
 
        my @sshcmd;
 
+       # Force user off computer 
+       if ($self->logoff_user()){
+               notify($ERRORS{'OK'}, 0, "forced $user_unityid off 
$computer_node_name");
+       }
+
        # Remove user and clean external ssh file
        if ($self->delete_user()) {
                notify($ERRORS{'OK'}, 0, "$user_unityid deleted from 
$computer_node_name");
@@ -477,6 +482,47 @@
        return $GATEWAY;
 }
 
+sub logoff_user {
+       my $self = shift;
+       if (ref($self) !~ /linux/i) {
+               notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a 
function, it must be called as a class method");
+               return 0;
+       }
+
+       # Make sure the user login ID was passed
+       my $user_login_id = shift;
+       $user_login_id = $self->data->get_user_login_id() if (!$user_login_id);
+       if (!$user_login_id) {
+               notify($ERRORS{'WARNING'}, 0, "user could not be determined");
+               return 0;
+       }
+
+       # Make sure the user login ID was passed
+       my $computer_node_name = shift;
+       $computer_node_name = $self->data->get_computer_node_name() if 
(!$computer_node_name);
+       if (!$computer_node_name) {
+               notify($ERRORS{'WARNING'}, 0, "computer node name could not be 
determined");
+               return 0;
+       }
+
+       #Make sure the identity key was passed
+       my $image_identity = shift;
+       $image_identity = $self->data->get_image_identity() if 
(!$image_identity);
+       if (!$image_identity) {
+               notify($ERRORS{'WARNING'}, 0, "image identity keys could not be 
determined");
+               return 0;
+       }
+
+       my $logoff_cmd = "pkill -KILL -u $user_login_id";
+       if (run_ssh_command($computer_node_name, $image_identity, $logoff_cmd, 
"root")) {
+                       notify($ERRORS{'DEBUG'}, 0, "logged off $user_login_id 
from $computer_node_name");
+       }
+       else {
+               notify($ERRORS{'DEBUG'}, 0, "failed to log off $user_login_id 
from $computer_node_name");
+       }
+
+       return 1;
+}
 
 #/////////////////////////////////////////////////////////////////////////////
 


Reply via email to