Active Directory/Connect: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
Thundergnat (talk | contribs) m (Automated syntax highlighting fixup (second round - minor fixes)) |
||
Line 1: | Line 1: | ||
⚫ | |||
{{task|Programming environment operations}} |
{{task|Programming environment operations}} |
||
The task is to establish a connection to an Active Directory or Lightweight Directory Access Protocol server. |
The task is to establish a connection to an Active Directory or Lightweight Directory Access Protocol server. |
||
Line 6: | Line 8: | ||
{{works with|AutoHotkey_L}} |
{{works with|AutoHotkey_L}} |
||
{{trans|VBScript}} |
{{trans|VBScript}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="autohotkey">objConn := CreateObject("ADODB.Connection") |
||
objCmd := CreateObject("ADODB.Command") |
objCmd := CreateObject("ADODB.Command") |
||
objConn.Provider := "ADsDSOObject" |
objConn.Provider := "ADsDSOObject" |
||
Line 13: | Line 15: | ||
=={{header|AutoIt}}== |
=={{header|AutoIt}}== |
||
{{works with|AutoIt}} |
{{works with|AutoIt}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="autoit"> #include <AD.au3> |
||
_AD_Open()</syntaxhighlight> |
_AD_Open()</syntaxhighlight> |
||
=={{header|C}}== |
=={{header|C}}== |
||
With OpenLDAP: |
With OpenLDAP: |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="c">#include <ldap.h> |
||
... |
... |
||
char *name, *password; |
char *name, *password; |
||
Line 28: | Line 30: | ||
=={{header|C sharp|C#}}== |
=={{header|C sharp|C#}}== |
||
<syntaxhighlight lang=csharp> |
<syntaxhighlight lang="csharp"> |
||
// Requires adding a reference to System.DirectoryServices |
// Requires adding a reference to System.DirectoryServices |
||
var objDE = new System.DirectoryServices.DirectoryEntry("LDAP://DC=onecity,DC=corp,DC=fabrikam,DC=com"); |
var objDE = new System.DirectoryServices.DirectoryEntry("LDAP://DC=onecity,DC=corp,DC=fabrikam,DC=com"); |
||
Line 34: | Line 36: | ||
=={{header|ColdFusion}}== |
=={{header|ColdFusion}}== |
||
<syntaxhighlight lang=cfm> |
<syntaxhighlight lang="cfm"> |
||
<cfldap |
<cfldap |
||
server = "#someip#" |
server = "#someip#" |
||
Line 49: | Line 51: | ||
=={{header|D}}== |
=={{header|D}}== |
||
Based on dopenldap. |
Based on dopenldap. |
||
<syntaxhighlight lang=d> |
<syntaxhighlight lang="d"> |
||
import openldap; |
import openldap; |
||
import std.stdio; |
import std.stdio; |
||
Line 72: | Line 74: | ||
=={{header|Erlang}}== |
=={{header|Erlang}}== |
||
This needs a test case. Is there a LDAP server available? |
This needs a test case. Is there a LDAP server available? |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="erlang"> |
||
-module(ldap_example). |
-module(ldap_example). |
||
-export( [main/1] ). |
-export( [main/1] ). |
||
Line 85: | Line 87: | ||
{{trans|C_sharp}} |
{{trans|C_sharp}} |
||
<p>For Active Directory we use the library System.DirectoryServices</p> |
<p>For Active Directory we use the library System.DirectoryServices</p> |
||
<syntaxhighlight lang=fsharp>let adObject = new System.DirectoryServices.DirectoryEntry("LDAP://DC=onecity,DC=corp,DC=fabrikam,DC=com")</syntaxhighlight> |
<syntaxhighlight lang="fsharp">let adObject = new System.DirectoryServices.DirectoryEntry("LDAP://DC=onecity,DC=corp,DC=fabrikam,DC=com")</syntaxhighlight> |
||
<p>For your average LDAP server we use System.DirectoryServices.Protocol</p> |
<p>For your average LDAP server we use System.DirectoryServices.Protocol</p> |
||
<p>For a minimal example we make an anonymous connect to the local machine on the well-known LDAP port 389 |
<p>For a minimal example we make an anonymous connect to the local machine on the well-known LDAP port 389 |
||
<syntaxhighlight lang=fsharp>let ldapServer = new System.DirectoryServices.Protocols.LdapDirectoryIdentifier("127.0.0.1") |
<syntaxhighlight lang="fsharp">let ldapServer = new System.DirectoryServices.Protocols.LdapDirectoryIdentifier("127.0.0.1") |
||
let connect = new System.DirectoryServices.Protocols.LdapConnection(ldapServer) |
let connect = new System.DirectoryServices.Protocols.LdapConnection(ldapServer) |
||
connect.Bind()</syntaxhighlight> |
connect.Bind()</syntaxhighlight> |
||
Line 96: | Line 98: | ||
<br> |
<br> |
||
There are a large number of third-party LDAP libraries for Go. This uses one of the simpler ones and the code below is largely taken from the example on its main page. |
There are a large number of third-party LDAP libraries for Go. This uses one of the simpler ones and the code below is largely taken from the example on its main page. |
||
<syntaxhighlight lang=go>package main |
<syntaxhighlight lang="go">package main |
||
import ( |
import ( |
||
Line 127: | Line 129: | ||
Example uses the [https://hackage.haskell.org/package/ldap-client <tt>ldap-client</tt>] package: |
Example uses the [https://hackage.haskell.org/package/ldap-client <tt>ldap-client</tt>] package: |
||
<syntaxhighlight lang=haskell>{-# LANGUAGE OverloadedStrings #-} |
<syntaxhighlight lang="haskell">{-# LANGUAGE OverloadedStrings #-} |
||
module Main (main) where |
module Main (main) where |
||
Line 147: | Line 149: | ||
This code uses the Apache Directory third-party library. |
This code uses the Apache Directory third-party library. |
||
<syntaxhighlight lang=java>import java.io.IOException; |
<syntaxhighlight lang="java">import java.io.IOException; |
||
import org.apache.directory.api.ldap.model.exception.LdapException; |
import org.apache.directory.api.ldap.model.exception.LdapException; |
||
import org.apache.directory.ldap.client.api.LdapConnection; |
import org.apache.directory.ldap.client.api.LdapConnection; |
||
Line 164: | Line 166: | ||
=={{header|Julia}}== |
=={{header|Julia}}== |
||
<syntaxhighlight lang=julia>using LDAPClient |
<syntaxhighlight lang="julia">using LDAPClient |
||
conn = LDAPClient.LDAPConnection("ldap://localhost:10389") |
conn = LDAPClient.LDAPConnection("ldap://localhost:10389") |
||
Line 172: | Line 174: | ||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |
||
<syntaxhighlight lang=scala> |
<syntaxhighlight lang="scala"> |
||
import org.apache.directory.api.ldap.model.exception.LdapException |
import org.apache.directory.api.ldap.model.exception.LdapException |
||
import org.apache.directory.ldap.client.api.LdapNetworkConnection |
import org.apache.directory.ldap.client.api.LdapNetworkConnection |
||
Line 220: | Line 222: | ||
=={{header|NetRexx}}== |
=={{header|NetRexx}}== |
||
Uses the [http://directory.apache.org/api/ Apache LDAP API], connecting to a local [http://directory.apache.org/apacheds/1.5/ ApacheDS] LDAP directory server. |
Uses the [http://directory.apache.org/api/ Apache LDAP API], connecting to a local [http://directory.apache.org/apacheds/1.5/ ApacheDS] LDAP directory server. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="netrexx">/* NetRexx */ |
||
options replace format comments java crossref symbols binary |
options replace format comments java crossref symbols binary |
||
Line 266: | Line 268: | ||
'''Sample <tt>log4j.xml</tt> configuration file:''' |
'''Sample <tt>log4j.xml</tt> configuration file:''' |
||
<syntaxhighlight lang=xml><?xml version="1.0" encoding="UTF-8" ?> |
<syntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8" ?> |
||
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> |
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> |
||
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> |
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> |
||
Line 301: | Line 303: | ||
=={{header|Perl}}== |
=={{header|Perl}}== |
||
[http://search.cpan.org/dist/perl-ldap/|Perl LDAP Modules] |
[http://search.cpan.org/dist/perl-ldap/|Perl LDAP Modules] |
||
<syntaxhighlight lang=perl> |
<syntaxhighlight lang="perl"> |
||
use Net::LDAP; |
use Net::LDAP; |
||
Line 313: | Line 315: | ||
This has been tested against a random 7-year-old list of public ldap servers, getting mixed errors of |
This has been tested against a random 7-year-old list of public ldap servers, getting mixed errors of |
||
LDAP_SERVER_DOWN/LDAP_INVALID_CREDENTIALS/LDAP_INVALID_DN_SYNTAX/LDAP_CONFIDENTIALITY_REQUIRED. |
LDAP_SERVER_DOWN/LDAP_INVALID_CREDENTIALS/LDAP_INVALID_DN_SYNTAX/LDAP_CONFIDENTIALITY_REQUIRED. |
||
<!--<syntaxhighlight lang= |
<!--<syntaxhighlight lang="phix">--> |
||
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">/</span><span style="color: #000000;">ldap</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> |
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">/</span><span style="color: #000000;">ldap</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> |
||
Line 337: | Line 339: | ||
=={{header|PHP}}== |
=={{header|PHP}}== |
||
[http://php.net/ldap PHP LDAP Reference] |
[http://php.net/ldap PHP LDAP Reference] |
||
<syntaxhighlight lang=php><?php |
<syntaxhighlight lang="php"><?php |
||
$ldap = ldap_connect($hostname, $port); |
$ldap = ldap_connect($hostname, $port); |
||
$success = ldap_bind($ldap, $username, $password);</syntaxhighlight> |
$success = ldap_bind($ldap, $username, $password);</syntaxhighlight> |
||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="picolisp">(unless (=0 (setq Ldap (native "libldap.so" "ldap_open" 'N "example.com" 389))) |
||
(quit "Can't open LDAP") ) |
(quit "Can't open LDAP") ) |
||
Line 353: | Line 355: | ||
[http://www.python-ldap.org/doc/html/index.html python-ldap Documentation] |
[http://www.python-ldap.org/doc/html/index.html python-ldap Documentation] |
||
<syntaxhighlight lang=python>import ldap |
<syntaxhighlight lang="python">import ldap |
||
l = ldap.initialize("ldap://ldap.example.com") |
l = ldap.initialize("ldap://ldap.example.com") |
||
Line 367: | Line 369: | ||
=={{header|Racket}}== |
=={{header|Racket}}== |
||
This version uses the ldap package, and was tested against OpenLDAP (with real values): |
This version uses the ldap package, and was tested against OpenLDAP (with real values): |
||
<syntaxhighlight lang=racket>#lang racket |
<syntaxhighlight lang="racket">#lang racket |
||
(require net/ldap) |
(require net/ldap) |
||
(ldap-authenticate "ldap.somewhere.com" 389 "uid=username,ou=people,dc=somewhere,dc=com" password)</syntaxhighlight> |
(ldap-authenticate "ldap.somewhere.com" 389 "uid=username,ou=people,dc=somewhere,dc=com" password)</syntaxhighlight> |
||
Line 375: | Line 377: | ||
This is a direct translation of the C code -- I have no idea how to try it out since I don't have a working ldap server... So take it as a stub that waits for someone who can try it to do so. (And it's a low level thing anyway, there's an ldap package for Racket which I can't try for a similar reason.) |
This is a direct translation of the C code -- I have no idea how to try it out since I don't have a working ldap server... So take it as a stub that waits for someone who can try it to do so. (And it's a low level thing anyway, there's an ldap package for Racket which I can't try for a similar reason.) |
||
<syntaxhighlight lang=racket>#lang racket |
<syntaxhighlight lang="racket">#lang racket |
||
(require ffi/unsafe ffi/unsafe/define) |
(require ffi/unsafe ffi/unsafe/define) |
||
Line 397: | Line 399: | ||
Using module LMDB - bindings to the openLDAP library. Requires an LDAP instance. |
Using module LMDB - bindings to the openLDAP library. Requires an LDAP instance. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="raku" line>use LMDB; |
||
my %DB := LMDB::DB.open(:path<some-dir>, %connection-parameters); |
my %DB := LMDB::DB.open(:path<some-dir>, %connection-parameters); |
||
Line 410: | Line 412: | ||
{{libheader|RubyGems}} |
{{libheader|RubyGems}} |
||
<syntaxhighlight lang=ruby>require 'rubygems' |
<syntaxhighlight lang="ruby">require 'rubygems' |
||
require 'net/ldap' |
require 'net/ldap' |
||
ldap = Net::LDAP.new(:host => 'ldap.example.com', :base => 'o=companyname') |
ldap = Net::LDAP.new(:host => 'ldap.example.com', :base => 'o=companyname') |
||
Line 417: | Line 419: | ||
=={{header|Run BASIC}}== |
=={{header|Run BASIC}}== |
||
{{incorrect|Run BASIC|Active Directory has nothing to do with the local file system}} |
{{incorrect|Run BASIC|Active Directory has nothing to do with the local file system}} |
||
<syntaxhighlight lang=runbasic>print shell$("dir") ' shell out to the os and print it</syntaxhighlight> |
<syntaxhighlight lang="runbasic">print shell$("dir") ' shell out to the os and print it</syntaxhighlight> |
||
=={{header|Rust}}== |
=={{header|Rust}}== |
||
This solution uses the popular [https://crates.io/crates/ldap3 ldap3] crate. |
This solution uses the popular [https://crates.io/crates/ldap3 ldap3] crate. |
||
<syntaxhighlight lang=rust> |
<syntaxhighlight lang="rust"> |
||
let conn = ldap3::LdapConn::new("ldap://ldap.example.com")?; |
let conn = ldap3::LdapConn::new("ldap://ldap.example.com")?; |
||
conn.simple_bind("bind_dn", "bind_pass")?.success()?; |
conn.simple_bind("bind_dn", "bind_pass")?.success()?; |
||
Line 427: | Line 429: | ||
=={{header|Scala}}== |
=={{header|Scala}}== |
||
<syntaxhighlight lang=scala>import java.io.IOException |
<syntaxhighlight lang="scala">import java.io.IOException |
||
import org.apache.directory.api.ldap.model.exception.LdapException |
import org.apache.directory.api.ldap.model.exception.LdapException |
||
Line 450: | Line 452: | ||
smart BASIC uses three separate commands to list the current directory, folder and files respectively. |
smart BASIC uses three separate commands to list the current directory, folder and files respectively. |
||
<syntaxhighlight lang=qbasic>PRINT "Current directory: ";CURRENT_DIR$() |
<syntaxhighlight lang="qbasic">PRINT "Current directory: ";CURRENT_DIR$() |
||
PRINT |
PRINT |
||
PRINT "Folders:" |
PRINT "Folders:" |
||
Line 468: | Line 470: | ||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
||
This does not use SSPI/Kerberos yet, so your AD would need to allow simple ldap access. |
This does not use SSPI/Kerberos yet, so your AD would need to allow simple ldap access. |
||
<syntaxhighlight lang=tcl>package require ldap |
<syntaxhighlight lang="tcl">package require ldap |
||
set conn [ldap::connect $host $port] |
set conn [ldap::connect $host $port] |
||
ldap::bind $conn $user $password</syntaxhighlight> |
ldap::bind $conn $user $password</syntaxhighlight> |
||
Line 474: | Line 476: | ||
=={{header|VBScript}}== |
=={{header|VBScript}}== |
||
Creating the normal connection to AD |
Creating the normal connection to AD |
||
<syntaxhighlight lang=vbscript>Set objConn = CreateObject("ADODB.Connection") |
<syntaxhighlight lang="vbscript">Set objConn = CreateObject("ADODB.Connection") |
||
Set objCmd = CreateObject("ADODB.Command") |
Set objCmd = CreateObject("ADODB.Command") |
||
objConn.Provider = "ADsDSOObject" |
objConn.Provider = "ADsDSOObject" |
||
Line 483: | Line 485: | ||
{{libheader|OpenLDAP}} |
{{libheader|OpenLDAP}} |
||
As it's not currently possible for Wren-cli to access OpenLDAP directly, we embed a Wren script in a C application to complete this task. |
As it's not currently possible for Wren-cli to access OpenLDAP directly, we embed a Wren script in a C application to complete this task. |
||
<syntaxhighlight lang=ecmascript>/* active_directory_connect.wren */ |
<syntaxhighlight lang="ecmascript">/* active_directory_connect.wren */ |
||
foreign class LDAP { |
foreign class LDAP { |
||
Line 517: | Line 519: | ||
<br> |
<br> |
||
We now embed this in the following C program, compile and run it. |
We now embed this in the following C program, compile and run it. |
||
<syntaxhighlight lang=c>#include <stdio.h> |
<syntaxhighlight lang="c">#include <stdio.h> |
||
#include <stdio_ext.h> |
#include <stdio_ext.h> |
||
#include <stdlib.h> |
#include <stdlib.h> |
||
Line 644: | Line 646: | ||
{{omit from|Lilypond}} |
{{omit from|Lilypond}} |
||
{{omit from|Lingo}} |
{{omit from|Lingo}} |
||
⚫ | |||
⚫ | |||
{{omit from|Mathematica}} |
{{omit from|Mathematica}} |
||
⚫ | |||
{{omit from|MIPS Assembly|None of the commonly used implementations can access AD functions}} |
{{omit from|MIPS Assembly|None of the commonly used implementations can access AD functions}} |
||
{{omit from|ML/I}} |
{{omit from|ML/I}} |
||
Line 653: | Line 654: | ||
{{omit from|Retro}} |
{{omit from|Retro}} |
||
{{omit from|SNOBOL4|Does not have network access.}} |
{{omit from|SNOBOL4|Does not have network access.}} |
||
⚫ | |||
⚫ | |||
{{omit from|Yorick|Does not have network access.}} |
{{omit from|Yorick|Does not have network access.}} |
||
{{omit from|ZX Spectrum Basic|Does not have network access.}} |
{{omit from|ZX Spectrum Basic|Does not have network access.}} |
||
⚫ | |||
⚫ |