X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Furl.c;h=48b8f7b30d44970837f7987b3b0f25e90b73e42c;hb=fefc29786cc4169d2c0f1a3ea538cf753fd1683d;hp=6fe98adafba9840d629090c8e6e2a94557db9ad1;hpb=afd665034afd030a2b1091b2f093db918a976371;p=openldap diff --git a/libraries/libldap/url.c b/libraries/libldap/url.c index 6fe98adafb..48b8f7b30d 100644 --- a/libraries/libldap/url.c +++ b/libraries/libldap/url.c @@ -60,6 +60,11 @@ int ldap_pvt_url_scheme2proto( const char *scheme ) if( strcmp("ldaps", scheme) == 0 ) { return LDAP_PROTO_TCP; } +#ifdef LDAP_CONNECTIONLESS + if( strcmp("cldap", scheme) == 0 ) { + return LDAP_PROTO_UDP; + } +#endif return -1; } @@ -126,6 +131,25 @@ ldap_is_ldapi_url( LDAP_CONST char *url ) return strcmp(scheme, "ldapi") == 0; } +#ifdef LDAP_CONNECTIONLESS +int +ldap_is_ldapc_url( LDAP_CONST char *url ) +{ + int enclosed; + const char * scheme; + + if( url == NULL ) { + return 0; + } + + if( skip_url_prefix( url, &enclosed, &scheme ) == NULL ) { + return 0; + } + + return strcmp(scheme, "cldap") == 0; +} +#endif + static const char* skip_url_prefix( const char *url, @@ -181,6 +205,16 @@ skip_url_prefix( return( p ); } +#ifdef LDAP_CONNECTIONLESS + /* check for "cldap://" prefix */ + if ( strncasecmp( p, LDAPC_URL_PREFIX, LDAPC_URL_PREFIX_LEN ) == 0 ) { + /* skip over "cldap://" prefix and return success */ + p += LDAPC_URL_PREFIX_LEN; + *scheme = "cldap"; + return( p ); + } +#endif + return( NULL ); } @@ -732,6 +766,10 @@ ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp ) if ((*ludpp)->lud_port == 0) { if( strcmp((*ludpp)->lud_scheme, "ldap") == 0 ) { (*ludpp)->lud_port = LDAP_PORT; +#ifdef LDAP_CONNECTIONLESS + } else if( strcmp((*ludpp)->lud_scheme, "cldap") == 0 ) { + (*ludpp)->lud_port = LDAP_PORT; +#endif } else if( strcmp((*ludpp)->lud_scheme, "ldaps") == 0 ) { (*ludpp)->lud_port = LDAPS_PORT; }