return entry;
}
-static int spew_file(int fd, char * spew) {
- int written = 0;
+static int spew_file(int fd, char * spew, int len) {
int writeres = 0;
- int len = strlen(spew);
- char * spewptr = spew;
- while(written < len) {
- writeres = write(fd, spewptr, len - written);
+ while(len > 0) {
+ writeres = write(fd, spew, len);
if(writeres == -1) {
perror("could not spew write");
return -1;
}
else {
- spewptr += writeres;
- written += writeres;
+ spew += writeres;
+ len -= writeres;
}
}
return writeres;
int entry_length;
char * entry_as_string;
- openres = open(path->bv_val, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
+ openres = open(path->bv_val, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR | S_IWUSR);
if(openres == -1) {
if(errno == ENOENT)
rs = LDAP_NO_SUCH_OBJECT;
close(openres);
}
else {
- spew_res = spew_file(openres, entry_as_string);
+ spew_res = spew_file(openres, entry_as_string, entry_length);
close(openres);
if(spew_res == -1)
rs = LDAP_UNWILLING_TO_PERFORM;
ck->op->oq_search.rs_scope == LDAP_SCOPE_ONELEVEL
? LDAP_SCOPE_BASE : LDAP_SCOPE_SUBTREE );
- rc = send_search_reference( ck->op, ck->rs );
-
+ ck->rs->sr_entry = e;
+ rc = send_search_reference( ck->op, ck->rs ) < 0;
ber_bvarray_free( ck->rs->sr_ref );
ber_bvarray_free( erefs );
ck->rs->sr_ref = NULL;
+ ck->rs->sr_entry = NULL;
} else if ( test_filter( ck->op, e, ck->op->ors_filter ) == LDAP_COMPARE_TRUE )
{
ck->rs->sr_entry = e;
ck->rs->sr_attrs = ck->op->ors_attrs;
ck->rs->sr_flags = REP_ENTRY_MODIFIABLE;
- rc = send_search_entry(ck->op, ck->rs);
+ rc = send_search_entry(ck->op, ck->rs) < 0;
+ ck->rs->sr_entry = NULL;
}
fd = 1;
if ( rc )
while(1) {
struct berval fname, itmp;
struct dirent * dir;
- bvlist *bvl, *prev;
+ bvlist *bvl, **prev;
dir = readdir(dir_of_path);
if(dir == NULL) break; /* end of the directory */
}
}
- for (ptr = list, prev = (bvlist *)&list; ptr;
- prev = ptr, ptr = ptr->next) {
+ for (prev = &list; (ptr = *prev) != NULL; prev = &ptr->next) {
int cmp = strcmp( bvl->bv.bv_val, ptr->bv.bv_val );
if ( !cmp && bvl->num.bv_val )
cmp = bvl->inum - ptr->inum;
if ( cmp < 0 )
break;
}
- prev->next = bvl;
+ *prev = bvl;
bvl->next = ptr;
}
struct ldif_info *ni = (struct ldif_info *) ck->op->o_bd->be_private;
struct berval path;
struct berval pdn, pndn;
+ int rc;
dnParent( &ck->op->o_req_dn, &pdn );
dnParent( &ck->op->o_req_ndn, &pndn );
dn2path( &ck->op->o_req_ndn, &ck->op->o_bd->be_nsuffix[0], &ni->li_base_path, &path);
- return r_enum_tree(ck, &path, &pdn, &pndn);
+ rc = r_enum_tree(ck, &path, &pdn, &pndn);
+ ch_free( path.bv_val );
+ return rc;
}
/* Get the parent path plus the LDIF suffix */
get_permissiveModify(op),
&rs->sr_text, textbuf,
sizeof( textbuf ) );
-
break;
case LDAP_MOD_REPLACE:
get_permissiveModify(op),
&rs->sr_text, textbuf,
sizeof( textbuf ) );
-
break;
+
case LDAP_MOD_INCREMENT:
+ rc = modify_increment_values( entry,
+ mods, get_permissiveModify(op),
+ &rs->sr_text, textbuf,
+ sizeof( textbuf ) );
+ break;
+
break;
+
case SLAP_MOD_SOFTADD:
mods->sm_op = LDAP_MOD_ADD;
rc = modify_add_values(entry, mods,
)
{
struct ldif_info *ni = be->be_private;
+
+ ch_free(ni->li_base_path.bv_val);
ldap_pvt_thread_mutex_destroy(&ni->li_mutex);
free( be->be_private );
return 0;
int rc;
bi->bi_flags |=
+ SLAP_BFLAG_INCREMENT |
SLAP_BFLAG_REFERRALS;
bi->bi_controls = controls;
bi->bi_tool_id2entry_get = 0;
bi->bi_tool_entry_modify = 0;
+ bi->bi_cf_ocs = ldifocs;
+
rc = config_register_schema( ldifcfg, ldifocs );
if ( rc ) return rc;
return 0;