LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Как с секурностью у этого скрипта?

Вот весь кусок для работы с AD (я здесь два модуля объединил для лучшей читаемости).

(require ffi/com)
(define com-connection (com-create-instance "ADODB.Connection"))
(define com-command (com-create-instance "ADODB.Command"))
(com-set-property! com-connection "Provider" "ADsDSOObject")
(com-invoke com-connection "Open" "Active Directory Provider")
(com-set-property! com-command "ActiveConnection" com-connection)

(com-set-property! com-command '("Properties" "Page Size") 1000)
(com-set-property! com-command '("Properties" "Searchscope") 2)

(define (get-data query)
  (com-set-property! com-command "CommandText" query)
  (define record-set (com-invoke com-command "Execute"))
  (com-invoke record-set "MoveFirst")
  (let loop ([acc null])
    (cond 
      [(com-get-property record-set "EOF") acc]
      [else
       (define items (com-get-property record-set "Fields"))
       (define data (reverse
                     (for/list ([i (in-range (com-get-property items "Count"))])
                       (com-get-property (com-get-property* items "Item" i) "Value"))))
       (com-invoke record-set "MoveNext")
       (loop (cons data acc))])))

(define (downcase-car list)
  (cons (string-downcase (car list)) (cdr list)))

(define (as-hash list process)
  (make-hash (map process list)))

(define users (as-hash
               (get-data "SELECT sAMAccountName, name, mail, telephoneNumber
FROM 'LDAP://DC=sges,DC=ru' WHERE objectClass='user'")
               downcase-car))

Вся секурность на уровне AD (от какого пользователя скрипт запустишь, того и права).

Исходная версия monk, :

Как с секурностью у этого скрипта?

Вот весь кусок для работы с AD (я здесь два модуля объединил для лучшей читаемости).

(require ffi/com)
(define com-connection (com-create-instance "ADODB.Connection"))
(define com-command (com-create-instance "ADODB.Command"))
(com-set-property! com-connection "Provider" "ADsDSOObject")
(com-invoke com-connection "Open" "Active Directory Provider")
(com-set-property! com-command "ActiveConnection" com-connection)

;; query format:
#;(com-set-property! com-command 
                   "CommandText"
  "SELECT sAMAccountName, name, mail, telephoneNumber FROM 'LDAP://DC=sges,DC=ru' WHERE objectClass='user'")

(com-set-property! com-command '("Properties" "Page Size") 1000)
(com-set-property! com-command '("Properties" "Searchscope") 2)

(define (get-data query)
  (com-set-property! com-command "CommandText" query)
  (define record-set (com-invoke com-command "Execute"))
  (com-invoke record-set "MoveFirst")
  (let loop ([acc null])
    (cond 
      [(com-get-property record-set "EOF") acc]
      [else
       (define items (com-get-property record-set "Fields"))
       (define data (reverse
                     (for/list ([i (in-range (com-get-property items "Count"))])
                       (com-get-property (com-get-property* items "Item" i) "Value"))))
       (com-invoke record-set "MoveNext")
       (loop (cons data acc))])))

(define (downcase-car list)
  (cons (string-downcase (car list)) (cdr list)))

(define (as-hash list process)
  (make-hash (map process list)))

(define users (as-hash
               (get-data "SELECT sAMAccountName, name, mail, telephoneNumber
FROM 'LDAP://DC=sges,DC=ru' WHERE objectClass='user'")
               downcase-car))

Вся секурность на уровне AD (от какого пользователя скрипт запустишь, того и права).