瀏覽代碼

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 3 年之前
父節點
當前提交
92feac342c
共有 1 個文件被更改,包括 5 次插入2 次删除
  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);