]> git.nbdom.net Git - nb.git/commitdiff
etc/dbq/ldap.php
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 6 Mar 2018 03:51:54 +0000 (03:51 +0000)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 6 Mar 2018 03:51:54 +0000 (03:51 +0000)
etc/dbq/ldap.php
lib/php/db/table.php
lib/php/db/types/ldap.php
lib/php/ldap.php
www/dbq/dbq.php

index 5cee7fd8b864b20cbf5c26aadb394ff6bd826352..3e24856458ba5a4f51a38c665d7f3e7fb368839f 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 require_once(realpath(dirname(__FILE__).'/../../lib/php/nb.php'));
+require_once(NB_ROOT.'/lib/php/ldap.php');
 require_once(NB_ROOT.'/lib/php/http.php');
 if (isset($_SERVER['HTTP_HOST'])) {
        $user = Http::user();
@@ -46,8 +47,8 @@ if (preg_match('/^([^,]+),(.*?)$/',$user,$m)) {
 } else {
        $filter = 'cn='.Http::user();
 }
-
 $filter = '(&('.$filter.')(userPassword=*))';
+
 $DBQ['ldap'] = $GLOBALS['DBQ_LDAP'] + [
        'name' => $base,
        'title' => 'nbdom.net',
@@ -63,58 +64,12 @@ $DBQ['ldap'] = $GLOBALS['DBQ_LDAP'] + [
                        'sql' => 'objectClass=*',
                        'fields' => ['!dn','objectClass','cn'],
                ],
-               'person' => [
-                       'type' => 'table',
-                       'sql' => 'objectClass=person',
-                       'fields' => ['!dn', 'cn', 'sn', 'userPassword','telephoneNumber', 'description', 'seeAlso'],
-               ],
-               'inetOrgPerson' => [
-                       'type' => 'table',
-                       'sql' => 'objectClass=inetOrgPerson',
-                       'fields' => [
-                               '!dn',
-                               'cn',
-                               'dn',
-                               'sn',
-                               'displayName',
-                               'givenName',
-                               #'audio',
-                               #'businessCategory',
-                               'carLicense',
-                               #'departmentNumber',
-                               #'employeeNumber',
-                               #'employeeType',
-                               'homePhone',
-                               'homePostalAddress',
-                               'initials',
-                               'jpegPhoto',
-                               #'labeledURI',
-                               'mail',
-                               #'manager',
-                               'mobile',
-                               'o',
-                               #'pager',
-                               #'photo',
-                               #'roomNumber',
-                               #'secretary',
-                               #'userCertificate',
-                               #'x500uniqueIdentifier',
-                               #'preferredLanguage',
-                               #'userSMIMECertificate',
-                               #'userPKCS12',
-                       ],
-               ],
-               'posixAccount' => [
-                       'type' => 'table',
-                       'sql' => 'objectClass=posixAccount',
-                       'fields' => ['!dn', 'cn', 'uid', 'gidNumber', 'homeDirectory','loginShell', 'description', 'userPassword'],
-               ],
-               'posixGroup' => [
-                       'type' => 'table',
-                       'sql' => 'objectClass=posixGroup',
-                       'fields' => ['!dn', 'cn', 'gidNumber', 'memberUid', 'description', 'userPassword'],
-               ],
-       ],
+               'person' => Ldap::person(),
+               'inetOrgPerson' => Ldap::inetOrgPerson(),
+               'posixAccount' => Ldap::posixAccount(),
+               'posixGroup' => Ldap::posixGroup(),
+       ]
+       ,
        'default_table' => 'me',
 ];
 #debug($GLOBALS['DBQ_LDAP']);
index 2e8df04ce2fa29ec80b9f96c218c16d044ea3ead..9f3eea6f592539aa08369b69c406c01db65edaea 100644 (file)
@@ -1135,8 +1135,8 @@ Class Table extends nb {
                if ($nosql) {
                        $sql = empty($this->sql) ? $this->name : $this->sql;
 
-                       $fct = $this->db()->conf_type('rows_prepare');
-                       if ($fct) $st = $fct($this,$sql);
+                       $fct_rows_prepare = $this->db()->conf_type('rows_prepare');
+                       if ($fct_rows_prepare) $st = $fct_rows_prepare($this,$sql);
 
                        if (!$fct = $this->db()->conf_type('rows_fetch')) {
                                $fct = function() use($st) { return $st->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT); };
@@ -1286,7 +1286,7 @@ Class Table extends nb {
 
                } # < while rows
 
-               if (!empty($st)) $st->closeCursor();
+               if (!empty($st) and !$fct_rows_prepare) $st->closeCursor();
                if (!empty($cursor)) $cursor->closeCursor();
                if (!$count) return;
 
index c059165ed780678cc6fc578232d02ea00f6feee7..354825bd2622a00827870c8716075be1d9f8d232 100644 (file)
@@ -22,13 +22,9 @@ $DB_TYPES['ldap'] = [
        'rows_prepare' => function($table,$sql) {
                $fields = (empty($table->fields_only) ? array_keys($table->fields()) : $table->fields_only);
                $table->replace_fields($fields);
-               #debug(array_keys($table->fields()));
-               #foreach (array_keys($table->fields) as $k) { if (!in_array($k,$fields)) unset($table->fields[$k]); }
                $table->db()->ldap->prepare($sql,['attrs'=>$fields]); return $table->db()->ldap;
        },
        'rows_fetch' => function($table) {
-               #debug($table->fields_only);
-               #debug($table->fields_only);
                $row = $table->db()->ldap->fetch();
                if (!$row) return [];
                $fields = (empty($table->fields_only) ? array_keys($table->fields()) : $table->fields_only);
@@ -62,7 +58,7 @@ $DB_TYPES['ldap'] = [
                        foreach ($m[1] as $v) {
                                $row['objectClass'][] = $v;
                        }
-                       $row['dn'] = 'cn=,'.$table->db()->name;
+                       $row['dn'] = 'cn=CHANGEME,'.$table->db()->ldap->base();
                } else {
                        $table->db()->ldap->prepare([
                                'base' => $values['dn'],
index 7937be6d9ac362e34949b94a8b359e22e334e757..de8e9595158c7e71662bc82385238d92ab69b25b 100644 (file)
@@ -14,6 +14,8 @@ class Ldap {
        private $read;
        private $entry;
 
+  public function base() { return $this->base; }
+
   public function __construct($opt = []) {
                foreach ($opt as $k => $v) if ((string)$v !== '') $this->$k = $v;
        }
@@ -211,5 +213,89 @@ class Ldap {
        public function _fields_keys(&$others=[]) {
                return $this->fields('dn');
        }
-       public function closeCursor() {}
+
+       public function parseDn($dn) {
+               // From https://secure.php.net/manual/en/function.ldap-explode-dn.php
+               $parsr=ldap_explode_dn($dn, 0);
+               //$parsr[] = 'EE=Sôme Krazï string';
+               //$parsr[] = 'AndBogusOne';
+               $out = array();
+               foreach($parsr as $key=>$value){
+                       if(FALSE !== strstr($value, '=')){
+                               list($prefix,$data) = explode("=",$value);
+                               $data=preg_replace("/\\\\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\\\1')).''", $data);
+                               if(isset($current_prefix) && $prefix == $current_prefix){
+                                       $out[$prefix][] = $data;
+                               } else {
+                                       $current_prefix = $prefix;
+                                       $out[$prefix][] = $data;
+                               }
+                       }
+               }
+               return $out;
+       } 
+
+# NB 06.03.18  public function closeCursor() {}
+       public static function posixGroup() {
+               return [
+                       'type' => 'table',
+                       'sql' => 'objectClass=posixGroup',
+                       'fields' => ['!dn', 'cn', 'gidNumber', 'memberUid', 'description', 'userPassword'],
+               ];
+       }
+
+       public static function posixAccount() {
+               return [
+                       'type' => 'table',
+                       'sql' => 'objectClass=posixAccount',
+                       'fields' => ['!dn', 'cn', 'uid', 'gidNumber', 'homeDirectory','loginShell', 'description', 'userPassword'],
+               ];
+       }
+
+       public static function inetOrgPerson() {
+               return [
+                       'type' => 'table',
+                       'sql' => 'objectClass=inetOrgPerson',
+                       'fields' => [
+                               '!dn',
+                               'cn',
+                               'dn',
+                               'sn',
+                               'displayName',
+                               'givenName',
+                               #'audio',
+                               #'businessCategory',
+                               'carLicense',
+                               #'departmentNumber',
+                               #'employeeNumber',
+                               #'employeeType',
+                               'homePhone',
+                               'homePostalAddress',
+                               'initials',
+                               'jpegPhoto',
+                               #'labeledURI',
+                               'mail',
+                               #'manager',
+                               'mobile',
+                               'o',
+                               #'pager',
+                               #'photo',
+                               #'roomNumber',
+                               #'secretary',
+                               #'userCertificate',
+                               #'x500uniqueIdentifier',
+                               #'preferredLanguage',
+                               #'userSMIMECertificate',
+                               #'userPKCS12',
+                       ],
+               ];
+       }
+
+       public static function person() {
+               return [
+                       'type' => 'table',
+                       'sql' => 'objectClass=person',
+                       'fields' => ['!dn', 'cn', 'sn', 'userPassword','telephoneNumber', 'description', 'seeAlso'],
+               ];
+       }
 }
index a63c2f8623e699b2659bf75fdec8ddb87608453d..20b52a7cc1fd6c439b80e2d5ac4c49f37229bbf5 100644 (file)
@@ -24,16 +24,25 @@ class DbQ extends nb {
        const ACTIONS_NO_TITLE = ['ls','vi'];
        const PARAM_DB_DEFAULT = 'ls';
        
-       const READ = 1;
-       const WRITE = 3;
-       const DELETE = 4;
-       const ADMIN = 9;
+       const READ = 9;
+
+       const ADD = 13;
+       const UPDATE = 15;
+       const WRITE = 19;
+
+       const DELETE = 29;
+
+       const ADMIN = 99;
        public $perm = self::ADMIN;
        public $perms = [ # keys in lowercase !!!!
-               'admin' => self::ADMIN,
-               'delete' => self::DELETE,
-               'write' => self::WRITE,
                'read' => self::READ,
+
+               'add' => self::ADD,
+               'update' => self::UPDATE,
+               'write' => self::WRITE,
+
+               'delete' => self::DELETE,
+               'admin' => self::ADMIN,
        ];
 
        public $title = 'Dbq';