sebastianfeldmann /
phpbu
| 1 | <?php |
||
| 2 | |||
| 3 | namespace phpbu\App\Cli\Executable; |
||
| 4 | |||
| 5 | use phpbu\App\Backup\Target\Compression; |
||
| 6 | use phpbu\App\Cli\Executable; |
||
| 7 | use phpbu\App\Util\Cli; |
||
| 8 | use SebastianFeldmann\Cli\CommandLine; |
||
| 9 | use SebastianFeldmann\Cli\Command\Executable as Cmd; |
||
| 10 | |||
| 11 | /** |
||
| 12 | * Ldapdump executable class. |
||
| 13 | * |
||
| 14 | * @package phpbu |
||
| 15 | * @subpackage Backup |
||
| 16 | * @author Sebastian Feldmann <[email protected]> |
||
| 17 | * @author Julian Marié <[email protected]> |
||
| 18 | * @copyright Sebastian Feldmann <[email protected]> |
||
| 19 | * @license https://opensource.org/licenses/MIT The MIT License (MIT) |
||
| 20 | * @link http://phpbu.de/ |
||
| 21 | * @since Class available since Release 2.1.12 |
||
| 22 | */ |
||
| 23 | class Ldapdump extends Abstraction implements Executable |
||
| 24 | { |
||
| 25 | use OptionMasker; |
||
| 26 | |||
| 27 | /** |
||
| 28 | * Host to connect to |
||
| 29 | * -h <hostname> |
||
| 30 | * |
||
| 31 | * @var string |
||
| 32 | */ |
||
| 33 | private $host; |
||
| 34 | |||
| 35 | /** |
||
| 36 | * Port to connect to |
||
| 37 | * -p <number> |
||
| 38 | * |
||
| 39 | * @var int |
||
| 40 | */ |
||
| 41 | private $port; |
||
| 42 | |||
| 43 | /** |
||
| 44 | * Basename |
||
| 45 | * -b <basename> |
||
| 46 | * |
||
| 47 | * @var string |
||
| 48 | */ |
||
| 49 | private $searchBase; |
||
| 50 | |||
| 51 | /** |
||
| 52 | * BindDn to connect with |
||
| 53 | * -D <DN> |
||
| 54 | * |
||
| 55 | * @var string |
||
| 56 | */ |
||
| 57 | private $bindDn; |
||
| 58 | |||
| 59 | /** |
||
| 60 | * Password to authenticate with |
||
| 61 | * -w <password> |
||
| 62 | * |
||
| 63 | * @var string |
||
| 64 | */ |
||
| 65 | private $password; |
||
| 66 | |||
| 67 | /** |
||
| 68 | * Filter |
||
| 69 | * <filter> |
||
| 70 | * |
||
| 71 | * @var string |
||
| 72 | */ |
||
| 73 | private $filter; |
||
| 74 | |||
| 75 | /** |
||
| 76 | * Attributes |
||
| 77 | * <attrs> |
||
| 78 | * |
||
| 79 | * @var array |
||
| 80 | */ |
||
| 81 | private $attrs; |
||
| 82 | |||
| 83 | /** |
||
| 84 | * Path to dump file |
||
| 85 | * |
||
| 86 | * @var string |
||
| 87 | */ |
||
| 88 | private $dumpPathname; |
||
| 89 | |||
| 90 | /** |
||
| 91 | * Compression command to pipe output to |
||
| 92 | * |
||
| 93 | * @var \phpbu\App\Backup\Target\Compression |
||
| 94 | */ |
||
| 95 | private $compression; |
||
| 96 | |||
| 97 | /** |
||
| 98 | * Constructor. |
||
| 99 | * |
||
| 100 | * @param string $path |
||
| 101 | */ |
||
| 102 | public function __construct(string $path = '') |
||
| 103 | { |
||
| 104 | $this->setup('ldapsearch', $path); |
||
| 105 | } |
||
| 106 | |||
| 107 | /** |
||
| 108 | * Set the ldap credentials |
||
| 109 | * |
||
| 110 | * @param string $bindDn |
||
| 111 | * @param string $password |
||
| 112 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 113 | */ |
||
| 114 | public function credentials(string $bindDn = '', string $password = '') : Ldapdump |
||
| 115 | { |
||
| 116 | $this->bindDn = $bindDn; |
||
| 117 | $this->password = $password; |
||
| 118 | return $this; |
||
| 119 | } |
||
| 120 | |||
| 121 | /** |
||
| 122 | * Set the ldapdb hostname. |
||
| 123 | * |
||
| 124 | * @param string $host |
||
| 125 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 126 | */ |
||
| 127 | public function useHost(string $host) : Ldapdump |
||
| 128 | { |
||
| 129 | $this->host = $host; |
||
| 130 | return $this; |
||
| 131 | } |
||
| 132 | |||
| 133 | /** |
||
| 134 | * Set the ldap port |
||
| 135 | * |
||
| 136 | * @param int $port |
||
| 137 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 138 | */ |
||
| 139 | public function usePort(int $port) : Ldapdump |
||
| 140 | { |
||
| 141 | $this->port = $port; |
||
| 142 | return $this; |
||
| 143 | } |
||
| 144 | |||
| 145 | /** |
||
| 146 | * Set the ldap searchBase |
||
| 147 | * |
||
| 148 | * @param string $searchBase |
||
| 149 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 150 | */ |
||
| 151 | public function useSearchBase(string $searchBase) : Ldapdump |
||
| 152 | { |
||
| 153 | $this->searchBase = $searchBase; |
||
| 154 | return $this; |
||
| 155 | } |
||
| 156 | |||
| 157 | /** |
||
| 158 | * Set the ldap filter |
||
| 159 | * |
||
| 160 | * @param string $filter |
||
| 161 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 162 | */ |
||
| 163 | public function useFilter(string $filter) : Ldapdump |
||
| 164 | { |
||
| 165 | $this->filter = $filter; |
||
| 166 | return $this; |
||
| 167 | } |
||
| 168 | |||
| 169 | /** |
||
| 170 | * Set the ldap attrs |
||
| 171 | * |
||
| 172 | * @param array $attrs |
||
| 173 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 174 | */ |
||
| 175 | public function useAttributes(array $attrs) : Ldapdump |
||
| 176 | { |
||
| 177 | $this->attrs = $attrs; |
||
| 178 | return $this; |
||
| 179 | } |
||
| 180 | |||
| 181 | /** |
||
| 182 | * Pipe compressor |
||
| 183 | * |
||
| 184 | * @param \phpbu\App\Backup\Target\Compression $compression |
||
| 185 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 186 | */ |
||
| 187 | public function compressOutput(Compression $compression) : Ldapdump |
||
| 188 | { |
||
| 189 | $this->compression = $compression; |
||
| 190 | return $this; |
||
| 191 | } |
||
| 192 | |||
| 193 | /** |
||
| 194 | * Set the dump target path |
||
| 195 | * |
||
| 196 | * @param string $path |
||
| 197 | * @return \phpbu\App\Cli\Executable\Ldapdump |
||
| 198 | */ |
||
| 199 | public function dumpTo(string $path) : Ldapdump |
||
| 200 | { |
||
| 201 | $this->dumpPathname = $path; |
||
| 202 | return $this; |
||
| 203 | } |
||
| 204 | |||
| 205 | /** |
||
| 206 | * Ldapd CommandLine generator. |
||
| 207 | * |
||
| 208 | * @return \SebastianFeldmann\Cli\CommandLine |
||
| 209 | * @throws \phpbu\App\Exception |
||
| 210 | */ |
||
| 211 | protected function createCommandLine() : CommandLine |
||
| 212 | { |
||
| 213 | $process = new CommandLine(); |
||
| 214 | $cmd = new Cmd($this->binary); |
||
| 215 | $process->addCommand($cmd); |
||
| 216 | |||
| 217 | $cmd->addOptionIfNotEmpty('-b', $this->searchBase, true, ' '); |
||
| 218 | $cmd->addOption('-x'); |
||
| 219 | $cmd->addOptionIfNotEmpty('-h', $this->host, true, ' '); |
||
| 220 | $cmd->addOptionIfNotEmpty('-p', $this->port, true, ' '); |
||
| 221 | $cmd->addOptionIfNotEmpty('-D', $this->bindDn, true, ' '); |
||
| 222 | $cmd->addOptionIfNotEmpty('-w', $this->password, true, ' '); |
||
| 223 | |||
| 224 | $this->configureFilter($cmd); |
||
| 225 | $this->configureAttrs($cmd); |
||
| 226 | $this->configureCompression($process); |
||
| 227 | $this->configureOutput($process); |
||
| 228 | |||
| 229 | return $process; |
||
| 230 | } |
||
| 231 | |||
| 232 | /** |
||
| 233 | * Configure Filter |
||
| 234 | * |
||
| 235 | * param \SebastianFeldmann\Cli\Command\Executable $cmd |
||
| 236 | */ |
||
| 237 | private function configureFilter(Cmd $cmd) |
||
| 238 | { |
||
| 239 | $cmd->addOption("'{$this->filter}'"); |
||
| 240 | } |
||
| 241 | |||
| 242 | /** |
||
| 243 | * Configure Attributes |
||
| 244 | * |
||
| 245 | * param \SebastianFeldmann\Cli\Command\Executable $cmd |
||
| 246 | */ |
||
| 247 | private function configureAttrs(Cmd $cmd) |
||
| 248 | { |
||
| 249 | if ($this->attrs) { |
||
|
0 ignored issues
–
show
|
|||
| 250 | foreach ($this->attrs as $attr) { |
||
| 251 | $cmd->addOption("'$attr'"); |
||
| 252 | } |
||
| 253 | } |
||
| 254 | } |
||
| 255 | |||
| 256 | /** |
||
| 257 | * Add compressor pipe if set |
||
| 258 | * |
||
| 259 | * @param \SebastianFeldmann\Cli\CommandLine $process |
||
| 260 | */ |
||
| 261 | private function configureCompression(CommandLine $process) |
||
| 262 | { |
||
| 263 | // if file per table isn't active and a compressor is set |
||
| 264 | if (!empty($this->compression)) { |
||
| 265 | $binary = Cli::detectCmdLocation($this->compression->getCommand(), $this->compression->getPath()); |
||
| 266 | $cmd = new Cmd($binary); |
||
| 267 | $process->pipeOutputTo($cmd); |
||
| 268 | } |
||
| 269 | } |
||
| 270 | |||
| 271 | /** |
||
| 272 | * Configure output redirect |
||
| 273 | * |
||
| 274 | * @param \SebastianFeldmann\Cli\CommandLine $process |
||
| 275 | */ |
||
| 276 | private function configureOutput(CommandLine $process) |
||
| 277 | { |
||
| 278 | $process->redirectOutputTo( |
||
| 279 | $this->dumpPathname . (!empty($this->compression) ? '.' . $this->compression->getSuffix() : '') |
||
| 280 | ); |
||
| 281 | } |
||
| 282 | } |
||
| 283 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)or! empty(...)instead.