#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ldap.h>
#if defined(N_PLAT_NLM) && defined(LIBC)
#include <screen.h>
#endif
static char usage[] =
"\n Usage: addentry <host name> <port number> <login dn> <password>"
"\n\t <continer name> \n"
"\n Example: addentry Acme.com 389 cn=admin,o=Acme secret"
" ou=Sales,o=Acme\n";
int main( int argc, char **argv)
{
int version, ldapPort, rc;
char *ldapHost, *loginDN, *password, *containerName, *dn = NULL;
char *vclass[5], *vcn[4],*vgn[4], *vsn[2];
char *vphone[2], *vmail[2], *vpass[2];
LDAP *ld;
LDAPMod modClass, modCN, modGN, modSN, modPhone, modMail, modPass;
LDAPMod *mods[8];
struct timeval timeOut = {10,0};
#if defined(N_PLAT_NLM) && defined(LIBC)
setscreenmode(SCR_NO_MODE);
#endif
if (argc != 6)
{
printf("%s", usage);
return(1);
}
ldapHost = argv[1];
ldapPort = atoi(argv[2]);
loginDN = argv[3];
password = argv[4];
containerName = argv[5];
version = LDAP_VERSION3;
ldap_set_option( NULL, LDAP_OPT_PROTOCOL_VERSION, &version);
ldap_set_option( NULL, LDAP_OPT_NETWORK_TIMEOUT, &timeOut);
if (( ld = ldap_init( ldapHost, ldapPort )) == NULL)
{
printf("\n\tLDAP session initialization failed\n");
return( 1 );
}
printf ( "\n\tLDAP session initialized\n");
rc = ldap_simple_bind_s( ld, loginDN, password );
if (rc != LDAP_SUCCESS )
{
printf("ldap_simple_bind_s: %s\n", ldap_err2string( rc ));
ldap_unbind_s ( ld );
return( 1 );
}
printf("\n\tBind successful\n");
modClass.mod_op = LDAP_MOD_ADD;
modClass.mod_type = "objectclass";
vclass[0] = "top";
vclass[1] = "person";
vclass[2] = "organizationalPerson";
vclass[3] = "inetOrgPerson";
vclass[4] = NULL;
modClass.mod_values = vclass;
modCN.mod_op = LDAP_MOD_ADD;
modCN.mod_type = "cn";
vcn[0] = "james";
vcn[1] = "James Smith";
vcn[2] = "Jimmy Smith";
vcn[3] = NULL;
modCN.mod_values = vcn;
modGN.mod_op = LDAP_MOD_ADD;
modGN.mod_type = "givenname";
vgn[0] = "James";
vgn[1] = "Jim";
vgn[2] = "Jimmy";
vgn[3] = NULL;
modGN.mod_values = vgn;
modSN.mod_op = LDAP_MOD_ADD;
modSN.mod_type = "sn";
vsn[0] = "Smith";
vsn[1] = NULL;
modSN.mod_values = vsn;
modPhone.mod_op = LDAP_MOD_ADD;
modPhone.mod_type = "telephonenumber";
vphone[0] = "1 801 555 1212";
vphone[1] = NULL;
modPhone.mod_values = vphone;
modMail.mod_op = LDAP_MOD_ADD;
modMail.mod_type = "mail";
vmail[0] = "JSmith@Acme.com";
vmail[1] = NULL;
modMail.mod_values = vmail;
modPass.mod_op = LDAP_MOD_ADD;
modPass.mod_type = "userPassword";
vpass[0] = "newpassword";
vpass[1] = NULL;
modPass.mod_values = vpass;
mods[0] = &modClass;
mods[1] = &modCN;
mods[2] = &modGN;
mods[3] = &modSN;
mods[4] = &modPhone;
mods[5] = &modMail;
mods[6] = &modPass;
mods[7] = NULL;
dn=(char*)malloc(strlen("cn=james,") + strlen(containerName) + 1 );
strcpy( dn, "cn=james," );
strcat( dn, containerName );
rc = ldap_add_ext_s( ld,
dn,
mods,
NULL,
NULL );
if ( rc != LDAP_SUCCESS )
{
printf("\n\tldap_add_ext_s: %s\n", ldap_err2string( rc ));
free( dn );
ldap_unbind_s ( ld );
return(1);
}
printf("\n\tEntry successfully added: %s\n", dn );
free( dn );
ldap_unbind_s( ld );
return( 0 );
}