Parcourir la source

Fixed legacy console commands (lcon)

lcon sends commands to the server directly, through screen, to the game server without using any rcon protocol.
It used to call "system" to send the command to screen, which runs as the agent user but, since the game servers are started as their own user, the screen socket can not be reached as the agent user, therefore the agent now sends the screen command as the appropriate user.
DieFeM il y a 3 ans
Parent
commit
92feac342c
1 fichiers modifiés avec 5 ajouts et 2 suppressions
  1. 5 2
      ogp_agent.pl

+ 5 - 2
ogp_agent.pl

@@ -1503,9 +1503,12 @@ sub send_rcon_command
 	if ($control_protocol eq "lcon")
 	{
 		my $screen_id = create_screen_id(SCREEN_TYPE_HOME, $home_id);
-		system('screen -S '.$screen_id.' -p 0 -X stuff "'.$rconCommand.'$(printf \\\\r)"');
+		my $as_user = find_user_by_screen_id($screen_id);
+		my $ScreenCommand = 'screen -S '.$screen_id.' -p 0 -X stuff "'.$rconCommand.'$(printf \\\\r)"';
 		logger "Sending legacy console command to ".$screen_id.": \n$rconCommand \n .";
-		if ($? == -1)
+		my $ret = sudo_exec_without_decrypt($ScreenCommand, $as_user);	
+		my ($retval, $enc_out) = split(/;/, $ret, 2);
+		if($retval == 1)
 		{
 			my(@modedlines) = "$rconCommand";
 			my $encoded_content = encode_list(@modedlines);