Exemple #1
0
static ber_slen_t
sb_debug_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len )
{
	ber_slen_t		ret;
	char ebuf[128];

	ret = LBER_SBIOD_WRITE_NEXT( sbiod, buf, len );
	if (sbiod->sbiod_sb->sb_debug & LDAP_DEBUG_PACKETS) {
		int err = sock_errno();
		if ( ret < 0 ) {
			ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug,
				"%swrite: want=%ld error=%s\n",
				(char *)sbiod->sbiod_pvt, (long)len,
				AC_STRERROR_R( err, ebuf, sizeof ebuf ) );
		} else {
			ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug,
				"%swrite: want=%ld, written=%ld\n",
				(char *)sbiod->sbiod_pvt, (long)len, (long)ret );
			ber_log_bprint( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug,
				(const char *)buf, ret );
		}
		sock_errset(err);
	}

	return ret;
}
Exemple #2
0
void
tester_perror( const char *fname, const char *msg )
{
	int	save_errno = errno;
	char	buf[ BUFSIZ ];

	fprintf( stderr, "%s: %s: (%d) %s %s\n",
			progname, fname, save_errno,
			AC_STRERROR_R( save_errno, buf, sizeof( buf ) ),
			msg ? msg : "" );
}
Exemple #3
0
int
read_and_send_results(
    Operation	*op,
    SlapReply	*rs,
    FILE	*fp )
{
    int	bsize, len;
    char	*buf, *bp;
    char	line[BUFSIZ];
    char	ebuf[128];

    /* read in the result and send it along */
    buf = (char *) ch_malloc( BUFSIZ );
    buf[0] = '\0';
    bsize = BUFSIZ;
    bp = buf;
    while ( !feof(fp) ) {
        errno = 0;
        if ( fgets( line, sizeof(line), fp ) == NULL ) {
            if ( errno == EINTR ) continue;

            Debug( LDAP_DEBUG_ANY, "shell: fgets failed: %s (%d)\n",
                   AC_STRERROR_R(errno, ebuf, sizeof ebuf), errno, 0 );
            break;
        }

        Debug( LDAP_DEBUG_SHELL, "shell search reading line (%s)\n",
               line, 0, 0 );

        /* ignore lines beginning with # (LDIFv1 comments) */
        if ( *line == '#' ) {
            continue;
        }

        /* ignore lines beginning with DEBUG: */
        if ( strncasecmp( line, "DEBUG:", 6 ) == 0 ) {
            continue;
        }

        len = strlen( line );
        while ( bp + len + 1 - buf > bsize ) {
            size_t offset = bp - buf;
            bsize += BUFSIZ;
            buf = (char *) ch_realloc( buf, bsize );
            bp = &buf[offset];
        }
        strcpy( bp, line );
        bp += len;

        /* line marked the end of an entry or result */
        if ( *line == '\n' ) {
            if ( strncasecmp( buf, "RESULT", 6 ) == 0 ) {
                break;
            }

            if ( (rs->sr_entry = str2entry( buf )) == NULL ) {
                Debug( LDAP_DEBUG_ANY, "str2entry(%s) failed\n",
                       buf, 0, 0 );
            } else {
                rs->sr_attrs = op->oq_search.rs_attrs;
                rs->sr_flags = REP_ENTRY_MODIFIABLE;
                send_search_entry( op, rs );
                entry_free( rs->sr_entry );
            }

            bp = buf;
        }
    }
    (void) str2result( buf, &rs->sr_err, (char **)&rs->sr_matched, (char **)&rs->sr_text );

    /* otherwise, front end will send this result */
    if ( rs->sr_err != 0 || op->o_tag != LDAP_REQ_BIND ) {
        send_ldap_result( op, rs );
    }

    free( buf );

    return( rs->sr_err );
}