mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
add scope helpers
This commit is contained in:
parent
6ce47650c9
commit
d12f5fbcb5
@ -65,6 +65,18 @@ LDAP_F (char *) ldap_url_list2urls LDAP_P((
|
||||
LDAP_F (void) ldap_free_urllist LDAP_P((
|
||||
struct ldap_url_desc *ludlist ));
|
||||
|
||||
LDAP_F (int) ldap_pvt_scope2bv LDAP_P ((
|
||||
int scope, struct berval *bv ));
|
||||
|
||||
LDAP_F (LDAP_CONST char *) ldap_pvt_scope2str LDAP_P ((
|
||||
int scope ));
|
||||
|
||||
LDAP_F (int) ldap_pvt_bv2scope LDAP_P ((
|
||||
struct berval *bv ));
|
||||
|
||||
LDAP_F (int) ldap_pvt_str2scope LDAP_P ((
|
||||
LDAP_CONST char * ));
|
||||
|
||||
LDAP_F( char * )
|
||||
ldap_pvt_ctime LDAP_P((
|
||||
const time_t *tp,
|
||||
|
@ -257,34 +257,83 @@ skip_url_prefix(
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
|
||||
static int str2scope( const char *p )
|
||||
int
|
||||
ldap_pvt_scope2bv( int scope, struct berval *bv )
|
||||
{
|
||||
if ( strcasecmp( p, "one" ) == 0 ) {
|
||||
return LDAP_SCOPE_ONELEVEL;
|
||||
switch ( scope ) {
|
||||
case LDAP_SCOPE_BASE:
|
||||
BER_BVSTR( bv, "base" );
|
||||
break;
|
||||
|
||||
} else if ( strcasecmp( p, "onelevel" ) == 0 ) {
|
||||
return LDAP_SCOPE_ONELEVEL;
|
||||
case LDAP_SCOPE_ONELEVEL:
|
||||
BER_BVSTR( bv, "one" );
|
||||
break;
|
||||
|
||||
} else if ( strcasecmp( p, "base" ) == 0 ) {
|
||||
return LDAP_SCOPE_BASE;
|
||||
case LDAP_SCOPE_SUBTREE:
|
||||
BER_BVSTR( bv, "sub" );
|
||||
break;
|
||||
|
||||
} else if ( strcasecmp( p, "sub" ) == 0 ) {
|
||||
return LDAP_SCOPE_SUBTREE;
|
||||
case LDAP_SCOPE_SUBORDINATE:
|
||||
BER_BVSTR( bv, "subordinate" );
|
||||
break;
|
||||
|
||||
} else if ( strcasecmp( p, "subtree" ) == 0 ) {
|
||||
return LDAP_SCOPE_SUBTREE;
|
||||
default:
|
||||
return LDAP_OTHER;
|
||||
}
|
||||
|
||||
} else if ( strcasecmp( p, "subordinate" ) == 0 ) {
|
||||
return LDAP_SCOPE_SUBORDINATE;
|
||||
return LDAP_SUCCESS;
|
||||
}
|
||||
|
||||
} else if ( strcasecmp( p, "children" ) == 0 ) {
|
||||
return LDAP_SCOPE_SUBORDINATE;
|
||||
const char *
|
||||
ldap_pvt_scope2str( int scope )
|
||||
{
|
||||
struct berval bv;
|
||||
|
||||
if ( ldap_pvt_scope2bv( scope, &bv ) == LDAP_SUCCESS ) {
|
||||
return bv.bv_val;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
ldap_pvt_bv2scope( struct berval *bv )
|
||||
{
|
||||
static struct {
|
||||
struct berval bv;
|
||||
int scope;
|
||||
} v[] = {
|
||||
{ BER_BVC( "one" ), LDAP_SCOPE_ONELEVEL },
|
||||
{ BER_BVC( "onelevel" ), LDAP_SCOPE_ONELEVEL },
|
||||
{ BER_BVC( "base" ), LDAP_SCOPE_BASE },
|
||||
{ BER_BVC( "sub" ), LDAP_SCOPE_SUBTREE },
|
||||
{ BER_BVC( "subtree" ), LDAP_SCOPE_SUBTREE },
|
||||
{ BER_BVC( "subord" ), LDAP_SCOPE_SUBORDINATE },
|
||||
{ BER_BVC( "subordinate" ), LDAP_SCOPE_SUBORDINATE },
|
||||
{ BER_BVC( "children" ), LDAP_SCOPE_SUBORDINATE },
|
||||
{ BER_BVNULL, -1 }
|
||||
};
|
||||
int i;
|
||||
|
||||
for ( i = 0; v[ i ].scope != -1; i++ ) {
|
||||
if ( ber_bvstrcasecmp( bv, &v[ i ].bv ) == 0 ) {
|
||||
return v[ i ].scope;
|
||||
}
|
||||
}
|
||||
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
int
|
||||
ldap_pvt_str2scope( const char *p )
|
||||
{
|
||||
struct berval bv;
|
||||
|
||||
ber_str2bv( p, 0, 0, &bv );
|
||||
|
||||
return ldap_pvt_bv2scope( &bv );
|
||||
}
|
||||
|
||||
static const char hex[] = "0123456789ABCDEF";
|
||||
|
||||
#define URLESC_NONE 0x0000U
|
||||
@ -482,8 +531,9 @@ hex_escape_list( char *buf, int len, char **s, unsigned flags )
|
||||
static int
|
||||
desc2str_len( LDAPURLDesc *u )
|
||||
{
|
||||
int sep = 0;
|
||||
int len = 0;
|
||||
int sep = 0;
|
||||
int len = 0;
|
||||
struct berval scope;
|
||||
|
||||
if ( u == NULL ) {
|
||||
return -1;
|
||||
@ -503,36 +553,11 @@ desc2str_len( LDAPURLDesc *u )
|
||||
}
|
||||
}
|
||||
|
||||
switch ( u->lud_scope ) {
|
||||
case LDAP_SCOPE_BASE:
|
||||
case LDAP_SCOPE_ONELEVEL:
|
||||
case LDAP_SCOPE_SUBTREE:
|
||||
case LDAP_SCOPE_SUBORDINATE:
|
||||
switch ( u->lud_scope ) {
|
||||
case LDAP_SCOPE_BASE:
|
||||
len += STRLENOF( "base" );
|
||||
break;
|
||||
|
||||
case LDAP_SCOPE_ONELEVEL:
|
||||
len += STRLENOF( "one" );
|
||||
break;
|
||||
|
||||
case LDAP_SCOPE_SUBTREE:
|
||||
len += STRLENOF( "sub" );
|
||||
break;
|
||||
|
||||
case LDAP_SCOPE_SUBORDINATE:
|
||||
len += STRLENOF( "subordinate" );
|
||||
break;
|
||||
}
|
||||
|
||||
if ( ldap_pvt_scope2bv( u->lud_scope, &scope ) == LDAP_SUCCESS ) {
|
||||
len += scope.bv_len;
|
||||
if ( !sep ) {
|
||||
sep = 3;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ( u->lud_attrs ) {
|
||||
@ -573,10 +598,10 @@ desc2str_len( LDAPURLDesc *u )
|
||||
int
|
||||
desc2str( LDAPURLDesc *u, char *s, int len )
|
||||
{
|
||||
int i;
|
||||
int sep = 0;
|
||||
int sofar = 0;
|
||||
int gotscope = 0;
|
||||
int i;
|
||||
int sep = 0;
|
||||
int sofar = 0;
|
||||
struct berval scope = BER_BVNULL;
|
||||
|
||||
if ( u == NULL ) {
|
||||
return -1;
|
||||
@ -586,20 +611,13 @@ desc2str( LDAPURLDesc *u, char *s, int len )
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch ( u->lud_scope ) {
|
||||
case LDAP_SCOPE_BASE:
|
||||
case LDAP_SCOPE_ONELEVEL:
|
||||
case LDAP_SCOPE_SUBTREE:
|
||||
case LDAP_SCOPE_SUBORDINATE:
|
||||
gotscope = 1;
|
||||
break;
|
||||
}
|
||||
ldap_pvt_scope2bv( u->lud_scope, &scope );
|
||||
|
||||
if ( u->lud_exts ) {
|
||||
sep = 5;
|
||||
} else if ( u->lud_filter ) {
|
||||
sep = 4;
|
||||
} else if ( gotscope ) {
|
||||
} else if ( !BER_BVISEMPTY( &scope ) ) {
|
||||
sep = 3;
|
||||
} else if ( u->lud_attrs ) {
|
||||
sep = 2;
|
||||
@ -662,30 +680,10 @@ desc2str( LDAPURLDesc *u, char *s, int len )
|
||||
|
||||
assert( len >= 0 );
|
||||
|
||||
switch ( u->lud_scope ) {
|
||||
case LDAP_SCOPE_BASE:
|
||||
strcpy( &s[sofar], "base" );
|
||||
sofar += STRLENOF("base");
|
||||
len -= STRLENOF("base");
|
||||
break;
|
||||
|
||||
case LDAP_SCOPE_ONELEVEL:
|
||||
strcpy( &s[sofar], "one" );
|
||||
sofar += STRLENOF("one");
|
||||
len -= STRLENOF("one");
|
||||
break;
|
||||
|
||||
case LDAP_SCOPE_SUBTREE:
|
||||
strcpy( &s[sofar], "sub" );
|
||||
sofar += STRLENOF("sub");
|
||||
len -= STRLENOF("sub");
|
||||
break;
|
||||
|
||||
case LDAP_SCOPE_SUBORDINATE:
|
||||
strcpy( &s[sofar], "children" );
|
||||
sofar += STRLENOF("children");
|
||||
len -= STRLENOF("children");
|
||||
break;
|
||||
if ( !BER_BVISNULL( &scope ) ) {
|
||||
strcpy( &s[sofar], scope.bv_val );
|
||||
sofar += scope.bv_len;
|
||||
len -= scope.bv_len;
|
||||
}
|
||||
|
||||
assert( len >= 0 );
|
||||
@ -1025,7 +1023,7 @@ ldap_url_parse_ext( LDAP_CONST char *url_in, LDAPURLDesc **ludpp, unsigned flags
|
||||
if( *p != '\0' ) {
|
||||
/* parse the scope */
|
||||
ldap_pvt_hex_unescape( p );
|
||||
ludp->lud_scope = str2scope( p );
|
||||
ludp->lud_scope = ldap_pvt_str2scope( p );
|
||||
|
||||
if( ludp->lud_scope == -1 ) {
|
||||
LDAP_FREE( url );
|
||||
|
Loading…
Reference in New Issue
Block a user