Active Directory/Connect: Difference between revisions

Content added Content deleted
m (syntax highlighting fixup automation)
m (Automated syntax highlighting fixup (second round - minor fixes))
Line 1: Line 1:
[[Category:Active Directory]]
{{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=AutoHotkey>objConn := CreateObject("ADODB.Connection")
<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=AutoIt> #include <AD.au3>
<syntaxhighlight lang="autoit"> #include <AD.au3>
_AD_Open()</syntaxhighlight>
_AD_Open()</syntaxhighlight>


=={{header|C}}==
=={{header|C}}==
With OpenLDAP:
With OpenLDAP:
<syntaxhighlight lang=C>#include <ldap.h>
<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=Erlang>
<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=NetRexx>/* NetRexx */
<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=Phix>-->
<!--<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=PicoLisp>(unless (=0 (setq Ldap (native "libldap.so" "ldap_open" 'N "example.com" 389)))
<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=perl6>use LMDB;
<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|TI-83 BASIC}}
{{omit from|TI-89 BASIC}} <!-- Does not have network access. -->
{{omit from|Mathematica}}
{{omit from|Mathematica}}
{{omit from|Maxima}}
{{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|TI-83 BASIC}}
{{omit from|TI-89 BASIC}} <!-- 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.}}
{{omit from|Maxima}}

[[Category:Active Directory]]