Dua

 view release on metacpan or  search on metacpan

Dua.xs  view on Meta::CPAN

    croak ("Number of attribute/value pairs must be even");
  }
  atlist = NULL;
  for(i=2;i<items;(i++,i++))
    dua_addpair(&atlist,(char *)SvPV(ST(i), na),(char *)SvPV(ST(i+1), na));
  RETVAL = dua_add (session, rdn, atlist);
  dua_freelist (atlist);
}
OUTPUT:
  RETVAL

int 
dua_modattr (session, rdn, ...)
ldap_session_t *session
char *rdn
CODE:
{
  atlist_t *atlist;
  register int i;
  if ((items - 2) % 2 != 0) 
  {
    croak ("Number of attribute/value pairs must be even");
  }
  atlist = NULL;
  for(i=2;i<items;(i++,i++))
    dua_addpair(&atlist,(char *)SvPV(ST(i), na),(char *)SvPV(ST(i+1), na));
  RETVAL = dua_modattr (session, rdn, atlist);
  dua_freelist (atlist);
}
OUTPUT:
  RETVAL

int 
dua_delattr (session, rdn, ...)
ldap_session_t *session
char *rdn
CODE:
{
  atlist_t *atlist;
  register int i;

  atlist = NULL;
  for(i=2;i<items;i++)
    dua_addpair(&atlist,(char *)SvPV(ST(i), na),"\0");
  RETVAL = dua_delattr (session, rdn, atlist);
  dua_freelist (atlist);
}
OUTPUT:
  RETVAL

void
dua_find (session, rdn, filter, scope, all)
ldap_session_t *session
char *rdn
char *filter
int scope
int all
PREINIT:
  atlist_t *	atlist;
  register atlist_t *temp;
PPCODE:
  atlist = (atlist_t *) 0;
  dua_find(session,rdn,filter,scope,1,all,&atlist);
  temp = atlist;
  while (temp != NULL) 
  {
    XPUSHs(sv_2mortal(newSVpv(temp->attr,0)));
    XPUSHs(sv_2mortal(newSVpv(temp->value,0)));
    temp = temp->next;
  }
  dua_freelist (atlist);


void
dua_show (session,rdn)
ldap_session_t *session
char *rdn
PREINIT:
  atlist_t *	atlist;
  register atlist_t *temp;
PPCODE:
  atlist = (atlist_t *) 0;
  dua_find(session,rdn,NULL,0,0,0,&atlist);
  temp = atlist;
  while (temp != NULL) 
  {
    XPUSHs(sv_2mortal(newSVpv(temp->attr,0)));
    XPUSHs(sv_2mortal(newSVpv(temp->value,0)));
    temp = temp->next;
  }
  dua_freelist (atlist);

void
dua_attribute (session,rdn,attr)
ldap_session_t *session
char *rdn
char *attr
PREINIT:
  int scope = LDAP_SCOPE_BASE;
  char *filter = "objectclass=*";
  char attrsonly = 0;
  char *attrs[2];

  struct berval **values;
  char **attribute;
  LDAPMessage *result, *entry;
  int i;
PPCODE:

  attrs[0] = attr;
  attrs[1] = NULL;
  if (ldap_search_s(session->dua_ld,rdn,scope,filter,attrs,attrsonly,&result)
      != LDAP_SUCCESS) {
      ldap_perror(session->dua_ld,"ldap_search_s");
      return;
  }

  if (ldap_count_entries(session->dua_ld,result) != 1) {
    session->dua_errstr = "More than one entry returned";
    return;
  }

  if ((entry = ldap_first_entry(session->dua_ld,result)) == NULL) {
    session->dua_errstr = ldap_err2string(session->dua_ld->ld_errno);
    return;
  }

  attribute = attrs;
  while(*attribute) {
    values = ldap_get_values_len(session->dua_ld,entry,*attribute);
    for(i = 0; i < ldap_count_values_len(values); i++) {
      XPUSHs(sv_2mortal(newSVpv(values[i]->bv_val,values[i]->bv_len)));
    }
    ldap_value_free_len (values);
    attribute++;
  }



( run in 1.479 second using v1.01-cache-2.11-cpan-5511b514fd6 )