История изменений
Исправление 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 (от какого пользователя скрипт запустишь, того и права).