log formatOID, possibly mapped to friendly name if known

This commit is contained in:
Pierangelo Masarati 2007-08-22 08:44:21 +00:00
parent 83eec9f96b
commit 00368b128a
2 changed files with 32 additions and 4 deletions

View file

@ -297,6 +297,12 @@ typedef struct ldapcontrol {
#ifdef LDAP_DEVEL #ifdef LDAP_DEVEL
/* <draft-wahl-ldap-session> */ /* <draft-wahl-ldap-session> */
#define LDAP_CONTROL_X_SESSION_TRACKING "1.3.6.1.4.1.21008.108.63.1" #define LDAP_CONTROL_X_SESSION_TRACKING "1.3.6.1.4.1.21008.108.63.1"
#define LDAP_CONTROL_X_SESSION_TRACKING_RADIUS_ACCT_SESSION_ID \
LDAP_CONTROL_X_SESSION_TRACKING ".1"
#define LDAP_CONTROL_X_SESSION_TRACKING_RADIUS_ACCT_MULTI_SESSION_ID \
LDAP_CONTROL_X_SESSION_TRACKING ".2"
#define LDAP_CONTROL_X_SESSION_TRACKING_USERNAME \
LDAP_CONTROL_X_SESSION_TRACKING ".3"
#endif /* LDAP_DEVEL */ #endif /* LDAP_DEVEL */
/* various expired works */ /* various expired works */

View file

@ -1606,6 +1606,17 @@ static int parseSearchOptions (
} }
#ifdef SLAP_CONTROL_X_SESSION_TRACKING #ifdef SLAP_CONTROL_X_SESSION_TRACKING
struct berval session_tracking_formats[] = {
BER_BVC( "LDAP_CONTROL_X_SESSION_TRACKING_RADIUS_ACCT_SESSION_ID" ),
BER_BVC( "RADIUS-Acct-Session-Id" ),
BER_BVC( LDAP_CONTROL_X_SESSION_TRACKING_RADIUS_ACCT_MULTI_SESSION_ID ),
BER_BVC( "RADIUS-Acct-Multi-Session-Id" ),
BER_BVC( LDAP_CONTROL_X_SESSION_TRACKING_USERNAME ),
BER_BVC( "USERNAME" ),
BER_BVNULL
};
static int parseSessionTracking( static int parseSessionTracking(
Operation *op, Operation *op,
SlapReply *rs, SlapReply *rs,
@ -1614,7 +1625,7 @@ static int parseSessionTracking(
BerElement *ber; BerElement *ber;
ber_tag_t tag; ber_tag_t tag;
ber_len_t len; ber_len_t len;
int rc; int i, rc;
struct berval sessionSourceIp = BER_BVNULL, struct berval sessionSourceIp = BER_BVNULL,
sessionSourceName = BER_BVNULL, sessionSourceName = BER_BVNULL,
@ -1723,6 +1734,14 @@ static int parseSessionTracking(
goto error; goto error;
} }
for ( i = 0; !BER_BVISNULL( &session_tracking_formats[ i ] ); i += 2 )
{
if ( bvmatch( &formatOID, &session_tracking_formats[ i ] ) ) {
formatOID = session_tracking_formats[ i + 1 ];
break;
}
}
/* sessionTrackingIdentifier */ /* sessionTrackingIdentifier */
tag = ber_peek_tag( ber, &len ); tag = ber_peek_tag( ber, &len );
if ( tag == LBER_DEFAULT ) { if ( tag == LBER_DEFAULT ) {
@ -1739,7 +1758,8 @@ static int parseSessionTracking(
} }
if ( ldif_is_not_printable( sessionTrackingIdentifier.bv_val, sessionTrackingIdentifier.bv_len ) ) { if ( ldif_is_not_printable( sessionTrackingIdentifier.bv_val, sessionTrackingIdentifier.bv_len ) ) {
BER_BVZERO( &sessionTrackingIdentifier ); /* we want the OID printed, at least */
BER_BVSTR( &sessionTrackingIdentifier, "" );
} }
/* closure */ /* closure */
@ -1758,7 +1778,8 @@ static int parseSessionTracking(
} }
if ( !BER_BVISNULL( &sessionTrackingIdentifier ) ) { if ( !BER_BVISNULL( &sessionTrackingIdentifier ) ) {
if ( st_len ) st_len++; if ( st_len ) st_len++;
st_len += STRLENOF( "ID=" ) + sessionTrackingIdentifier.bv_len; st_len += formatOID.bv_len + STRLENOF( "=" )
+ sessionTrackingIdentifier.bv_len;
} }
if ( st_len == 0 ) { if ( st_len == 0 ) {
@ -1789,7 +1810,8 @@ static int parseSessionTracking(
if ( !BER_BVISNULL( &sessionTrackingIdentifier ) ) { if ( !BER_BVISNULL( &sessionTrackingIdentifier ) ) {
if ( st_len ) *ptr++ = ' '; if ( st_len ) *ptr++ = ' ';
ptr = lutil_strcopy( ptr, "ID=" ); ptr = lutil_strcopy( ptr, formatOID.bv_val );
*ptr++ = '=';
ptr = lutil_strcopy( ptr, sessionTrackingIdentifier.bv_val ); ptr = lutil_strcopy( ptr, sessionTrackingIdentifier.bv_val );
} }