You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by fa...@apache.org on 2012/03/28 20:12:26 UTC

svn commit: r1306520 - in /incubator/vcl/trunk/managementnode: bin/vcld lib/VCL/DataStructure.pm lib/VCL/Module/OS.pm lib/VCL/Module/OS/Linux.pm lib/VCL/inuse.pm lib/VCL/utils.pm

Author: fapeeler
Date: Wed Mar 28 18:12:26 2012
New Revision: 1306520

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

updated to handle changes in server reservations:
- starts with state servermodified
- add/remove users based on changes in the VCL user group through manage groups


Modified:
    incubator/vcl/trunk/managementnode/bin/vcld
    incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm
    incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm
    incubator/vcl/trunk/managementnode/lib/VCL/utils.pm

Modified: incubator/vcl/trunk/managementnode/bin/vcld
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/bin/vcld?rev=1306520&r1=1306519&r2=1306520&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/bin/vcld (original)
+++ incubator/vcl/trunk/managementnode/bin/vcld Wed Mar 28 18:12:26 2012
@@ -206,7 +206,7 @@ sub main () {
 			$ENV{database_select_calls} = {};
 
 			# Make sure the request state is valid
-			if ($request_state_name !~ /inuse|reserved|deleted|timeout|reclaim|reload|new|tomaintenance|image|imageprep|makeproduction|imageinuse|complete|failed|pending|maintenance|tovmhostinuse|rebootsoft|reboothard|reinstall/) {
+			if ($request_state_name !~ /inuse|reserved|deleted|timeout|reclaim|reload|new|tomaintenance|image|imageprep|makeproduction|imageinuse|complete|failed|pending|maintenance|tovmhostinuse|rebootsoft|reboothard|reinstall|servermodified/) {
 				notify($ERRORS{'WARNING'}, $LOGFILE, "assigned request in unsupported state: $request_state_name");
 				next REQUEST;
 			}
@@ -501,7 +501,7 @@ sub make_new_child {
 	}
 
 	# The imageinuse state is now handled by inuse.pm
-	if ($state =~ /^(imageinuse|rebootsoft|reboothard)$/) {
+	if ($state =~ /^(imageinuse|rebootsoft|reboothard|servermodified)$/) {
 		notify($ERRORS{'DEBUG'}, $LOGFILE, "request will be processed by inuse.pm");
 		$state_module = "VCL::inuse";
 	}

Modified: incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm?rev=1306520&r1=1306519&r2=1306520&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm Wed Mar 28 18:12:26 2012
@@ -397,7 +397,7 @@ $SUBROUTINE_MAPPINGS{server_request_fixe
 $SUBROUTINE_MAPPINGS{server_request_admingroupid} = '$self->request_data->{reservation}{RESERVATION_ID}{serverrequest}{admingroupid}';
 $SUBROUTINE_MAPPINGS{server_request_logingroupid} = '$self->request_data->{reservation}{RESERVATION_ID}{serverrequest}{logingroupid}';
 $SUBROUTINE_MAPPINGS{server_request_monitored} = '$self->request_data->{reservation}{RESERVATION_ID}{serverrequest}{monitored}';
-$SUBROUTINE_MAPPINGS{server_ssh_allow_users} = '$self->request_data->{user}{unityid}';
+$SUBROUTINE_MAPPINGS{server_allow_users} = '$self->request_data->{user}{unityid}';
 
 $SUBROUTINE_MAPPINGS{imagerevision_comments} = '$self->request_data->{reservation}{RESERVATION_ID}{imagerevision}{comments}';
 $SUBROUTINE_MAPPINGS{imagerevision_date_created} = '$self->request_data->{reservation}{RESERVATION_ID}{imagerevision}{datecreated}';

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm?rev=1306520&r1=1306519&r2=1306520&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm Wed Mar 28 18:12:26 2012
@@ -2093,6 +2093,7 @@ sub manage_server_access {
 	my $server_request_admingroupid = $self->data->get_server_request_admingroupid();
 	my $server_request_logingroupid = $self->data->get_server_request_logingroupid();
 	my $user_login_id_owner         = $self->data->get_user_login_id();
+	my $user_id_owner		           = $self->data->get_user_id();
 
 	# Build list of users.
 	# If in admin group set admin flag
@@ -2103,7 +2104,7 @@ sub manage_server_access {
 	my @userlist_admin;
 	my @userlist_login;
 	my %user_hash;
-	my $ssh_allow_list;
+	my $allow_list;
 
 	if ($server_request_admingroupid) {
 		@userlist_admin = getusergroupmembers($server_request_admingroupid);
@@ -2112,54 +2113,61 @@ sub manage_server_access {
 		@userlist_login = getusergroupmembers($server_request_logingroupid);
 	}	
 	
-	notify($ERRORS{'OK'}, 0, " admin list= @userlist_admin");
-	notify($ERRORS{'OK'}, 0, " login list= @userlist_login");
-	
+	notify($ERRORS{'OK'}, 0, " admin login list= @userlist_admin");
+	notify($ERRORS{'OK'}, 0, " nonadmin login list= @userlist_login");
 	
 	if (scalar @userlist_admin > 0) {
 		foreach my $str (@userlist_admin) {
-			my ($username,$uid,$vcl_user_id) = split(/:/, $str);
+			my ($username,$uid,$vcl_user_id) = 0;
+			($username,$uid,$vcl_user_id) = split(/:/, $str);
 			my ($correct_username, $user_domain) = split /@/, $username;
-         $user_hash{$uid}{"username"} = $correct_username;
-			$user_hash{$uid}{"uid"}	= $uid;
-			$user_hash{$uid}{"vcl_user_id"}	= $vcl_user_id;
-			$user_hash{$uid}{"rootaccess"} = 1;
-			notify($ERRORS{'OK'}, 0, "adding admin $uid for $username ");
+         $user_hash{$vcl_user_id}{"username"} = $correct_username;
+			$user_hash{$vcl_user_id}{"uid"} = $uid;
+			$user_hash{$vcl_user_id}{"vcl_user_id"} = $vcl_user_id;
+			$user_hash{$vcl_user_id}{"rootaccess"} = 1;
+			notify($ERRORS{'DEBUG'}, 0, "adding admin vcl_user_id= $vcl_user_id uid= $uid for $username ");
 		}
 	}		
 	if (scalar @userlist_login > 0) {
 		foreach my $str (@userlist_login) {
-			notify($ERRORS{'OK'}, 0, "admin str= $str");
-			my ($username, $uid,$vcl_user_id) = split(/:/, $str);
+			notify($ERRORS{'OK'}, 0, "nonadmin user str= $str");
+			my ($username, $uid,$vcl_user_id) = 0;
+			($username, $uid,$vcl_user_id) = split(/:/, $str);
 			my ($correct_username, $user_domain) = split /@/, $username;
 			if (!exists($user_hash{$uid})) {
-				$user_hash{$uid}{"username"} = $correct_username;
-				$user_hash{$uid}{"uid"}	= $uid;
-				$user_hash{$uid}{"vcl_user_id"}	= $vcl_user_id;
-				$user_hash{$uid}{"rootaccess"} = 2;
-				notify($ERRORS{'OK'}, 0, "adding $uid for $username ");
+				$user_hash{$vcl_user_id}{"username"} = $correct_username;
+				$user_hash{$vcl_user_id}{"uid"}	= $uid;
+				$user_hash{$vcl_user_id}{"vcl_user_id"}	= $vcl_user_id;
+				$user_hash{$vcl_user_id}{"rootaccess"} = 2;
+				notify($ERRORS{'DEBUG'}, 0, "adding $vcl_user_id for $username ");
 			}
 			else {
-				notify($ERRORS{'OK'}, 0, "$uid for $username exists in user_hash, skipping");
+				notify($ERRORS{'OK'}, 0, "$vcl_user_id for $username exists in user_hash, skipping");
 			}
 		}
 	}	
 
 	# Collect users in reservationaccounts table
 	my %res_accounts = get_reservation_accounts($reservation_id);
+	notify($ERRORS{'DEBUG'}, 0, "res_accounts:". format_data(%res_accounts));
 	my $not_standalone_list = "";
 	if(defined($ENV{management_node_info}{NOT_STANDALONE}) && $ENV{management_node_info}{NOT_STANDALONE}){
 		$not_standalone_list = $ENV{management_node_info}{NOT_STANDALONE};
 	}
 
+	#Add users
 	foreach my $userid (sort keys %user_hash) {
 		next if (!($userid));
 		#Skip reservation owner, this account is processed in the new and reserved states
-		next if ($userid eq $user_login_id_owner);
+		notify($ERRORS{'DEBUG'}, 0, "userid= $userid  user_id_owner= $user_id_owner ");
+		if ($userid eq $user_id_owner) {
+			$allow_list .= " $user_hash{$userid}{username}";
+			next;
+		}
 		my $standalone = 0;
 		if(!exists($res_accounts{$userid})){
 			# check affiliation
-			notify($ERRORS{'OK'}, 0, "checking affiliation for $userid");
+			notify($ERRORS{'DEBUG'}, 0, "checking affiliation for $userid");
 			my $affiliation_name = get_user_affiliation($user_hash{$userid}{vcl_user_id}); 
 			if(defined($affiliation_name)) {
 
@@ -2176,34 +2184,55 @@ sub manage_server_access {
 				$user_hash{$userid}{"passwd"} = 0;
 			}
 			
-			if (update_reservation_accounts($reservation_id,$user_hash{$userid}{vcl_user_id},$user_hash{$userid}{passwd})) {
-				notify($ERRORS{'OK'}, 0, "Inserted $reservation_id,$user_hash{$userid}{vcl_user_id},$user_hash{$userid}{passwd} into reservationsaccounts table");
-			
+			if (update_reservation_accounts($reservation_id,$userid,$user_hash{$userid}{passwd},"add")) {
+				notify($ERRORS{'OK'}, 0, "Inserted $reservation_id,$userid,$user_hash{$userid}{passwd} into reservationsaccounts table");
 			}
 			
 			# Create user on the OS
-			if($self->create_user($user_hash{$userid}{username},$user_hash{$userid}{passwd},$userid,$user_hash{$userid}{rootaccess},$standalone)) {
+			if($self->create_user($user_hash{$userid}{username},$user_hash{$userid}{passwd},$user_hash{$userid}{uid},$user_hash{$userid}{rootaccess},$standalone)) {
 				notify($ERRORS{'OK'}, 0, "Successfully created user $user_hash{$userid}{username} on $computer_node_name");
 			}
 			else {
 				notify($ERRORS{'WARNING'}, 0, "Failed to create user on $computer_node_name ");
 			}
 			
-			$ssh_allow_list .= " $user_hash{$userid}{username}";
+			$allow_list .= " $user_hash{$userid}{username}";
 
-		
 		}
 		else {
-			notify($ERRORS{'WARNING'}, 0, "$userid exists in reservationaccounts table, assuming it exists on OS");
+			notify($ERRORS{'DEBUG'}, 0, "$userid exists in reservationaccounts table, assuming it exists on OS");
 		}
 			
 	}
-	notify($ERRORS{'OK'}, 0, "ssh_allow_list= $ssh_allow_list");
+	
+	#Remove anyone listed in reservationaccounts list that is not in user_hash
+	foreach my $res_userid (sort keys %res_accounts) {
+		notify($ERRORS{'OK'}, 0, "res_userid= $res_userid username= $res_accounts{$res_userid}{username}");
+		#Skip reservation owner, this account is processed in the new and reserved states
+      if ($res_userid eq $user_login_id_owner) {
+			$allow_list .= " $res_accounts{$res_userid}{username}";
+			next;
+		}
+		if(!exists($user_hash{$res_userid})) {
+				 notify($ERRORS{'OK'}, 0, "username= $res_accounts{$res_userid}{username} is not listed in reservationsaccounts, attempting to delete");
+				  #Delete from reservationaccounts
+				  if (update_reservation_accounts($reservation_id,$res_accounts{$res_userid}{userid},0,"delete")) {
+						  notify($ERRORS{'OK'}, 0, "Deleted $reservation_id,$res_accounts{$res_userid}{userid} from reservationsaccounts table");
+				  }
+				  #Delete from OS
+				  if($self->delete_user($res_accounts{$res_userid}{username},0,0)) {
+					  notify($ERRORS{'OK'}, 0, "Successfully removed user= $res_accounts{$res_userid}{username}");	
+				  }	
+				next;
+		}
+		$allow_list .= " $res_accounts{$res_userid}{username}";
+	}
+	notify($ERRORS{'OK'}, 0, "allow_list= $allow_list");
 
-	$self->data->set_server_ssh_allow_users($ssh_allow_list);
+	$self->data->set_server_allow_users($allow_list);
 	
-	if ( $self->can("update_server_access") ) {
-		if ( $self->update_server_access($ssh_allow_list) ) {
+	if ($self->can("update_server_access") ) {
+		if ( $self->update_server_access($allow_list) ) {
 			notify($ERRORS{'OK'}, 0, "updated remote access list");
 		}
 	}

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=1306520&r1=1306519&r2=1306520&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm Wed Mar 28 18:12:26 2012
@@ -140,43 +140,14 @@ sub pre_capture {
 	if(!$self->clean_iptables()) {
 		return;
 	}
-
-	# Try to clear /tmp
-	if ($self->execute("/usr/sbin/tmpwatch -f 0 /tmp; /bin/cp /dev/null /var/log/wtmp")) {
-		notify($ERRORS{'DEBUG'}, 0, "cleared /tmp on $computer_node_name");
-	}
-
-	# Clear SSH idenity keys from /root/.ssh 
-	if (!$self->clear_private_keys()) {
-	  notify($ERRORS{'WARNING'}, 0, "unable to clear known identity keys");
-	}
-
-	#Fetch exclude_list
-	my @exclude_list = $self->get_exclude_list();
-
-	if (@exclude_list ) {
-		notify($ERRORS{'DEBUG'}, 0, "skipping files listed in exclude_list\n" . join("\n", @exclude_list));
-	}
-	
-	#Remove files
-	if(!(grep( /70-persistent-net.rules/ , @exclude_list ) ) ){
-		if(!$self->delete_file("/etc/udev/rules.d/70-persistent-net.rules")){
-			notify($ERRORS{'WARNING'}, 0, "unable to remove /etc/udev/rules.d/70-persistent-net.rules");
-		}
-	}
-	
-	if(!(grep( /\/var\/log\/secure/ , @exclude_list ) ) ){
-		if(!$self->delete_file("/var/log/secure")){
-			notify($ERRORS{'WARNING'}, 0, "unable to remove /var/log/secure");
-		}
-	}
 	
-	if(!(grep( /\/var\/log\/messages/ , @exclude_list ) ) ){
-		if(!$self->delete_file("/var/log/messages")){
-			notify($ERRORS{'WARNING'}, 0, "unable to remove /var/log/secure");
-		}
+	if(!$self->clean_known_files()) {
+		notify($ERRORS{'WARNING'}, 0, "unable to clean known files");
 	}
 	
+   #Fetch exclude_list
+   my @exclude_list = $self->get_exclude_list();
+
 	# Write /etc/rc.local script
 	if(!(grep( /rc.local/ , @exclude_list ) ) ){
 		if (!$self->generate_rc_local()){
@@ -835,6 +806,13 @@ sub delete_user {
 		notify($ERRORS{'WARNING'}, 0, "image identity keys could not be determined");
 		return 0;
 	}
+
+	if ($self->user_logged_in($user_login_id)) {
+		notify($ERRORS{'OK'}, 0, "user $user_login_id is logged in, logging of user");
+		if($self->logoff_user($user_login_id)) {
+		
+		}
+	}
 	# Use userdel to delete the user
 	# Do not use userdel -r, it will affect HPC user storage for HPC installs
 	my $user_delete_command = "/usr/sbin/userdel $user_login_id";
@@ -962,7 +940,7 @@ sub grant_access {
 	notify($ERRORS{'OK'}, 0, "server_request_id= $server_request_id");
 
 	if ( $server_request_id ) {
-		my $server_allow_user_list = $self->data->get_server_ssh_allow_users();
+		my $server_allow_user_list = $self->data->get_server_allow_users();
 		notify($ERRORS{'OK'}, 0, "server_allow_user_list= $server_allow_user_list");
 		if ( $server_allow_user_list ) {
 
@@ -2998,6 +2976,7 @@ sub create_user {
 	
         if (!$username) {
                 $username = $self->data->get_user_login_id();
+					notify($ERRORS{'OK'}, 0, "username not provided, pulling from datastructure");
         }
         if (!$password) {
                 $password = $self->data->get_reservation_password();
@@ -3007,10 +2986,12 @@ sub create_user {
 	}
 	if (!$user_uid) {
 		$user_uid = $self->data->get_user_uid();	
+		notify($ERRORS{'OK'}, 0, "user_uid not provided, pulling from datastructure");
 	}
 	
 	if (!$user_standalone) {
 		$user_standalone      = $self->data->get_user_standalone();
+		notify($ERRORS{'OK'}, 0, "user_standalone not provided, pulling from datastructure");
 	}
 
 	#adminoverride, if 0 use value from database for $imagemeta_rootaccess
@@ -3110,23 +3091,29 @@ sub update_server_access {
 
 
 	if ( !$server_allow_user_list ) {
-		my $server_allow_user_list = $self->data->get_server_ssh_allow_users();
+		my $server_allow_user_list = $self->data->get_server_allow_users();
 	}
 	
         notify($ERRORS{'OK'}, 0, "server_allow_user_list= $server_allow_user_list");
         if ( $server_allow_user_list ) {
 
-             my $cmd = "echo \"AllowUsers $server_allow_user_list\" >> /etc/ssh/external_sshd_config";
+             my $cmd = "sed -i -e \"/^AllowUsers */d\" /etc/ssh/external_sshd_config; echo \"AllowUsers $server_allow_user_list\" >> /etc/ssh/external_sshd_config";
              if (run_ssh_command($computer_node_name, $identity, $cmd, "root")) {
                  notify($ERRORS{'DEBUG'}, 0, "added AllowUsers $server_allow_user_list to external_sshd_config");
              }
              else {
                  notify($ERRORS{'CRITICAL'}, 0, "failed to add AllowUsers $server_allow_user_list to external_sshd_config");
              }
-
-				if ($self->execute("/etc/init.d/ext_sshd stop; sleep 2; /etc/init.d/ext_sshd start")) {
-					notify($ERRORS{'DEBUG'}, 0, "restarted ext_sshd");
+				
+				if(!$self->stop_service("ext_sshd")) {
+				
 				}
+				if(!$self->start_service("ext_sshd")) {
+					notify($ERRORS{'WARNING'}, 0, "failed to start ext_sshd");
+					return 0;	
+				}
+			
+				notify($ERRORS{'DEBUG'}, 0, "restarted ext_sshd");
         }
 	
 	return 1;
@@ -3308,7 +3295,7 @@ sub start_service {
 					 $command = "systemctl start $service_name" . ".service";
 		  }
 		  else {
-				  $command = "/sbin/service $service_name start";
+				  $command = "service $service_name start";
 		  }
 
 		  my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 1);
@@ -3366,7 +3353,7 @@ sub stop_service {
                 $command = "systemctl stop $service_name" . ".service";
         }
         else {
-              $command = "/sbin/service $service_name stop";
+              $command = "service $service_name stop";
         }
 
         my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 1);
@@ -4510,6 +4497,63 @@ sub user_logged_in {
 
 }
 
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 clean_known_files
+
+ Parameters  : 
+ Returns     : 1
+ Description : Removes or overwrites known files that are not excluded.
+
+=cut
+
+sub clean_known_files {
+	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;
+   }
+	
+	my $computer_node_name = $self->data->get_computer_node_name();
+
+	# Try to clear /tmp
+   if ($self->execute("/usr/sbin/tmpwatch -f 0 /tmp; /bin/cp /dev/null /var/log/wtmp")) {
+      notify($ERRORS{'DEBUG'}, 0, "cleared /tmp on $computer_node_name");
+   }
+
+	# Clear SSH idenity keys from /root/.ssh 
+   if (!$self->clear_private_keys()) {
+     notify($ERRORS{'WARNING'}, 0, "unable to clear known identity keys");
+   }
+
+	#Fetch exclude_list
+   my @exclude_list = $self->get_exclude_list();
+
+   if (@exclude_list ) {
+      notify($ERRORS{'DEBUG'}, 0, "skipping files listed in exclude_list\n" . join("\n", @exclude_list));
+   }
+   
+   #Remove files
+   if(!(grep( /70-persistent-net.rules/ , @exclude_list ) ) ){ 
+      if(!$self->delete_file("/etc/udev/rules.d/70-persistent-net.rules")){
+         notify($ERRORS{'WARNING'}, 0, "unable to remove /etc/udev/rules.d/70-persistent-net.rules");
+      }    
+   }
+   
+   if(!(grep( /\/var\/log\/secure/ , @exclude_list ) ) ){ 
+      if(!$self->delete_file("/var/log/secure")){
+         notify($ERRORS{'WARNING'}, 0, "unable to remove /var/log/secure");
+      }    
+   }	
+	
+	if(!(grep( /\/var\/log\/messages/ , @exclude_list ) ) ){ 
+      if(!$self->delete_file("/var/log/messages")){
+         notify($ERRORS{'WARNING'}, 0, "unable to remove /var/log/secure");
+      }    
+   }
+
+	return 1;
+}
 
 ##/////////////////////////////////////////////////////////////////////////////
 1;

Modified: incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm?rev=1306520&r1=1306519&r2=1306520&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm Wed Mar 28 18:12:26 2012
@@ -159,6 +159,32 @@ sub process {
 		}
 	}
 	
+	#Server modified
+	if($request_state_name =~ /servermodified/) {
+      notify($ERRORS{'OK'}, 0, "this is a 'servermodified' request");
+
+		#FIXME - a cmd queue is needed to tell vcld what to do
+		#for now we assume a user has been added/removed from a user group
+		# 
+		
+		if (!$self->os->manage_server_access()) {
+			notify($ERRORS{'WARNING'}, 0, "Failed to update server access");
+      }	
+
+
+		# Put this request back into the inuse state
+		if (update_request_state($request_id, "inuse", "inuse")) {
+			notify($ERRORS{'OK'}, 0, "request state set back to inuse");
+      }
+      else {
+         notify($ERRORS{'WARNING'}, 0, "unable to set request state back to inuse");
+      }
+         
+      notify($ERRORS{'OK'}, 0, "exiting");
+      exit;
+	
+	}
+	
 	# Set the user connection timeout limit in minutes
 	my $connect_timeout_limit = 15;
 	

Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=1306520&r1=1306519&r2=1306520&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Wed Mar 28 18:12:26 2012
@@ -2220,7 +2220,8 @@ sub get_reservation_accounts {
 	SELECT DISTINCT
 	reservationaccounts.userid AS reservationaccounts_userid,
 	reservationaccounts.password AS reservationaccounts_password,
-	affiliation.name AS affiliation_name
+	affiliation.name AS affiliation_name,
+	user.unityid AS user_name
 	FROM
 	reservationaccounts,
 	affiliation,
@@ -2247,6 +2248,7 @@ sub get_reservation_accounts {
 			$user_info{$userid}{"userid"} = $userid;
 			$user_info{$userid}{"password"} = $reservation_acct{reservationaccounts_password};
 			$user_info{$userid}{"affiliation"} = $reservation_acct{affiliation_name};
+			$user_info{$userid}{"username"} = $reservation_acct{user_name};
 		}
 		
 		return %user_info;
@@ -2261,6 +2263,12 @@ sub update_reservation_accounts {
 	my $resid = shift;
 	my $userid = shift;
 	my $password = shift;
+	my $mode = shift;
+	
+	if(!$mode) {
+		notify($ERRORS{'WARNING'}, 0, "mode argument was not specified, either add or delete");
+      return;
+	}
 
 	if ( !$resid ) {
 		notify($ERRORS{'WARNING'}, 0, "resid argument was not specified");
@@ -2275,32 +2283,47 @@ sub update_reservation_accounts {
 	if ( !$password ) {
 		$password = '';
 	}
-
-	my $insert_statement = "
-	INSERT INTO 
-	reservationaccounts
-	(
-		reservationid,
-		userid,
-		password
-	)
-	VALUES
-	(
-		'$resid',
-		'$userid',
-		'$password'
-	)
-	";
 	
-	notify($ERRORS{'OK'}, 0, "$insert_statement");
+	my $statement;
+	
+	#ADD
+	if($mode =~ /add/i) {
+			  $statement = "
+			  INSERT INTO 
+			  reservationaccounts
+			  (
+				  reservationid,
+				  userid,
+				  password
+			  )
+			  VALUES
+			  (
+				  '$resid',
+				  '$userid',
+				  '$password'
+			  )
+			  ";
+	}
+	elsif( $mode =~ /delete/i ) {
+			$statement = "
+			DELETE 
+			reservationaccounts
+			FROM
+			reservationaccounts
+			WHERE
+			reservationid = '$resid' AND
+			userid = '$userid'
+			"
+	
+	}
 
-	if( database_execute($insert_statement) ) {
-		notify($ERRORS{'OK'}, 0, "inserted new reservationaccount info $resid $userid");
+	if(database_execute($statement) ) {
+		#notify($ERRORS{'OK'}, 0, "executed $statement $resid $userid");
 		return 1;
 	}
 	else {
+		notify($ERRORS{'OK'}, 0, "failed to to execute statement= $statement");
 		return 0;
-		notify($ERRORS{'OK'}, 0, "failed to insert new reservationaccount info $resid $userid");
 	}
 }
 
@@ -3121,6 +3144,9 @@ sub getusergroupmembers {
 
 	for (@selected_rows) {
 		my %hash = %{$_};
+		if(!defined($hash{uid})){
+			$hash{uid} = 0;
+		}
 		push(@retarray, "$hash{unityid}:$hash{uid}:$hash{id}");
 	}
 
@@ -3128,6 +3154,8 @@ sub getusergroupmembers {
 
 } ## end sub getusergroupmembers
 
+
+
 #/////////////////////////////////////////////////////////////////////////////
 
 =head2 get_user_group_member_info
@@ -4049,7 +4077,12 @@ sub database_execute {
 		my $sql_insertid = $statement_handle->{'mysql_insertid'};
 		$statement_handle->finish;
 		$dbh->disconnect if !defined $ENV{dbh};
-		return $sql_insertid;
+		if($sql_insertid) {
+			return $sql_insertid;
+		}
+		else { 
+			return 1;
+		}
 	}
 	else {
 		$statement_handle->finish;