thomascube
2010-09-29 bd911ba8143f07fa4f14b682ddcd559a69a208e8
Pool some code for command line tools; avoid displaying password on shell (#1486947); fix msgexport now using the new imap wrapper

1 files added
3 files modified
179 ■■■■ changed files
CHANGELOG 2 ●●●●● patch | view | raw | blame | history
bin/msgexport.sh 44 ●●●●● patch | view | raw | blame | history
bin/msgimport.sh 43 ●●●●● patch | view | raw | blame | history
program/include/clisetup.php 90 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -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)
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 @@
        $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 @@
}
// prompt for password
vputs("Password: ");
$args['pass'] = trim(fgets(STDIN));
$args['pass'] = prompt_silent("Password: ");
// parse $host URL
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 @@
// 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
program/include/clisetup.php
New file
@@ -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;
  }
}
?>