Allow to provide the db password inside a file instead of using
authorPlatonides <platonides@users.mediawiki.org>
Thu, 16 Jun 2011 20:58:12 +0000 (20:58 +0000)
committerPlatonides <platonides@users.mediawiki.org>
Thu, 16 Jun 2011 20:58:12 +0000 (20:58 +0000)
the command line, so that it isn't exposed in the process list.

Sadly, use of /dev/stdin or <(process) doesn't work in Linux,
since they are shown as symlinks to pipe:[12345678] and php
dereferences all of them. It has to be a real file.
However, such constructs work in Solaris, where they are
presented as character devices.

maintenance/install.php

index 34e3ea8..781b12d 100644 (file)
@@ -55,6 +55,7 @@ class CommandLineInstaller extends Maintenance {
                $this->addOption( 'installdbpass', 'The pasword for the DB user to install as.', false, true );
                $this->addOption( 'dbuser', 'The user to use for normal operations (wikiuser)', false, true );
                $this->addOption( 'dbpass', 'The pasword for the DB user for normal operations', false, true );
+               $this->addOption( 'dbpassfile', 'An alternative way to provide dbpass option, as the contents of this file', false, true );
                $this->addOption( 'confpath', "Path to write LocalSettings.php to, default $IP", false, true );
                /* $this->addOption( 'dbschema', 'The schema for the MediaWiki DB in pg (mediawiki)', false, true ); */
                /* $this->addOption( 'namespace', 'The project namespace (same as the name)', false, true ); */
@@ -67,6 +68,17 @@ class CommandLineInstaller extends Maintenance {
                $adminName = isset( $this->mArgs[1] ) ? $this->mArgs[1] : null;
                $wgTitle = Title::newFromText( 'Installer script' );
 
+               $dbpassfile = $this->getOption( 'dbpassfile', false );
+               if ( $dbpassfile !== false ) {
+                       wfSuppressWarnings();
+                       $dbpass = file_get_contents( $dbpassfile );
+                       wfRestoreWarnings();
+                       if ( $dbpass === false ) {
+                               $this->error( "Couldn't open $dbpassfile", true );
+                       }
+                       $this->mOptions['dbpass'] = $dbpass;
+               }
+
                $installer =
                        new CliInstaller( $siteName, $adminName, $this->mOptions );