Active Directory/Connect: Difference between revisions
m (→{{header|NetRexx}}: remove extra brackets) |
m (→{{header|NetRexx}}: name the config file) |
||
Line 132: | Line 132: | ||
</lang> |
</lang> |
||
'''Sample log4j configuration file:''' |
'''Sample <tt>log4j.xml</tt> configuration file:''' |
||
<lang xml><?xml version="1.0" encoding="UTF-8" ?> |
<lang xml><?xml version="1.0" encoding="UTF-8" ?> |
||
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> |
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> |
Revision as of 15:56, 30 September 2012
You are encouraged to solve this task according to the task description, using any language you may know.
The task is to establish a connection to an Active Directory or Lightweight Directory Access Protocol server.
AutoHotkey
<lang AutoHotkey>objConn := CreateObject("ADODB.Connection") objCmd := CreateObject("ADODB.Command") objConn.Provider := "ADsDSOObject" objConn.Open()</lang>
C
With OpenLDAP: <lang C>#include <ldap.h> ... char *name, *password; ... LDAP *ld = ldap_init("ldap.somewhere.com", 389); ldap_simple_bind_s(ld, name, password); ... after done with it... ldap_unbind(ld);</lang>
Java
<lang java> import java.io.IOException;
import org.apache.directory.ldap.client.api.LdapConnection; import org.apache.directory.ldap.client.api.LdapNetworkConnection; import org.apache.directory.shared.ldap.model.cursor.EntryCursor; import org.apache.directory.shared.ldap.model.entry.Entry; import org.apache.directory.shared.ldap.model.exception.LdapException; import org.apache.directory.shared.ldap.model.message.SearchScope; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
public class RDirectoryLDAP {
static final Logger log_; private static final String ldapHostName; private static final int ldapPort; private static LdapConnection connection;
static { log_ = LoggerFactory.getLogger(RDirectoryLDAP.class); connection = null; ldapHostName = "localhost"; ldapPort = 10389; }
public static void main(String[] args) { try { if (log_.isInfoEnabled()) { log_.info("LDAP Connection to " + ldapHostName + " on port " + ldapPort); } connection = new LdapNetworkConnection(ldapHostName, ldapPort);
try { if (log_.isTraceEnabled()) { log_.trace("LDAP bind"); } connection.bind();
if (log_.isTraceEnabled()) { log_.trace("LDAP unbind"); } connection.unBind(); } catch (LdapException lex) { log_.error("LDAP Error", lex); } catch (IOException ex) { log_.error("I/O Error", ex); } } finally { if (log_.isTraceEnabled()) { log_.trace("LDAP close connection"); } try { if (connection != null) { connection.close(); } } catch (IOException ex) { log_.error("I/O Error on connection.close()", ex); } }
return; }
} </lang>
NetRexx
Uses the Apache LDAP API, connecting to a local ApacheDS LDAP directory server. <lang NetRexx>/* NetRexx */ options replace format comments java crossref symbols binary
import org.apache.directory.ldap.client.api.LdapConnection import org.apache.directory.ldap.client.api.LdapNetworkConnection import org.apache.directory.shared.ldap.model.exception.LdapException import org.slf4j.Logger import org.slf4j.LoggerFactory
class RDirectoryLDAP public
properties constant log_ = LoggerFactory.getLogger(RDirectoryLDAP.class)
properties private static connection = LdapConnection null
method main(args = String[]) public static ldapHostName = String "localhost" ldapPort = int 10389
if log_.isInfoEnabled() then log_.info("LDAP Connection to" ldapHostName "on port" ldapPort) connection = LdapNetworkConnection(ldapHostName, ldapPort)
do if log_.isTraceEnabled() then log_.trace("LDAP bind") connection.bind()
if log_.isTraceEnabled() then log_.trace("LDAP unbind") connection.unBind() catch lex = LdapException log_.error("LDAP Error", Throwable lex) catch iox = IOException log_.error("I/O Error", Throwable iox) finally do if connection \= null then connection.close() catch iox = IOException log_.error("I/O Error on connection.close()", Throwable iox) end end
return
</lang>
Sample log4j.xml configuration file: <lang xml><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{HH:mm:ss}] %-5p [%c] - %m%n" /> </layout> </appender>
<logger name="log4j.logger.org.apache.directory.shared.ldap.name"> <level value="warn" /> </logger> <logger name="log4j.logger.org.apache.directory.shared.codec"> <level value="warn" /> </logger> <logger name="log4j.logger.org.apache.directory.shared.asn1"> <level value="warn" /> </logger>
<root> <level value="info" /> <appender-ref ref="stdout" /> </root>
</log4j:configuration> </lang>
Output:
[08:40:05] INFO [RDirectoryLDAP] - LDAP Connection to localhost on port 10389
Perl
LDAP Modules <lang perl> use Net::LDAP;
my $ldap = Net::LDAP->new('ldap://ldap.example.com') or die $@; my $mesg = $ldap->bind( $bind_dn, password => $bind_pass ); </lang>
PHP
PHP LDAP Reference <lang php><?php $ldap = ldap_connect($hostname, $port); $success = ldap_bind($ldap, $username, $password);</lang>
PicoLisp
<lang PicoLisp>(unless (=0 (setq Ldap (native "libldap.so" "ldap_open" 'N "example.com" 389)))
(quit "Can't open LDAP") )
(native "libldap.so" "ldap_simple_bind_s" 'I Ldap "user" "password")</lang>
Python
<lang python>import ldap
l = ldap.initialize("ldap://ldap.example.com") try:
l.protocol_version = ldap.VERSION3 l.set_option(ldap.OPT_REFERRALS, 0)
bind = l.simple_bind_s("me@example.com", "password")
finally:
l.unbind()
</lang>
Ruby
Similar to Tcl, assume the AD server talks LDAP.
There are many Ruby LDAP packages ([1]) -- this solution uses Net::LDAP ("Pure Ruby LDAP Tools" on RubyForge, gem name "ruby-net-ldap")
<lang ruby>require 'rubygems' require 'net/ldap' ldap = Net::LDAP.new(:host => 'ldap.example.com', :base => 'o=companyname') ldap.authenticate('bind_dn', 'bind_pass')</lang>
Run BASIC
<lang runbasic>print shell$("dir") ' shell out to the os and print it</lang>
Tcl
This does not use SSPI/Kerberos yet, so your AD would need to allow simple ldap access. <lang tcl>package require ldap set conn [ldap::connect $host $port] ldap::bind $conn $user $password</lang>
VBScript
Creating the normal connection to AD <lang vbscript>Set objConn = CreateObject("ADODB.Connection") Set objCmd = CreateObject("ADODB.Command") objConn.Provider = "ADsDSOObject" objConn.Open</lang>
- Programming Tasks
- Programming environment operations
- AutoHotkey
- C
- Java
- NetRexx
- Perl
- PHP
- PicoLisp
- Python
- Python-ldap
- Ruby
- RubyGems
- Run BASIC
- Tcl
- VBScript
- Active Directory/Omit
- AWK/Omit
- Clojure/Omit
- GUISS/Omit
- Inform 7/Omit
- TI-83 BASIC/Omit
- TI-89 BASIC/Omit
- Mathematica/Omit
- MIPS Assembly/Omit
- ML/I/Omit
- PARI/GP/Omit
- PostScript/Omit
- Retro/Omit
- SNOBOL4/Omit
- Yorick/Omit
- ZX Spectrum Basic/Omit
- Maxima/Omit
- Active Directory