X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fextended.c;h=be35dda443bb96d1330acaad8408dd43fe9b85c6;hb=b898f1271db5021e1873e38e1498a99d9450b646;hp=345f48a297987cced78ec36d9afcb2b5fb5c0ec0;hpb=acbb5cf689a4336af05c9f259d909d8141055bac;p=openldap diff --git a/libraries/libldap/extended.c b/libraries/libldap/extended.c index 345f48a297..be35dda443 100644 --- a/libraries/libldap/extended.c +++ b/libraries/libldap/extended.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2006 The OpenLDAP Foundation. + * Copyright 1998-2010 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -12,9 +12,18 @@ * top-level directory of the distribution or, alternatively, at * . */ -/* Portions Copyright (C) The Internet Society (1997). - * ASN.1 fragments are from RFC 2251; see RFC for full legal notices. - */ + +#include "portable.h" + +#include +#include + +#include +#include +#include + +#include "ldap-int.h" +#include "ldap_log.h" /* * LDAPv3 Extended Operation Request @@ -30,20 +39,9 @@ * response [11] OCTET STRING OPTIONAL * } * + * (Source RFC 4511) */ -#include "portable.h" - -#include -#include - -#include -#include -#include - -#include "ldap-int.h" -#include "ldap_log.h" - int ldap_extended_operation( LDAP *ld, @@ -140,7 +138,7 @@ ldap_extended_operation_s( return( rc ); } - if ( ldap_result( ld, msgid, LDAP_MSG_ALL, (struct timeval *) NULL, &res ) == -1 ) { + if ( ldap_result( ld, msgid, LDAP_MSG_ALL, (struct timeval *) NULL, &res ) == -1 || !res ) { return( ld->ld_errno ); } @@ -210,13 +208,8 @@ ldap_parse_extended_result ( return ld->ld_errno; } -#ifdef LDAP_NULL_IS_NULL rc = ber_scanf( ber, "{eAA" /*}*/, &errcode, &ld->ld_matched, &ld->ld_error ); -#else /* ! LDAP_NULL_IS_NULL */ - rc = ber_scanf( ber, "{eaa" /*}*/, &errcode, - &ld->ld_matched, &ld->ld_error ); -#endif /* ! LDAP_NULL_IS_NULL */ if( rc == LBER_ERROR ) { ld->ld_errno = LDAP_DECODING_ERROR; @@ -248,9 +241,7 @@ ldap_parse_extended_result ( return ld->ld_errno; } -#ifdef LDAP_NULL_IS_NULL assert( resoid[ 0 ] != '\0' ); -#endif /* LDAP_NULL_IS_NULL */ tag = ber_peek_tag( ber, &len ); } @@ -300,7 +291,6 @@ ldap_parse_intermediate ( int freeit ) { BerElement *ber; - ber_tag_t rc; ber_tag_t tag; ber_len_t len; struct berval *resdata; @@ -324,6 +314,7 @@ ldap_parse_intermediate ( if( retoidp != NULL ) *retoidp = NULL; if( retdatap != NULL ) *retdatap = NULL; + if( serverctrls != NULL ) *serverctrls = NULL; ber = ber_dup( res->lm_ber ); @@ -332,9 +323,9 @@ ldap_parse_intermediate ( return ld->ld_errno; } - rc = ber_scanf( ber, "{" /*}*/ ); + tag = ber_scanf( ber, "{" /*}*/ ); - if( rc == LBER_ERROR ) { + if( tag == LBER_ERROR ) { ld->ld_errno = LDAP_DECODING_ERROR; ber_free( ber, 0 ); return ld->ld_errno; @@ -359,9 +350,7 @@ ldap_parse_intermediate ( return ld->ld_errno; } -#ifdef LDAP_NULL_IS_NULL assert( resoid[ 0 ] != '\0' ); -#endif /* LDAP_NULL_IS_NULL */ tag = ber_peek_tag( ber, &len ); } @@ -377,16 +366,16 @@ ldap_parse_intermediate ( } if ( serverctrls == NULL ) { - rc = LDAP_SUCCESS; + ld->ld_errno = LDAP_SUCCESS; goto free_and_return; } if ( ber_scanf( ber, /*{*/ "}" ) == LBER_ERROR ) { - rc = LDAP_DECODING_ERROR; + ld->ld_errno = LDAP_DECODING_ERROR; goto free_and_return; } - rc = ldap_pvt_get_controls( ber, serverctrls ); + ld->ld_errno = ldap_pvt_get_controls( ber, serverctrls ); free_and_return: ber_free( ber, 0 ); @@ -407,6 +396,6 @@ free_and_return: ldap_msgfree( res ); } - return LDAP_SUCCESS; + return ld->ld_errno; }