Search code examples
javaldapopends

How to programmatically add user account to openDS?


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?


Solution

  • 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();
        }
    
    
        }
     }