mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
allow clients to set USERNAME in session tracking control request (6779); plug minor leaks
This commit is contained in:
parent
360066784c
commit
d82a1127d0
@ -120,6 +120,7 @@ static int chainingContinuation = -1;
|
|||||||
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
||||||
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
||||||
static int sessionTracking = 0;
|
static int sessionTracking = 0;
|
||||||
|
static char *sessionTrackingName;
|
||||||
struct berval stValue;
|
struct berval stValue;
|
||||||
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
||||||
ber_int_t vlvPos;
|
ber_int_t vlvPos;
|
||||||
@ -207,6 +208,9 @@ st_value( LDAP *ld, struct berval *value )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( sessionTrackingName != NULL ) {
|
||||||
|
ber_str2bv( sessionTrackingName , 0, 0, &id );
|
||||||
|
} else
|
||||||
#ifdef HAVE_CYRUS_SASL
|
#ifdef HAVE_CYRUS_SASL
|
||||||
if ( sasl_authz_id != NULL ) {
|
if ( sasl_authz_id != NULL ) {
|
||||||
ber_str2bv( sasl_authz_id, 0, 0, &id );
|
ber_str2bv( sasl_authz_id, 0, 0, &id );
|
||||||
@ -277,6 +281,13 @@ tool_destroy( void )
|
|||||||
BER_BVZERO( &passwd );
|
BER_BVZERO( &passwd );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_CYRUS_SASL
|
||||||
|
if ( sasl_mech != NULL ) {
|
||||||
|
ber_memfree( sasl_mech );
|
||||||
|
sasl_mech = NULL;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_CYRUS_SASL */
|
||||||
|
|
||||||
if ( infile != NULL ) {
|
if ( infile != NULL ) {
|
||||||
ber_memfree( infile );
|
ber_memfree( infile );
|
||||||
infile = NULL;
|
infile = NULL;
|
||||||
@ -306,6 +317,18 @@ tool_destroy( void )
|
|||||||
ber_memfree( postread_attrs );
|
ber_memfree( postread_attrs );
|
||||||
postread_attrs = NULL;
|
postread_attrs = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
||||||
|
if ( !BER_BVISNULL( &stValue ) ) {
|
||||||
|
ber_memfree( stValue.bv_val );
|
||||||
|
BER_BVZERO( &stValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( sessionTrackingName ) {
|
||||||
|
ber_memfree( sessionTrackingName );
|
||||||
|
sessionTrackingName = NULL;
|
||||||
|
}
|
||||||
|
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -338,7 +361,7 @@ N_(" [!]postread[=<attrs>] (RFC 4527; comma-separated attr list)\n"
|
|||||||
N_(" [!]preread[=<attrs>] (RFC 4527; comma-separated attr list)\n")
|
N_(" [!]preread[=<attrs>] (RFC 4527; comma-separated attr list)\n")
|
||||||
N_(" [!]relax\n")
|
N_(" [!]relax\n")
|
||||||
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
||||||
N_(" [!]sessiontracking\n")
|
N_(" [!]sessiontracking[=<username>]\n")
|
||||||
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
||||||
N_(" abandon, cancel, ignore (SIGINT sends abandon/cancel,\n"
|
N_(" abandon, cancel, ignore (SIGINT sends abandon/cancel,\n"
|
||||||
" or ignores response; if critical, doesn't wait for SIGINT.\n"
|
" or ignores response; if critical, doesn't wait for SIGINT.\n"
|
||||||
@ -671,10 +694,13 @@ tool_args( int argc, char **argv )
|
|||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
}
|
}
|
||||||
sessionTracking = 1;
|
sessionTracking = 1;
|
||||||
if( crit ) {
|
if ( crit ) {
|
||||||
fprintf( stderr, "sessiontracking: critical flag not allowed\n" );
|
fprintf( stderr, "sessiontracking: critical flag not allowed\n" );
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
if ( cvalue ) {
|
||||||
|
sessionTrackingName = ber_strdup( cvalue );
|
||||||
|
}
|
||||||
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
||||||
|
|
||||||
/* this shouldn't go here, really; but it's a feature... */
|
/* this shouldn't go here, really; but it's a feature... */
|
||||||
@ -1471,13 +1497,13 @@ tool_bind( LDAP *ld )
|
|||||||
if ( sessionTracking ) {
|
if ( sessionTracking ) {
|
||||||
LDAPControl c;
|
LDAPControl c;
|
||||||
|
|
||||||
if (stValue.bv_val == NULL && st_value( ld, &stValue ) ) {
|
if ( BER_BVISNULL( &stValue) && st_value( ld, &stValue ) ) {
|
||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
}
|
}
|
||||||
|
|
||||||
c.ldctl_oid = LDAP_CONTROL_X_SESSION_TRACKING;
|
c.ldctl_oid = LDAP_CONTROL_X_SESSION_TRACKING;
|
||||||
c.ldctl_iscritical = 0;
|
c.ldctl_iscritical = 0;
|
||||||
ber_dupbv( &c.ldctl_value, &stValue );
|
c.ldctl_value = stValue;
|
||||||
|
|
||||||
sctrl[nsctrls] = c;
|
sctrl[nsctrls] = c;
|
||||||
sctrls[nsctrls] = &sctrl[nsctrls];
|
sctrls[nsctrls] = &sctrl[nsctrls];
|
||||||
@ -1904,13 +1930,13 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count )
|
|||||||
|
|
||||||
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
||||||
if ( sessionTracking ) {
|
if ( sessionTracking ) {
|
||||||
if ( stValue.bv_val == NULL && st_value( ld, &stValue ) ) {
|
if ( BER_BVISNULL( &stValue ) && st_value( ld, &stValue ) ) {
|
||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
}
|
}
|
||||||
|
|
||||||
c[i].ldctl_oid = LDAP_CONTROL_X_SESSION_TRACKING;
|
c[i].ldctl_oid = LDAP_CONTROL_X_SESSION_TRACKING;
|
||||||
c[i].ldctl_iscritical = 0;
|
c[i].ldctl_iscritical = 0;
|
||||||
ber_dupbv( &c[i].ldctl_value, &stValue );
|
c[i].ldctl_value = stValue;
|
||||||
|
|
||||||
ctrls[i] = &c[i];
|
ctrls[i] = &c[i];
|
||||||
i++;
|
i++;
|
||||||
|
@ -163,7 +163,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -158,7 +158,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -140,7 +140,7 @@ Specify general extensions. \'!\' indicates criticality.
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -225,7 +225,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -167,7 +167,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -164,7 +164,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -272,7 +272,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -76,7 +76,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
@ -125,7 +125,7 @@ General extensions:
|
|||||||
[!]postread[=<attrs>] (a comma-separated attribute list)
|
[!]postread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]preread[=<attrs>] (a comma-separated attribute list)
|
[!]preread[=<attrs>] (a comma-separated attribute list)
|
||||||
[!]relax
|
[!]relax
|
||||||
sessiontracking
|
sessiontracking[=<username>]
|
||||||
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
abandon,cancel,ignore (SIGINT sends abandon/cancel,
|
||||||
or ignores response; if critical, doesn't wait for SIGINT.
|
or ignores response; if critical, doesn't wait for SIGINT.
|
||||||
not really controls)
|
not really controls)
|
||||||
|
Loading…
Reference in New Issue
Block a user