mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-21 17:39:09 +01:00
LSaddon::ftp: Remove PEAR Net_FTP dependency
This commit is contained in:
parent
9384d2e312
commit
7a4f0fac69
8 changed files with 134 additions and 128 deletions
9
.phpstan/compat.php
Normal file
9
.phpstan/compat.php
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
$config = [];
|
||||
|
||||
if (PHP_VERSION_ID < 80100) {
|
||||
$config['parameters']['typeAliases']['FTP\Connection'] = 'resource';
|
||||
}
|
||||
|
||||
return $config;
|
|
@ -1,3 +1,6 @@
|
|||
includes:
|
||||
- compat.php
|
||||
|
||||
parameters:
|
||||
level: 3
|
||||
paths:
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?php
|
||||
|
||||
require 'Net/LDAP2.php';
|
||||
require 'Net/FTP.php';
|
||||
require 'Console/Table.php';
|
||||
require 'Zxcvbn/autoload.php';
|
||||
require '/usr/share/php/phpseclib/autoload.php';
|
||||
|
|
4
INSTALL
4
INSTALL
|
@ -23,8 +23,8 @@
|
|||
* La librairie File_CSV_DataSource (paquet php-file-csv-datasource dans Debian)
|
||||
* La librairie Console_Table (nécessaire pour le fonctionnement de l'outil CLI, paquet php-console-table dans Debian)
|
||||
* Les librairies Mail et Mail_Mime (nécessaire pour l'envoi de courriels, paquets php-mail et php-mail-mime dans Debian)
|
||||
* La librairie Net_FTP (nécessaire pour le fonctionnement du LSaddon FTP, paquet php-console-table dans Debian)
|
||||
* La librairie PhpSecLib (nécessaire pour le fonctionnement du LSaddon SSH, paquet php-console-table dans Debian)
|
||||
* L'extension PHP ftp (nécessaire pour le fonctionnement du LSaddon FTP, paquet php-ftp dans Debian)
|
||||
* La librairie PhpSecLib (nécessaire pour le fonctionnement du LSaddon SSH, paquet php-phpseclib dans Debian)
|
||||
|
||||
#################
|
||||
# Avertissement #
|
||||
|
|
4
debian/control
vendored
4
debian/control
vendored
|
@ -6,8 +6,8 @@ Maintainer: Benjamin Renard <brenard@easter-eggs.com>
|
|||
|
||||
Package: ldapsaisie
|
||||
Architecture: all
|
||||
Depends: apache2 | httpd, php-ldap | php5-ldap, php-fpm | libapache2-mod-php5 | libapache2-mod-php | php5-cli | php-cli, smarty | smarty3, php-net-ldap2, php-net-ftp, php-mail, php-mail-mime, php-console-table
|
||||
Recommends: php-mbstring, php-phpseclib, php-unidecode, php-zxcvbn
|
||||
Depends: apache2 | httpd, php-ldap | php5-ldap, php-fpm | libapache2-mod-php5 | libapache2-mod-php | php5-cli | php-cli, smarty | smarty3, php-net-ldap2, php-console-table
|
||||
Recommends: php-mbstring, php-phpseclib, php-unidecode, php-zxcvbn, php-ftp, php-mail, php-mail-mime
|
||||
Description: web based interface for managing LDAP servers content
|
||||
LdapSaisie is a Web application developed to manage LDAP directory.
|
||||
It has been written in PHP / JavaScript and is published under the
|
||||
|
|
|
@ -36,12 +36,13 @@
|
|||
[PEAR_Mail_Mime](https://pear.php.net/package/Mail_Mime) (nécessaire pour l'envoi de courriels,
|
||||
paquets `php-mail` et `php-mail-mime` dans Debian)
|
||||
|
||||
- La librairie [Net_FTP](https://pear.php.net/package/Net_FTP) (nécessaire pour le fonctionnement du
|
||||
[LSaddon](../conf/index.md#configuration-des-lsaddons) FTP, paquet `php-console-table` dans Debian)
|
||||
- L'[extension PHP `ftp`](https://www.php.net/manual/fr/intro.ftp.php) (nécessaire pour le
|
||||
fonctionnement du [LSaddon](../conf/index.md#configuration-des-lsaddons) FTP, paquet `php-ftp`
|
||||
dans Debian)
|
||||
|
||||
- La librairie [PhpSecLib](https://github.com/phpseclib/phpseclib) (nécessaire pour le
|
||||
fonctionnement du [LSaddon](../conf/index.md#configuration-des-lsaddons) SSH, paquet `php-console-table`
|
||||
dans Debian)
|
||||
fonctionnement du [LSaddon](../conf/index.md#configuration-des-lsaddons) SSH, paquet
|
||||
`php-phpseclib` dans Debian)
|
||||
|
||||
!!! warning
|
||||
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2007 Easter-eggs
|
||||
* https://ldapsaisie.org
|
||||
*
|
||||
* Author: See AUTHORS file in top-level directory.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License version 2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
************************************************
|
||||
* Données de configuration pour le support FTP *
|
||||
************************************************
|
||||
*/
|
||||
|
||||
// Pear :: NET_FTP
|
||||
define('NET_FTP','/usr/share/php/Net/FTP.php');
|
|
@ -20,37 +20,38 @@
|
|||
|
||||
******************************************************************************/
|
||||
|
||||
// Messages d'erreur
|
||||
// Error messages
|
||||
|
||||
// Support
|
||||
LSerror :: defineError('FTP_SUPPORT_01',
|
||||
___("FTP Support : Pear::Net_FTP is missing.")
|
||||
___("FTP support: PHP ftp extension is missing.")
|
||||
);
|
||||
|
||||
LSerror :: defineError('FTP_SUPPORT_02',
|
||||
___("FTP Support : The constant %{const} is not defined.")
|
||||
);
|
||||
|
||||
|
||||
// Autres erreurs
|
||||
// Other errors
|
||||
LSerror :: defineError('FTP_00',
|
||||
___("Net_FTP Error : %{msg}")
|
||||
___("FTP error: %{msg}")
|
||||
);
|
||||
|
||||
LSerror :: defineError('FTP_01',
|
||||
___("FTP Support : Unable to connect to FTP Server (Step : %{step}).")
|
||||
___("FTP: Unable to connect to FTP Server (Step : %{step}).")
|
||||
);
|
||||
LSerror :: defineError('FTP_02',
|
||||
___("FTP Support : Unable to make directory %{dir} on the remote server.")
|
||||
___("FTP: Unable to make directory %{dir} on the remote server.")
|
||||
);
|
||||
LSerror :: defineError('FTP_03',
|
||||
___("FTP Support : Unable to delete directory %{dir} on the remote server.")
|
||||
___("FTP: Unable to list directory %{dir} content on the remote server.")
|
||||
);
|
||||
LSerror :: defineError('FTP_04',
|
||||
___("FTP Support : Unable to modify rights on the directory %{dir} on the remote server.")
|
||||
___("FTP: Unable to delete directory %{dir} on the remote server.")
|
||||
);
|
||||
LSerror :: defineError('FTP_05',
|
||||
___("FTP Support : Unable to rename folder from %{old} to %{new} on the remote server.")
|
||||
___("FTP: Unable to delete file %{file} on the remote server.")
|
||||
);
|
||||
LSerror :: defineError('FTP_06',
|
||||
___("FTP: Unable to modify rights on the directory %{dir} on the remote server.")
|
||||
);
|
||||
LSerror :: defineError('FTP_07',
|
||||
___("FTP: Unable to rename folder from %{old} to %{new} on the remote server.")
|
||||
);
|
||||
|
||||
/**
|
||||
|
@ -63,68 +64,52 @@ LSerror :: defineError('FTP_05',
|
|||
function LSaddon_ftp_support() {
|
||||
$retval = true;
|
||||
|
||||
// Net_FTP lib dependency
|
||||
if (!class_exists('Net_FTP')) {
|
||||
if (!defined('NET_FTP')) {
|
||||
LSerror :: addErrorCode('FTP_SUPPORT_02', 'NET_FTP');
|
||||
$retval = false;
|
||||
} else if(!LSsession::includeFile(NET_FTP, true)) {
|
||||
LSerror :: addErrorCode('FTP_SUPPORT_01');
|
||||
$retval = false;
|
||||
}
|
||||
// PHP ftp extension dependency
|
||||
if (!function_exists('ftp_connect')) {
|
||||
LSerror :: addErrorCode('FTP_SUPPORT_01');
|
||||
$retval = false;
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Connect to FTP server
|
||||
*
|
||||
* @author Benjamin Renard <brenard@easter-eggs.com>
|
||||
*
|
||||
* @param string $host FTP server FQDN or IP address
|
||||
* @param string $port The TCP port of the FTP server
|
||||
* @param string $user The username
|
||||
* @param string $pwd The password
|
||||
*
|
||||
* @return Net_FTP|false Net_FTP object in case of success, false otherwise
|
||||
*/
|
||||
function connectToFTP($host, $port, $user, $pwd) {
|
||||
$cnx = new Net_FTP();
|
||||
$do = $cnx -> connect($host, $port);
|
||||
if (!$do instanceof PEAR_Error){
|
||||
$do = $cnx -> login($user, $pwd);
|
||||
if (!$do instanceof PEAR_Error) {
|
||||
return $cnx;
|
||||
}
|
||||
else {
|
||||
LSerror :: addErrorCode('FTP_01', "2");
|
||||
LSerror :: addErrorCode('FTP_00', $do -> getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
LSerror :: addErrorCode('FTP_01', "1");
|
||||
LSerror :: addErrorCode('FTP_00', $do -> getMessage());
|
||||
return false;
|
||||
}
|
||||
* Log last FTP error
|
||||
* @return void
|
||||
*/
|
||||
function _logLastFtpError() {
|
||||
$error = error_get_last();
|
||||
if ($error) LSerror :: addErrorCode('FTP_00', $error['message']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creation d'un ou plusieurs dossiers via FTP
|
||||
*
|
||||
* @author Benjamin Renard <brenard@easter-eggs.com>
|
||||
*
|
||||
* @param string $host Le nom ou l'IP du serveur FTP
|
||||
* @param string $port Le port de connexion au serveur ftp
|
||||
* @param string $user Le nom d'utilidateur de connexion
|
||||
* @param string $pwd Le mot de passe de connexion
|
||||
* @param array $dirs ou string Le(s) dossier(s) à ajouter
|
||||
*
|
||||
* @return bool True ou false si il y a un problème durant la création du/des dossier(s)
|
||||
* Connect to FTP server
|
||||
*
|
||||
* @author Benjamin Renard <brenard@easter-eggs.com>
|
||||
*
|
||||
* @param string $host FTP server FQDN or IP address
|
||||
* @param string $port The TCP port of the FTP server
|
||||
* @param string $user The username
|
||||
* @param string $pwd The password
|
||||
*
|
||||
* @return FTP\Connection|resource|false FTP\Connection (or resource with PHP <= 8.1.0) in case of
|
||||
* success, false otherwise
|
||||
*/
|
||||
function connectToFTP($host, $port, $user, $pwd) {
|
||||
$cnx = @ftp_connect($host, $port);
|
||||
if ($cnx === false) {
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_01', "1");
|
||||
return false;
|
||||
}
|
||||
if (@ftp_login($cnx, $user, $pwd))
|
||||
return $cnx;
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_01', "2");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create one or more directories throught FTP
|
||||
*
|
||||
* @author Benjamin Renard <brenard@easter-eggs.com>
|
||||
|
@ -135,7 +120,7 @@ function connectToFTP($host, $port, $user, $pwd) {
|
|||
* @param string $pwd The password
|
||||
* @param array|string $dirs The directory/ies to add
|
||||
* @param int $chmod The directory/ies mode as an octal number (do not forget leading zero,
|
||||
* example: 0755 or 02755, default : default umask on the SSH server)
|
||||
* example: 0755 or 02755, default : default umask on the SSH server)
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
@ -143,20 +128,68 @@ function createDirsByFTP($host, $port, $user, $pwd, $dirs, $chmod=NULL) {
|
|||
$cnx = connectToFTP($host, $port, $user, $pwd);
|
||||
if (!$cnx) return false;
|
||||
foreach(ensureIsArray($dirs) as $dir) {
|
||||
$do = $cnx -> mkdir($dir, true);
|
||||
if ($do instanceof PEAR_Error) {
|
||||
if (@ftp_mkdir($cnx, $dir) === false) {
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_02', $dir);
|
||||
LSerror :: addErrorCode('FTP_00', $do -> getMessage());
|
||||
return false;
|
||||
}
|
||||
if ($chmod) {
|
||||
$do = $cnx -> chmod($dir, $chmod);
|
||||
if ($do instanceof PEAR_Error) {
|
||||
LSerror :: addErrorCode('FTP_04', $dir);
|
||||
LSerror :: addErrorCode('FTP_00', $do -> getMessage());
|
||||
if ($chmod && !@ftp_chmod($cnx, $chmod, $dir)) {
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_06', $dir);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function call recursively to remove a directory and its content
|
||||
* @param FTP\Connection|resource $cnx The FTP\Connection object (or resource with PHP < 8.1.0)
|
||||
* @param string $dir The directory path to remove
|
||||
* @return boolean
|
||||
*/
|
||||
function _removeDirByFTP(&$cnx, $dir) {
|
||||
if ($dir[strlen($dir)-1] == '/')
|
||||
$dir = substr($dir, 0, strlen($dir)-1);
|
||||
$items = @ftp_nlist($cnx, $dir);
|
||||
LSlog :: get_logger('LSaddon_ftp') -> trace(
|
||||
"_removeDirByFTP($dir): directory content: ".varDump($items));
|
||||
if (!is_array($items)) {
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_03', $dir);
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach($items as $item) {
|
||||
if (@ftp_chdir($cnx, $item)) {
|
||||
LSlog :: get_logger('LSaddon_ftp') -> trace(
|
||||
"_removeDirByFTP($dir): item '$item' is a directory, delete it recursively");
|
||||
if (!_removeDirByFTP($cnx, $item))
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
LSlog :: get_logger('LSaddon_ftp') -> trace(
|
||||
"_removeDirByFTP($dir): item '$item' is a file, delete it");
|
||||
if (!@ftp_delete($cnx, $item)) {
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_05', $item);
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
LSlog :: get_logger('LSaddon_ftp') -> trace(
|
||||
"_removeDirByFTP($dir): file '$item' removed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (@!ftp_rmdir($cnx, $dir)) {
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_04', $dir);
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
LSlog :: get_logger('LSaddon_ftp') -> trace(
|
||||
"_removeDirByFTP($dir): directory '$dir' removed");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -181,17 +214,9 @@ function createDirsByFTP($host, $port, $user, $pwd, $dirs, $chmod=NULL) {
|
|||
function removeDirsByFTP($host, $port, $user, $pwd, $dirs) {
|
||||
$cnx = connectToFTP($host, $port, $user, $pwd);
|
||||
if (!$cnx) return false;
|
||||
foreach(ensureIsArray($dirs) as $dir) {
|
||||
if ($dir[strlen($dir)-1] != '/') {
|
||||
$dir .= '/';
|
||||
}
|
||||
$do = $cnx -> rm($dir,true);
|
||||
if ($do instanceof PEAR_Error) {
|
||||
LSerror :: addErrorCode('FTP_03', $dir);
|
||||
LSerror :: addErrorCode('FTP_00', $do -> getMessage());
|
||||
foreach(ensureIsArray($dirs) as $dir)
|
||||
if (!_removeDirByFTP($cnx, $dir))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -212,10 +237,9 @@ function removeDirsByFTP($host, $port, $user, $pwd, $dirs) {
|
|||
function renameDirByFTP($host, $port, $user, $pwd, $old, $new) {
|
||||
$cnx = connectToFTP($host, $port, $user, $pwd);
|
||||
if (!$cnx) return false;
|
||||
$do = $cnx -> rename($old, $new);
|
||||
if ($do instanceof PEAR_Error) {
|
||||
LSerror :: addErrorCode('FTP_05', array('old' => $old, 'new' => $new));
|
||||
LSerror :: addErrorCode('FTP_00', $do -> getMessage());
|
||||
if (!@ftp_rename($cnx, $old, $new)) {
|
||||
_logLastFtpError();
|
||||
LSerror :: addErrorCode('FTP_07', array('old' => $old, 'new' => $new));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
Loading…
Reference in a new issue