/usr/share/horde/passwd/lib/Driver/Servuftp.php is in php-horde-passwd 5.0.2-3+deb8u1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | <?php
/**
* Copyright 2000-2014 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.horde.org/licenses/gpl.
*
* @category Horde
* @copyright 2000-2014 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package Passwd
*/
/**
* Changes a password via the SITE PSWD command used by Serv-u ftpd for
* Windows.
*
* @author Lucas Nelan (screen@brainkrash.com)
* @category Horde
* @copyright 2000-2014 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package Passwd
*/
class Passwd_Driver_Servuftp extends Passwd_Driver
{
const CONNECTED = '220';
const GOODBYE = '221';
const PASSWORDOK = '230';
const USERNAMEOK = '331';
const PASSWORDBAD = '530';
/**
*/
protected $_fp;
/**
*/
public function __construct(array $params = array())
{
if (empty($params['host']) || empty($params['port'])) {
throw new Passwd_Exception(_("Password module is missing required parameters."));
}
parent::__construct(array_merge(array(
'timeout' => 30
), $params));
}
/**
*/
protected function _changePassword($user, $oldpass, $newpass)
{
if ($this->_connect() != self::CONNECTED) {
throw new Passwd_Exception(_("Connection failed"));
}
if ($this->_sendCommand('user', $user) != self::USERNAMEOK) {
$this->_disconnect();
throw new Passwd_Exception(_("Unknown user"));
}
if ($this->_sendCommand('pass', $oldpass) != self::PASSWORDOK) {
$this->_disconnect();
throw new Passwd_Exception(_("Incorrect password"));
}
if ($this->_sendCommand('site pswd', '"' . $oldpass. '" "' . $newpass. '"') != self::PASSWORDOK) {
$this->_disconnect();
throw new Passwd_Exception(_("Cannot change password"));
}
$this->_disconnect();
}
/**
* @throws Passwd_Exception
*/
protected function _connect()
{
$this->_fp = fsockopen(
$this->_params['host'],
$this->_params['port'],
$errno,
$errstr,
$this->_params['timeout']
);
if (!$this->_fp) {
throw new Passwd_Exception($errstr);
}
return $this->_getPrompt();
}
/**
* @throws Passwd_Exception
*/
protected function _disconnect()
{
if ($this->_fp) {
fputs($this->_fp, "quit\n");
fclose($this->_fp);
}
}
/**
* @throws Passwd_Exception
*/
protected function _getPrompt()
{
$prompt = fgets($this->_fp, 4096);
if (preg_match('/^[1-5][0-9][0-9]/', $prompt, $res)) {
return $res[1];
}
}
/**
* @throws Passwd_Exception
*/
protected function _sendCommand($cmd, $arg)
{
$line = $cmd . ' ' . $arg . "\r\n";
fputs($this->_fp, $line);
return $this->_getPrompt();
}
}
|