X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-shell%2Fresult.c;h=25ac11802137dcf5a47565ffc42e3bad02e686b0;hb=dac408369b0812762b3e85f7e024ea472ce79abc;hp=aaadf6bec7f403bec52a787232cd419669d8c5f4;hpb=0e2af54a3ffdeebe3901370683be56fcc53023b0;p=openldap
diff --git a/servers/slapd/back-shell/result.c b/servers/slapd/back-shell/result.c
index aaadf6bec7..25ac118021 100644
--- a/servers/slapd/back-shell/result.c
+++ b/servers/slapd/back-shell/result.c
@@ -1,8 +1,31 @@
/* result.c - shell backend result reading function */
/* $OpenLDAP$ */
-/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software .
+ *
+ * Copyright 1998-2011 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * .
+ */
+/* Portions Copyright (c) 1995 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+/* ACKNOWLEDGEMENTS:
+ * This work was originally developed by the University of Michigan
+ * (as part of U-MICH LDAP).
*/
#include "portable.h"
@@ -19,20 +42,14 @@
int
read_and_send_results(
- Backend *be,
- Connection *conn,
Operation *op,
- FILE *fp,
- AttributeName *attrs,
- int attrsonly
-)
+ SlapReply *rs,
+ FILE *fp )
{
int bsize, len;
char *buf, *bp;
char line[BUFSIZ];
- Entry *e;
- int err;
- char *matched, *info;
+ char ebuf[128];
/* read in the result and send it along */
buf = (char *) ch_malloc( BUFSIZ );
@@ -45,7 +62,7 @@ read_and_send_results(
if ( errno == EINTR ) continue;
Debug( LDAP_DEBUG_ANY, "shell: fgets failed: %s (%d)\n",
- strerror(errno), errno, 0 );
+ AC_STRERROR_R(errno, ebuf, sizeof ebuf), errno, 0 );
break;
}
@@ -63,7 +80,7 @@ read_and_send_results(
}
len = strlen( line );
- while ( bp + len - buf > bsize ) {
+ while ( bp + len + 1 - buf > bsize ) {
size_t offset = bp - buf;
bsize += BUFSIZ;
buf = (char *) ch_realloc( buf, bsize );
@@ -78,28 +95,30 @@ read_and_send_results(
break;
}
- if ( (e = str2entry( buf )) == NULL ) {
+ if ( (rs->sr_entry = str2entry( buf )) == NULL ) {
Debug( LDAP_DEBUG_ANY, "str2entry(%s) failed\n",
buf, 0, 0 );
} else {
- send_search_entry( be, conn, op, e,
- attrs, attrsonly, NULL );
- entry_free( e );
+ rs->sr_attrs = op->oq_search.rs_attrs;
+ rs->sr_flags = REP_ENTRY_MODIFIABLE;
+ send_search_entry( op, rs );
+ entry_free( rs->sr_entry );
+ rs->sr_attrs = NULL;
}
bp = buf;
}
}
- (void) str2result( buf, &err, &matched, &info );
+ (void) str2result( buf, &rs->sr_err, (char **)&rs->sr_matched, (char **)&rs->sr_text );
/* otherwise, front end will send this result */
- if ( err != 0 || op->o_tag != LDAP_REQ_BIND ) {
- send_ldap_result( conn, op, err, matched, info, NULL, NULL );
+ if ( rs->sr_err != 0 || op->o_tag != LDAP_REQ_BIND ) {
+ send_ldap_result( op, rs );
}
free( buf );
- return( err );
+ return( rs->sr_err );
}
void
@@ -110,7 +129,7 @@ print_suffixes(
{
int i;
- for ( i = 0; be->be_suffix[i] != NULL; i++ ) {
- fprintf( fp, "suffix: %s\n", be->be_suffix[i]->bv_val );
+ for ( i = 0; be->be_suffix[i].bv_val != NULL; i++ ) {
+ fprintf( fp, "suffix: %s\n", be->be_suffix[i].bv_val );
}
}