Pass the sessionID using the environment instead of argv
authorTim Düsterhus <duesterhus@woltlab.com>
Thu, 2 Jul 2020 10:48:10 +0000 (12:48 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Thu, 2 Jul 2020 10:51:34 +0000 (12:51 +0200)
wcfsetup/install/files/lib/system/CLIWCF.class.php
wcfsetup/install/files/lib/system/cli/command/WorkerCLICommand.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 6178e5727956de3423084807317b04558de67f3b..e1ce465a393b3ecaa249985090f2b70366fd5ac6 100644 (file)
@@ -87,7 +87,7 @@ class CLIWCF extends WCF {
                
                $this->initArgv();
                $this->initPHPLine();
-               $this->initAuth(self::getArgvParser()->sessionID);
+               $this->initAuth();
                $this->checkForUpdates();
                $this->initCommands();
        }
@@ -96,8 +96,8 @@ class CLIWCF extends WCF {
         * @inheritDoc
         */
        public static function destruct() {
-               // Giving a sessionID disables saving of the command history.
-               if (!self::getArgvParser()->sessionID) {
+               // Giving WCF_SESSION_ID disables saving of the command history.
+               if (empty($_ENV['WCF_SESSION_ID'])) {
                        if (self::getReader() !== null && self::getReader()->getHistory() instanceof DatabaseCLICommandHistory) {
                                /** @var DatabaseCLICommandHistory $history */
                                $history = self::getReader()->getHistory();
@@ -107,7 +107,7 @@ class CLIWCF extends WCF {
                        }
                }
                
-               if (!self::getArgvParser()->sessionID) {
+               if (empty($_ENV['WCF_SESSION_ID'])) {
                        self::getSession()->delete();
                }
        }
@@ -133,7 +133,6 @@ class CLIWCF extends WCF {
                        'disableUpdateCheck' => WCF::getLanguage()->get('wcf.cli.help.disableUpdateCheck'),
                        'exitOnFail' => WCF::getLanguage()->get('wcf.cli.help.exitOnFail'),
                        'packageID=i' => WCF::getLanguage()->get('wcf.cli.help.packageID'),
-                       'sessionID=s' => WCF::getLanguage()->get('wcf.cli.help.sessionID'),
                ]);
                self::getArgvParser()->setOptions([
                        ArgvParser::CONFIG_CUMULATIVE_FLAGS => true,
@@ -234,10 +233,10 @@ class CLIWCF extends WCF {
        /**
         * Does the user authentification.
         */
-       protected function initAuth($sessionID = null) {
-               if ($sessionID !== null) {
+       protected function initAuth() {
+               if (!empty($_ENV['WCF_SESSION_ID'])) {
                        self::getSession()->delete();
-                       self::getSession()->load(SessionEditor::class, $sessionID);
+                       self::getSession()->load(SessionEditor::class, $_ENV['WCF_SESSION_ID']);
                        if (!self::getUser()->userID) {
                                self::getReader()->println('Invalid sessionID');
                                exit(1);
index 8a2b18e5b377f548b464a7e34cccb1e48063e187..3e2789bb90fd338871dde2b757c0915de40b9861 100644 (file)
@@ -192,10 +192,8 @@ class WorkerCLICommand implements IArgumentedCLICommand {
                
                // Invoke the worker processes with the same command line ...
                $arguments = $_SERVER['argv'];
-               // ... with the quiet argument ...
+               // ... with the quiet argument.
                $arguments[] = '-qqqqq';
-               // ... reusing the current session.
-               $arguments[] = '--sessionID='.CLIWCF::getSession()->sessionID;
                $commandLine = PHP_BINARY.' '.implode(' ', array_map('escapeshellarg', $arguments));
                
                Log::debug('Using "'.$commandLine.'" as the worker command line.');
@@ -203,10 +201,12 @@ class WorkerCLICommand implements IArgumentedCLICommand {
                // Reuse the environment.
                // - Specify TERM=dumb to prevent the worker from messing around with our terminal.
                // - Specify WORKER_STATUS_FD to prevent the administrator from manually giving a threadId,
-               //   causing the worker to write into an arbitrary file descriptor (most likely the DB connectio.).
+               //   causing the worker to write into an arbitrary file descriptor (most likely the DB connection).
+               // - Specify WCF_SESSION_ID to perform the login.
                $env = array_merge($_ENV, [
                        'TERM' => 'dumb',
                        'WORKER_STATUS_FD' => 3,
+                       'WCF_SESSION_ID' => CLIWCF::getSession()->sessionID,
                ]);
                
                // 1) Spawn the processes.
index ac46d052eeb50f703ac350f634c5a56a8ad9ec69..5885a502714772e579ff52ab34554d862815aa5e 100644 (file)
@@ -3365,7 +3365,6 @@ Fehler sind beispielsweise:
 - Befehle, welche ihre Aktion nicht erfolgreich ausführen konnten
 - Systemfehler]]></item>
                <item name="wcf.cli.help.packageID"><![CDATA[Die App mit der angegebenen Paket-ID wird als Standard für diese Sitzung verwendet.]]></item>
-               <item name="wcf.cli.help.sessionID"><![CDATA[Verwendet die Sitzung mit der angegebenen Session-ID, anstatt einen separaten Login durchzuführen. Dieser Parameter wird intern zur Parallelisierung von Aufgaben genutzt.]]></item>
                <item name="wcf.cli.worker.setParameter"><![CDATA[Übergibt einen Parameter an den Worker. Bsp.: --setParameter param=wert]]></item>
                <item name="wcf.cli.worker.list"><![CDATA[Listet alle Worker auf.]]></item>
                <item name="wcf.cli.worker.threads"><![CDATA[Gewünschte Anzahl von parallelen Prozessen.]]></item>
index e4c785415a4e2a8ed5afaf9a000a5eca8ecea00f..1b6d8a8cb56a539b61552a523f24f6346599cac1 100644 (file)
@@ -3288,7 +3288,6 @@ Errors are:
 - Failing commands
 - Core errors]]></item>
                <item name="wcf.cli.help.packageID"><![CDATA[The given package id will be used as a default for this session.]]></item>
-               <item name="wcf.cli.help.sessionID"><![CDATA[Uses the session with the given session id instead of performing a login. This parameter is used internally for parallel processing of jobs.]]></item>
                <item name="wcf.cli.worker.setParameter"><![CDATA[Sets a worker parameter e.g.: --setParameter param=value]]></item>
                <item name="wcf.cli.worker.list"><![CDATA[Lists all workers.]]></item>
                <item name="wcf.cli.worker.threads"><![CDATA[Requested number of parallel processes.]]></item>