MediaWiki  master
CommandFactory.php
Go to the documentation of this file.
1 <?php
21 namespace MediaWiki\Shell;
22 
24 use Psr\Log\LoggerAwareTrait;
25 use Psr\Log\NullLogger;
26 
33  use LoggerAwareTrait;
34 
36  private $limits;
37 
39  private $cgroup;
40 
42  private $doLogStderr = false;
43 
48 
52  private $firejail;
53 
59  public function __construct( array $limits, $cgroup, $restrictionMethod ) {
60  $this->limits = $limits;
61  $this->cgroup = $cgroup;
62  if ( $restrictionMethod === 'autodetect' ) {
63  // On Linux systems check for firejail
64  if ( PHP_OS === 'Linux' && $this->findFirejail() !== null ) {
65  $this->restrictionMethod = 'firejail';
66  } else {
67  $this->restrictionMethod = false;
68  }
69  } else {
70  $this->restrictionMethod = $restrictionMethod;
71  }
72  $this->setLogger( new NullLogger() );
73  }
74 
75  protected function findFirejail(): ?string {
76  if ( $this->firejail === null ) {
77  // Convert a `false` from ExecutableFinder to `null` (T257282)
78  $this->firejail = ExecutableFinder::findInDefaultPaths( 'firejail' ) ?: null;
79  }
80 
81  return $this->firejail;
82  }
83 
90  public function logStderr( bool $yesno = true ): void {
91  $this->doLogStderr = $yesno;
92  }
93 
99  public function create(): Command {
100  if ( $this->restrictionMethod === 'firejail' ) {
101  $command = new FirejailCommand( $this->findFirejail() );
102  $command->restrict( Shell::RESTRICT_DEFAULT );
103  } else {
104  $command = new Command();
105  }
106  $command->setLogger( $this->logger );
107 
108  return $command
109  ->limits( $this->limits )
110  ->cgroup( $this->cgroup )
111  ->logStderr( $this->doLogStderr );
112  }
113 }
MediaWiki\Shell\CommandFactory\$limits
array $limits
Definition: CommandFactory.php:36
MediaWiki\Shell\Command
Class used for executing shell commands.
Definition: Command.php:36
MediaWiki\Shell\CommandFactory\$doLogStderr
bool $doLogStderr
Definition: CommandFactory.php:42
MediaWiki\Shell\CommandFactory\__construct
__construct(array $limits, $cgroup, $restrictionMethod)
Definition: CommandFactory.php:59
MediaWiki\Shell\CommandFactory\$firejail
string bool $firejail
Definition: CommandFactory.php:52
ExecutableFinder
Utility class to find executables in likely places.
Definition: ExecutableFinder.php:28
MediaWiki\Shell\CommandFactory\logStderr
logStderr(bool $yesno=true)
When enabled, text sent to stderr will be logged with a level of 'error'.
Definition: CommandFactory.php:90
MediaWiki\Shell\CommandFactory\$restrictionMethod
string bool $restrictionMethod
Definition: CommandFactory.php:47
MediaWiki\Shell\FirejailCommand
Restricts execution of shell commands using firejail.
Definition: FirejailCommand.php:31
MediaWiki\Shell\Shell\RESTRICT_DEFAULT
const RESTRICT_DEFAULT
Apply a default set of restrictions for improved security out of the box.
Definition: Shell.php:100
MediaWiki\Shell\CommandFactory
Factory facilitating dependency injection for Command.
Definition: CommandFactory.php:32
MediaWiki\Shell\CommandFactory\$cgroup
string bool $cgroup
Definition: CommandFactory.php:39
$command
$command
Definition: mcc.php:125
MediaWiki\Shell
Copyright (C) 2017 Kunal Mehta legoktm@member.fsf.org
Definition: Command.php:21
ExecutableFinder\findInDefaultPaths
static findInDefaultPaths( $names, $versionInfo=false)
Same as locateExecutable(), but checks in getPossibleBinPaths() by default.
Definition: ExecutableFinder.php:96
MediaWiki\Shell\CommandFactory\findFirejail
findFirejail()
Definition: CommandFactory.php:75
MediaWiki\Shell\CommandFactory\create
create()
Instantiates a new Command.
Definition: CommandFactory.php:99