diff options
author | thomascube <thomas@roundcube.net> | 2010-09-29 08:30:56 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2010-09-29 08:30:56 +0000 |
commit | bd911ba8143f07fa4f14b682ddcd559a69a208e8 (patch) | |
tree | 26f5584eee7ca9be933cfafd0ff2e99599519b3a | |
parent | 9d2a3a819a588f0fad2aaac0b330bafe594954ec (diff) |
Pool some code for command line tools; avoid displaying password on shell (#1486947); fix msgexport now using the new imap wrapper
-rw-r--r-- | CHANGELOG | 2 | ||||
-rwxr-xr-x | bin/msgexport.sh | 44 | ||||
-rwxr-xr-x | bin/msgimport.sh | 43 | ||||
-rw-r--r-- | program/include/clisetup.php | 90 |
4 files changed, 98 insertions, 81 deletions
@@ -1,6 +1,8 @@ CHANGELOG Roundcube Webmail =========================== +- Fix msgexport.sh now using the new imap wrapper +- Avoid displaying password on shell (#1486947) - Only lower-case user name if first login attempt failed (#1486393) - Make alias setting in squirrelmail_usercopy plugin configurable (patch by pommi, #1487007) - Prevent from saving a non-existing skin path in user prefs (#1486936) diff --git a/bin/msgexport.sh b/bin/msgexport.sh index 005e2cadf..0aa33b5a8 100755 --- a/bin/msgexport.sh +++ b/bin/msgexport.sh @@ -1,45 +1,10 @@ #!/usr/bin/env php <?php -if (php_sapi_name() != 'cli') { - die('Not on the "shell" (php-cli).'); -} define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' ); ini_set('memory_limit', -1); -require_once INSTALL_PATH.'program/include/iniset.php'; - -/** - * Parse commandline arguments into a hash array - */ -function get_opt($aliases=array()) -{ - $args = array(); - for ($i=1; $i<count($_SERVER['argv']); $i++) - { - $arg = $_SERVER['argv'][$i]; - if (substr($arg, 0, 2) == '--') - { - $sp = strpos($arg, '='); - $key = substr($arg, 2, $sp - 2); - $value = substr($arg, $sp+1); - } - else if ($arg{0} == '-') - { - $key = substr($arg, 1); - $value = $_SERVER['argv'][++$i]; - } - else - continue; - - $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value); - - if ($alias = $aliases[$key]) - $args[$alias] = $args[$key]; - } - - return $args; -} +require_once INSTALL_PATH.'program/include/clisetup.php'; function print_usage() { @@ -89,8 +54,8 @@ function export_mailbox($mbox, $filename) $from = current($IMAP->decode_address_list($headers->from, 1, false)); fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid)); - fwrite($out, iil_C_FetchPartHeader($IMAP->conn, $mbox, $i, null)); - fwrite($out, iil_C_HandlePartBody($IMAP->conn, $mbox, $i, null, 1)); + fwrite($out, $IMAP->conn->fetchPartHeader($mbox, $i)); + fwrite($out, $IMAP->conn->handlePartBody($mbox, $i)); fwrite($out, "\n\n\n"); progress_update($i, $count); @@ -125,8 +90,7 @@ if (empty($args['user'])) } // prompt for password -vputs("Password: "); -$args['pass'] = trim(fgets(STDIN)); +$args['pass'] = prompt_silent("Password: "); // parse $host URL diff --git a/bin/msgimport.sh b/bin/msgimport.sh index a5161e026..74dc81617 100755 --- a/bin/msgimport.sh +++ b/bin/msgimport.sh @@ -1,45 +1,10 @@ #!/usr/bin/env php <?php -if (php_sapi_name() != 'cli') { - die('Not on the "shell" (php-cli).'); -} define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' ); ini_set('memory_limit', -1); -require_once INSTALL_PATH.'program/include/iniset.php'; - -/** - * Parse commandline arguments into a hash array - */ -function get_opt($aliases=array()) -{ - $args = array(); - for ($i=1; $i<count($_SERVER['argv']); $i++) - { - $arg = $_SERVER['argv'][$i]; - if (substr($arg, 0, 2) == '--') - { - $sp = strpos($arg, '='); - $key = substr($arg, 2, $sp - 2); - $value = substr($arg, $sp+1); - } - else if ($arg{0} == '-') - { - $key = substr($arg, 1); - $value = $_SERVER['argv'][++$i]; - } - else - continue; - - $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value); - - if ($alias = $aliases[$key]) - $args[$alias] = $args[$key]; - } - - return $args; -} +require_once INSTALL_PATH.'program/include/clisetup.php'; function print_usage() { @@ -82,11 +47,7 @@ if (empty($args['user'])) // prompt for password if (empty($args['pass'])) { - echo "Password: "; - $args['pass'] = trim(fgets(STDIN)); - - // clear password input - echo chr(8)."\rPassword: ".str_repeat("*", strlen($args['pass']))."\n"; + $args['pass'] = prompt_silent("Password: "); } // parse $host URL diff --git a/program/include/clisetup.php b/program/include/clisetup.php new file mode 100644 index 000000000..fbea98063 --- /dev/null +++ b/program/include/clisetup.php @@ -0,0 +1,90 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | program/include/clisetup.php | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2010, Roundcube Dev, - Switzerland | + | Licensed under the GNU GPL | + | | + | PURPOSE: | + | Setup the command line environment and provide some utitlity | + | functions. | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ + + $Id$ + +*/ + +if (php_sapi_name() != 'cli') { + die('Not on the "shell" (php-cli).'); +} + +require_once 'iniset.php'; + + +/** + * Parse commandline arguments into a hash array + */ +function get_opt($aliases=array()) +{ + $args = array(); + for ($i=1; $i<count($_SERVER['argv']); $i++) + { + $arg = $_SERVER['argv'][$i]; + if (substr($arg, 0, 2) == '--') + { + $sp = strpos($arg, '='); + $key = substr($arg, 2, $sp - 2); + $value = substr($arg, $sp+1); + } + else if ($arg{0} == '-') + { + $key = substr($arg, 1); + $value = $_SERVER['argv'][++$i]; + } + else + continue; + + $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value); + + if ($alias = $aliases[$key]) + $args[$alias] = $args[$key]; + } + + return $args; +} + + +/** + * from http://blogs.sitepoint.com/2009/05/01/interactive-cli-password-prompt-in-php/ + */ +function prompt_silent($prompt = "Password:") +{ + if (preg_match('/^win/i', PHP_OS)) { + $vbscript = sys_get_temp_dir() . 'prompt_password.vbs'; + file_put_contents($vbscript, 'wscript.echo(InputBox("' . addslashes($prompt) . '", "", "password here"))'); + $command = "cscript //nologo " . escapeshellarg($vbscript); + $password = rtrim(shell_exec($command)); + unlink($vbscript); + return $password; + } + else { + $command = "/usr/bin/env bash -c 'echo OK'"; + if (rtrim(shell_exec($command)) !== 'OK') { + echo $prompt; + $pass = trim(fgets(STDIN)); + echo chr(8)."\r" . $prompt . str_repeat("*", strlen($pass))."\n"; + return $pass; + } + $command = "/usr/bin/env bash -c 'read -s -p \"" . addslashes($prompt) . "\" mypassword && echo \$mypassword'"; + $password = rtrim(shell_exec($command)); + echo "\n"; + return $password; + } +} + +?>
\ No newline at end of file |