How to programmatically add user account to openDS?

5.3k views Asked by At

I need to add some user accounts to a openDS server programmatically, but I don't know how to do it even after look through the openDS wiki. Could anyone help me?

3

There are 3 answers

0
kalyan On BEST ANSWER

The below code is using jndi. This will just add an user object with provided password. This is not much. But this might help you to get started.

Also I would prefer to stick with jndi compared to opends-sdk.

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.DirContext;
import javax.naming.directory.Attributes;
import javax.naming.directory.Attribute;
import javax.naming.NamingException;

public class App {

    /* Ugly HardCoded stuff */
    public static String ldapUri = "ldap://localhost:2389";
    public static String admindn = "cn=Directory Manager";
    public static String admincred = "password";
    public static String usersContainer = "ou=users,dc=example,dc=com";

    public static void main(String args[]){

    if (args.length != 2) {
        System.out.println("Usage: App userName password");
        return;
    }
    String username = args[0];
    String password = args[1];

    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, ldapUri);
            env.put( Context.SECURITY_PRINCIPAL, admindn );
            env.put( Context.SECURITY_CREDENTIALS, admincred );
    try {
            DirContext ctx = new InitialDirContext(env);

        Attributes attrs = new BasicAttributes(true);

        Attribute objclass = new BasicAttribute("objectclass");
        objclass.add("top");
        objclass.add("inetorgperson");

        Attribute surname = new BasicAttribute("sn");
        surname.add(username);

        Attribute pwd = new BasicAttribute("userpassword");
        pwd.add(password);

        attrs.put(objclass);
        attrs.put(surname);
        attrs.put(pwd);

        ctx.createSubcontext("cn="+username+","+usersContainer, attrs);
        ctx.close();


    } catch (NamingException e) {
        e.printStackTrace();
    }


    }
 }
4
Ludo On

To add programmatically user accounts in OpenDS, you need to use an LDAP client library for your OS and preferred programming language. OpenDS has an LDAP library for Java, with many sample code. http://www.opends.org/promoted-builds/sdk/20110126210001/ Sample are in the Example directory.

0
Roshan Wijesena On

Here the code used in php working fine for me

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
<?php
$ldapconfig['host'] = 'PC100';
$ldapconfig['port'] = 1389;
$ldapconfig['basedn'] = 'dc=company,dc=com';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);

$password=1;
$username="cn=Directory Manager";


if ($bind=ldap_bind($ds, $username, $password)) {
  echo("Login correct");

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // IMPORTANT
 $dn = "cn=roshanis,dc=example,dc=com"; 


    $ldaprecord['cn'] = "roshanis";
    $ldaprecord['givenName'] = "mkljl";
    $ldaprecord['sn'] = "roshan";
    $ldaprecord['objectclass'][0] = "inetOrgPerson";    
    $ldaprecord['objectclass'][1] = "test";
    $ldaprecord['mail'] = "[email protected]";






    // add data to directory
    $r = ldap_add($ds, $dn, $ldaprecord);

   // $r= ldap_modify($ds, $dn, $ldaprecord);

} else {

  echo("Unable to bind to server.</br>");


}
?>

</body>
</html>