[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Object Class violation



I suggest you express the LDAP operation you want to do in LDIF,
and use ldapmodify(1) to see if that expression is sensible.
Once you have ldapmodify(1) to requesting the intended operation,
you can then emulate what ldapmodify(1) does, including providing
as output the error text from the server.  (The last part is a
hint.)

Kurt

At 08:22 AM 3/14/2005, Christophe.Senzot@steria.be wrote:
>Hi,
>
>I'm not yet familiar with LDAP and I have an "object class violation" when
>I try to add a binary entry to ldap. Can someone help me on this ?
>
>Here is the code :
>
>LDAPMod *list_of_attrs[2];
>LDAPMod attr1, attr2, attr3;
>LDAPMessage *result;
>int msgid, rc;
>
>  char *tmp_data;
>  FILE *fp;
>  struct stat st;
>
>  struct berval tmp_berval;
>  struct berval *tmp_values[2];
>
>  // Get information about the file, including its size.
>  if ( stat( "authorityRevocationList", &st ) != 0 )
>  {
>    printf( "stat error\n" );
>    return 1;
>  }
>
>  // Open the file and read it.
>  if ( ( fp = fopen( "authorityRevocationList", "rb" ) ) == NULL )
>  {
>    printf( "fopen error\n" );
>    return 1;
>  }
>
>  if ( ( ( tmp_data = ( char * )malloc( st.st_size ) ) == NULL ) ||
>         ( fread ( tmp_data, st.st_size, 1, fp ) != 1 ) )
>  {
>    printf( "fread error" );
>    return 1;
>  }
>
>  fclose( fp );
>
>// Distinguished name of the entry that you want to add.
>char *dn = "cn=Citizen CA/200503,ou=Bel ID,dc=sria,dc=be";
>
>attr1.mod_type = "authorityRevocationList;binary";
>attr1.mod_op = LDAP_MOD_REPLACE | LDAP_MOD_BVALUES;
>tmp_berval.bv_len = st.st_size;
>tmp_berval.bv_val = tmp_data;
>tmp_values[0] = &tmp_berval;
>tmp_values[1] = NULL;
>attr1.mod_bvalues = tmp_values;
>
>/*
>attr2.mod_type = "objectClass";
>attr2.mod_op = LDAP_MOD_ADD;
>char *objectClass_values[] = { /*"top", "certificationAuthority",
>*/"cRLDistributionPoint", NULL };
>attr2.mod_values = objectClass_values;
>*/
>
>// Add the pointers to array
>list_of_attrs[0] = &attr1;
>//list_of_attrs[1] = &attr2;
>list_of_attrs[1] = NULL;
>
>      // Add Entry
>      if((ulRet = ldap_add_s( m_LDAP, dn, list_of_attrs)) != LDAP_SUCCESS)
>      {
>       printf("ldap_add_s <%s>\n", ldap_err2string( ulRet));
>       ldap_unbind( m_LDAP);
>       return 1;
>      }
>________________________________________________________________________________________________
>
>I've create an other entry manually on the ldap server and when I list all
>the attributes, I have this :
>
>dn: cn=Citizen CA/200501,ou=Bel ID,dc=sria,dc=be
>        attribute: cn
>                value: Citizen CA/200501
>        attribute: objectClass
>                value: cRLDistributionPoint
>                value: certificationAuthority
>                value: top
>        attribute: authorityRevocationList;binary
>        *H÷     value: 0l0V0
>        attribute: cACertificate;binary
>        *H÷     value: 0Ü0Ä n#T©ËÕ½1,y[@qöÙ0
>        attribute: certificateRevocationList;binary
>        *H÷     value: 0®00
>
>Does it mean that I have to create an attribute "objectClass" as I did in
>comments ? (with this I have a "Naming violation" error)
>I think my problem is because I've never defined the objectclass but I
>don't know where to do that.
>
>Any advice would be appreciate, thanks in advance.
>
>Christophe