63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\ldap\app;
 | |
| 
 | |
| use nur\b\IllegalAccessException;
 | |
| use nur\ldap\io\LdapWriter;
 | |
| use nur\ldap\io\LdifWriter;
 | |
| use nur\ldap\io\YamlWriter;
 | |
| use nur\ldap\LdapSearch;
 | |
| use nur\ldap\LdapWalker;
 | |
| 
 | |
| class LdapSearchApp extends LdapApplication {
 | |
|   const ARGS = [
 | |
|     "merge" => parent::ARGS,
 | |
|     ["-s", "--scope", "args" => 1],
 | |
|     ["-b", "--searchbase", "args" => 1],
 | |
|     ["-B", "--searchbase-exact", "args" => 1],
 | |
|     ["-o", "--output", "args" => "file"],
 | |
|     ["group",
 | |
|       ["-F", "--format", "args" => 1],
 | |
|       ["--ldif", "dest" => "format", "value" => "ldif"],
 | |
|       ["--yaml", "dest" => "format", "value" => "yaml"],
 | |
|     ],
 | |
|   ];
 | |
| 
 | |
|   protected $scope;
 | |
|   protected $searchbase, $searchbaseExact;
 | |
|   protected $output;
 | |
|   protected $format = "ldif";
 | |
|   protected $args;
 | |
| 
 | |
|   function getWriter(): LdapWriter {
 | |
|     switch ($this->format) {
 | |
|     case "ldif":
 | |
|     case "l":
 | |
|       return new LdifWriter($this->output);
 | |
|     case "yaml":
 | |
|     case "y":
 | |
|       return new YamlWriter($this->output);
 | |
|     }
 | |
|     throw IllegalAccessException::unexpected_state();
 | |
|   }
 | |
| 
 | |
|   function main() {
 | |
|     $conn = $this->getConn();
 | |
| 
 | |
|     $params = [];
 | |
|     LdapSearch::parse_args($params, $this->args
 | |
|       , $this->searchbase, $this->searchbaseExact
 | |
|       , $this->scope);
 | |
|     /** @var LdapWalker $lo */
 | |
|     $lo = $conn->search(null, $params);
 | |
|     $writer = null;
 | |
|     while ($lo->next($first)) {
 | |
|       if ($first) {
 | |
|         $first = false;
 | |
|         $writer = $this->getWriter();
 | |
|       }
 | |
|       $writer->write($lo);
 | |
|     }
 | |
|     if ($writer !== null) $writer->close();
 | |
|   }
 | |
| }
 |