mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
move session tracking control creation to helper
This commit is contained in:
parent
a9b4c04f1c
commit
57316ae1ac
@ -152,6 +152,53 @@ static struct tool_ctrls_t {
|
|||||||
static int gotintr;
|
static int gotintr;
|
||||||
static int abcan;
|
static int abcan;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
||||||
|
static int
|
||||||
|
st_value( LDAP *ld, struct berval *value )
|
||||||
|
{
|
||||||
|
char *ip = NULL, *name = NULL;
|
||||||
|
struct berval id = { 0 };
|
||||||
|
char namebuf[ MAXHOSTNAMELEN ];
|
||||||
|
|
||||||
|
if ( gethostname( namebuf, sizeof( namebuf ) ) == 0 ) {
|
||||||
|
struct hostent *h;
|
||||||
|
struct in_addr addr;
|
||||||
|
|
||||||
|
name = namebuf;
|
||||||
|
|
||||||
|
h = gethostbyname( name );
|
||||||
|
if ( h != NULL ) {
|
||||||
|
AC_MEMCPY( &addr, h->h_addr, sizeof( addr ) );
|
||||||
|
ip = inet_ntoa( addr );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_CYRUS_SASL
|
||||||
|
if ( sasl_authz_id != NULL ) {
|
||||||
|
ber_str2bv( sasl_authz_id, 0, 0, &id );
|
||||||
|
|
||||||
|
} else if ( sasl_authc_id != NULL ) {
|
||||||
|
ber_str2bv( sasl_authc_id, 0, 0, &id );
|
||||||
|
|
||||||
|
} else
|
||||||
|
#endif /* HAVE_CYRUS_SASL */
|
||||||
|
if ( binddn != NULL ) {
|
||||||
|
ber_str2bv( binddn, 0, 0, &id );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ldap_create_session_tracking_value( ld,
|
||||||
|
ip, name, LDAP_CONTROL_X_SESSION_TRACKING_USERNAME,
|
||||||
|
&id, &stValue ) )
|
||||||
|
{
|
||||||
|
fprintf( stderr, _("Session tracking control encoding error!\n") );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
|
||||||
|
|
||||||
RETSIGTYPE
|
RETSIGTYPE
|
||||||
do_sig( int sig )
|
do_sig( int sig )
|
||||||
{
|
{
|
||||||
@ -1232,55 +1279,14 @@ tool_bind( LDAP *ld )
|
|||||||
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
||||||
if ( sessionTracking ) {
|
if ( sessionTracking ) {
|
||||||
LDAPControl c;
|
LDAPControl c;
|
||||||
char *ip = NULL, *name = NULL;
|
|
||||||
struct berval id = { 0 }, prefix_id;
|
|
||||||
char namebuf[ MAXHOSTNAMELEN ];
|
|
||||||
char *ptr;
|
|
||||||
|
|
||||||
if ( gethostname( namebuf, sizeof( namebuf ) ) == 0 ) {
|
if (stValue.bv_val == NULL && st_value( ld, &stValue ) ) {
|
||||||
struct hostent *h;
|
|
||||||
struct in_addr addr;
|
|
||||||
|
|
||||||
name = namebuf;
|
|
||||||
|
|
||||||
h = gethostbyname( name );
|
|
||||||
if ( h != NULL ) {
|
|
||||||
AC_MEMCPY( &addr, h->h_addr, sizeof( addr ) );
|
|
||||||
ip = inet_ntoa( addr );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_CYRUS_SASL
|
|
||||||
if ( sasl_authz_id != NULL ) {
|
|
||||||
ber_str2bv( sasl_authz_id, 0, 0, &id );
|
|
||||||
|
|
||||||
} else if ( sasl_authc_id != NULL ) {
|
|
||||||
ber_str2bv( sasl_authc_id, 0, 0, &id );
|
|
||||||
|
|
||||||
} else
|
|
||||||
#endif /* HAVE_CYRUS_SASL */
|
|
||||||
if ( binddn != NULL ) {
|
|
||||||
ber_str2bv( binddn, 0, 0, &id );
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ber_str2bv( "anonymous", 0, 0, &id );
|
|
||||||
}
|
|
||||||
|
|
||||||
prefix_id.bv_len = STRLENOF( "binding:" ) + id.bv_len;
|
|
||||||
ptr = prefix_id.bv_val = malloc ( prefix_id.bv_len + 1 );
|
|
||||||
ptr = lutil_strcopy( ptr, "binding:" );
|
|
||||||
ptr = lutil_strcopy(ptr, id.bv_val );
|
|
||||||
|
|
||||||
if ( ldap_create_session_tracking_value( ld,
|
|
||||||
ip, name, LDAP_CONTROL_X_SESSION_TRACKING_USERNAME,
|
|
||||||
&prefix_id, &c.ldctl_value ) )
|
|
||||||
{
|
|
||||||
fprintf( stderr, _("Session tracking control encoding error!\n") );
|
|
||||||
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 );
|
||||||
|
|
||||||
sctrl[nsctrls] = c;
|
sctrl[nsctrls] = c;
|
||||||
sctrls[nsctrls] = &sctrl[nsctrls];
|
sctrls[nsctrls] = &sctrl[nsctrls];
|
||||||
@ -1673,52 +1679,14 @@ 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 ) {
|
if ( stValue.bv_val == NULL && st_value( ld, &stValue ) ) {
|
||||||
char *ip = NULL, *name = NULL;
|
exit( EXIT_FAILURE );
|
||||||
struct berval id = { 0 };
|
|
||||||
char namebuf[ MAXHOSTNAMELEN ];
|
|
||||||
|
|
||||||
if ( gethostname( namebuf, sizeof( namebuf ) ) == 0 ) {
|
|
||||||
struct hostent *h;
|
|
||||||
struct in_addr addr;
|
|
||||||
|
|
||||||
name = namebuf;
|
|
||||||
|
|
||||||
h = gethostbyname( name );
|
|
||||||
if ( h != NULL ) {
|
|
||||||
AC_MEMCPY( &addr, h->h_addr, sizeof( addr ) );
|
|
||||||
ip = inet_ntoa( addr );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_CYRUS_SASL
|
|
||||||
if ( sasl_authz_id != NULL ) {
|
|
||||||
ber_str2bv( sasl_authz_id, 0, 0, &id );
|
|
||||||
|
|
||||||
} else if ( sasl_authc_id != NULL ) {
|
|
||||||
ber_str2bv( sasl_authc_id, 0, 0, &id );
|
|
||||||
|
|
||||||
} else
|
|
||||||
#endif /* HAVE_CYRUS_SASL */
|
|
||||||
if ( binddn != NULL ) {
|
|
||||||
ber_str2bv( binddn, 0, 0, &id );
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ber_str2bv( "anonymous", 0, 0, &id );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ldap_create_session_tracking_value( ld,
|
|
||||||
ip, name, LDAP_CONTROL_X_SESSION_TRACKING_USERNAME,
|
|
||||||
&id, &stValue ) )
|
|
||||||
{
|
|
||||||
fprintf( stderr, _("Session tracking control encoding error!\n") );
|
|
||||||
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 );
|
ber_dupbv( &c[i].ldctl_value, &stValue );
|
||||||
|
|
||||||
ctrls[i] = &c[i];
|
ctrls[i] = &c[i];
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user