mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
Changed reqoid to struct berval
This commit is contained in:
parent
a0bfd8b058
commit
81c3c311a8
@ -35,34 +35,38 @@
|
|||||||
|
|
||||||
static struct extop_list {
|
static struct extop_list {
|
||||||
struct extop_list *next;
|
struct extop_list *next;
|
||||||
char *oid;
|
struct berval oid;
|
||||||
SLAP_EXTOP_MAIN_FN *ext_main;
|
SLAP_EXTOP_MAIN_FN *ext_main;
|
||||||
} *supp_ext_list = NULL;
|
} *supp_ext_list = NULL;
|
||||||
|
|
||||||
static SLAP_EXTOP_MAIN_FN whoami_extop;
|
static SLAP_EXTOP_MAIN_FN whoami_extop;
|
||||||
|
|
||||||
|
/* BerVal Constant initializer */
|
||||||
|
|
||||||
|
#define BVC(x) {sizeof(x)-1, x}
|
||||||
|
|
||||||
/* this list of built-in extops is for extops that are not part
|
/* this list of built-in extops is for extops that are not part
|
||||||
* of backends or in external modules. essentially, this is
|
* of backends or in external modules. essentially, this is
|
||||||
* just a way to get built-in extops onto the extop list without
|
* just a way to get built-in extops onto the extop list without
|
||||||
* having a separate init routine for each built-in extop.
|
* having a separate init routine for each built-in extop.
|
||||||
*/
|
*/
|
||||||
static struct {
|
static struct {
|
||||||
char *oid;
|
struct berval oid;
|
||||||
SLAP_EXTOP_MAIN_FN *ext_main;
|
SLAP_EXTOP_MAIN_FN *ext_main;
|
||||||
} builtin_extops[] = {
|
} builtin_extops[] = {
|
||||||
#ifdef HAVE_TLS
|
#ifdef HAVE_TLS
|
||||||
{ LDAP_EXOP_START_TLS, starttls_extop },
|
{ BVC(LDAP_EXOP_START_TLS), starttls_extop },
|
||||||
#endif
|
#endif
|
||||||
{ LDAP_EXOP_MODIFY_PASSWD, passwd_extop },
|
{ BVC(LDAP_EXOP_MODIFY_PASSWD), passwd_extop },
|
||||||
{ LDAP_EXOP_X_WHO_AM_I, whoami_extop },
|
{ BVC(LDAP_EXOP_X_WHO_AM_I), whoami_extop },
|
||||||
{ NULL, NULL }
|
{ {0,NULL}, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static struct extop_list *find_extop(
|
static struct extop_list *find_extop(
|
||||||
struct extop_list *list, char *oid );
|
struct extop_list *list, struct berval *oid );
|
||||||
|
|
||||||
char *
|
struct berval *
|
||||||
get_supported_extop (int index)
|
get_supported_extop (int index)
|
||||||
{
|
{
|
||||||
struct extop_list *ext;
|
struct extop_list *ext;
|
||||||
@ -76,7 +80,7 @@ get_supported_extop (int index)
|
|||||||
|
|
||||||
if (ext == NULL) return NULL;
|
if (ext == NULL) return NULL;
|
||||||
|
|
||||||
return ext->oid ;
|
return &ext->oid ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -86,8 +90,8 @@ do_extended(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
int rc = LDAP_SUCCESS;
|
int rc = LDAP_SUCCESS;
|
||||||
char* reqoid;
|
struct berval reqoid = {0, NULL};
|
||||||
struct berval *reqdata;
|
struct berval reqdata = {0, NULL};
|
||||||
ber_tag_t tag;
|
ber_tag_t tag;
|
||||||
ber_len_t len;
|
ber_len_t len;
|
||||||
struct extop_list *ext;
|
struct extop_list *ext;
|
||||||
@ -103,9 +107,6 @@ do_extended(
|
|||||||
#else
|
#else
|
||||||
Debug( LDAP_DEBUG_TRACE, "do_extended\n", 0, 0, 0 );
|
Debug( LDAP_DEBUG_TRACE, "do_extended\n", 0, 0, 0 );
|
||||||
#endif
|
#endif
|
||||||
reqoid = NULL;
|
|
||||||
reqdata = NULL;
|
|
||||||
|
|
||||||
if( op->o_protocol < LDAP_VERSION3 ) {
|
if( op->o_protocol < LDAP_VERSION3 ) {
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
||||||
@ -122,7 +123,7 @@ do_extended(
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ber_scanf( op->o_ber, "{a" /*}*/, &reqoid ) == LBER_ERROR ) {
|
if ( ber_scanf( op->o_ber, "{m" /*}*/, &reqoid ) == LBER_ERROR ) {
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
||||||
"do_extended: conn %d ber_scanf failed\n", conn->c_connid ));
|
"do_extended: conn %d ber_scanf failed\n", conn->c_connid ));
|
||||||
@ -135,14 +136,14 @@ do_extended(
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !(ext = find_extop(supp_ext_list, reqoid)) ) {
|
if( !(ext = find_extop(supp_ext_list, &reqoid)) ) {
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
||||||
"do_extended: conn %d unsupported operation \"%s\"\n",
|
"do_extended: conn %d unsupported operation \"%s\"\n",
|
||||||
conn->c_connid, reqoid ));
|
conn->c_connid, reqoid.bv_val ));
|
||||||
#else
|
#else
|
||||||
Debug( LDAP_DEBUG_ANY, "do_extended: unsupported operation \"%s\"\n",
|
Debug( LDAP_DEBUG_ANY, "do_extended: unsupported operation \"%s\"\n",
|
||||||
reqoid, 0 ,0 );
|
reqoid.bv_val, 0 ,0 );
|
||||||
#endif
|
#endif
|
||||||
send_ldap_result( conn, op, rc = LDAP_PROTOCOL_ERROR,
|
send_ldap_result( conn, op, rc = LDAP_PROTOCOL_ERROR,
|
||||||
NULL, "unsupported extended operation", NULL, NULL );
|
NULL, "unsupported extended operation", NULL, NULL );
|
||||||
@ -152,7 +153,7 @@ do_extended(
|
|||||||
tag = ber_peek_tag( op->o_ber, &len );
|
tag = ber_peek_tag( op->o_ber, &len );
|
||||||
|
|
||||||
if( ber_peek_tag( op->o_ber, &len ) == LDAP_TAG_EXOP_REQ_VALUE ) {
|
if( ber_peek_tag( op->o_ber, &len ) == LDAP_TAG_EXOP_REQ_VALUE ) {
|
||||||
if( ber_scanf( op->o_ber, "O", &reqdata ) == LBER_ERROR ) {
|
if( ber_scanf( op->o_ber, "m", &reqdata ) == LBER_ERROR ) {
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
||||||
"do_extended: conn %d ber_scanf failed\n", conn->c_connid ));
|
"do_extended: conn %d ber_scanf failed\n", conn->c_connid ));
|
||||||
@ -187,9 +188,9 @@ do_extended(
|
|||||||
|
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1,
|
LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1,
|
||||||
"do_extended: conn %d oid=%d\n.", conn->c_connid, reqoid ));
|
"do_extended: conn %d oid=%d\n.", conn->c_connid, reqoid.bv_val ));
|
||||||
#else
|
#else
|
||||||
Debug( LDAP_DEBUG_ARGS, "do_extended: oid=%s\n", reqoid, 0 ,0 );
|
Debug( LDAP_DEBUG_ARGS, "do_extended: oid=%s\n", reqoid.bv_val, 0 ,0 );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rspoid = NULL;
|
rspoid = NULL;
|
||||||
@ -199,7 +200,7 @@ do_extended(
|
|||||||
refs = NULL;
|
refs = NULL;
|
||||||
|
|
||||||
rc = (ext->ext_main)( conn, op,
|
rc = (ext->ext_main)( conn, op,
|
||||||
reqoid, reqdata,
|
reqoid.bv_val, &reqdata,
|
||||||
&rspoid, &rspdata, &rspctrls, &text, &refs );
|
&rspoid, &rspdata, &rspctrls, &text, &refs );
|
||||||
|
|
||||||
if( rc != SLAPD_ABANDON ) {
|
if( rc != SLAPD_ABANDON ) {
|
||||||
@ -223,13 +224,6 @@ do_extended(
|
|||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if ( reqdata != NULL ) {
|
|
||||||
ber_bvfree( reqdata );
|
|
||||||
}
|
|
||||||
if ( reqoid != NULL ) {
|
|
||||||
free( reqoid );
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,8 +241,8 @@ load_extop(
|
|||||||
if (ext == NULL)
|
if (ext == NULL)
|
||||||
return(-1);
|
return(-1);
|
||||||
|
|
||||||
ext->oid = ch_strdup( ext_oid );
|
ber_str2bv( ext_oid, 0, 1, &ext->oid );
|
||||||
if (ext->oid == NULL) {
|
if (ext->oid.bv_val == NULL) {
|
||||||
free(ext);
|
free(ext);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
@ -266,8 +260,8 @@ extops_init (void)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; builtin_extops[i].oid != NULL; i++) {
|
for (i = 0; builtin_extops[i].oid.bv_val != NULL; i++) {
|
||||||
load_extop(builtin_extops[i].oid, builtin_extops[i].ext_main);
|
load_extop(builtin_extops[i].oid.bv_val, builtin_extops[i].ext_main);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@ -280,20 +274,20 @@ extops_kill (void)
|
|||||||
/* we allocated the memory, so we have to free it, too. */
|
/* we allocated the memory, so we have to free it, too. */
|
||||||
while ((ext = supp_ext_list) != NULL) {
|
while ((ext = supp_ext_list) != NULL) {
|
||||||
supp_ext_list = ext->next;
|
supp_ext_list = ext->next;
|
||||||
if (ext->oid != NULL)
|
if (ext->oid.bv_val != NULL)
|
||||||
ch_free(ext->oid);
|
ch_free(ext->oid.bv_val);
|
||||||
ch_free(ext);
|
ch_free(ext);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct extop_list *
|
static struct extop_list *
|
||||||
find_extop( struct extop_list *list, char *oid )
|
find_extop( struct extop_list *list, struct berval *oid )
|
||||||
{
|
{
|
||||||
struct extop_list *ext;
|
struct extop_list *ext;
|
||||||
|
|
||||||
for (ext = list; ext; ext = ext->next) {
|
for (ext = list; ext; ext = ext->next) {
|
||||||
if (strcmp(ext->oid, oid) == 0)
|
if (ber_bvcmp(&ext->oid, oid) == 0)
|
||||||
return(ext);
|
return(ext);
|
||||||
}
|
}
|
||||||
return(NULL);
|
return(NULL);
|
||||||
@ -336,4 +330,4 @@ whoami_extop (
|
|||||||
|
|
||||||
*rspdata = bv;
|
*rspdata = bv;
|
||||||
return LDAP_SUCCESS;
|
return LDAP_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -441,10 +441,6 @@ typedef int (SLAP_EXTOP_MAIN_FN) LDAP_P((
|
|||||||
typedef int (SLAP_EXTOP_GETOID_FN) LDAP_P((
|
typedef int (SLAP_EXTOP_GETOID_FN) LDAP_P((
|
||||||
int index, char *oid, int blen ));
|
int index, char *oid, int blen ));
|
||||||
|
|
||||||
LDAP_SLAPD_F (int) load_extension LDAP_P((
|
|
||||||
const void *module, const char *file_name));
|
|
||||||
LDAP_SLAPD_F (char *) get_supported_extension LDAP_P((int index));
|
|
||||||
|
|
||||||
LDAP_SLAPD_F (int) load_extop LDAP_P((
|
LDAP_SLAPD_F (int) load_extop LDAP_P((
|
||||||
const char *ext_oid,
|
const char *ext_oid,
|
||||||
SLAP_EXTOP_MAIN_FN *ext_main ));
|
SLAP_EXTOP_MAIN_FN *ext_main ));
|
||||||
@ -453,7 +449,7 @@ LDAP_SLAPD_F (int) extops_init LDAP_P(( void ));
|
|||||||
|
|
||||||
LDAP_SLAPD_F (int) extops_kill LDAP_P(( void ));
|
LDAP_SLAPD_F (int) extops_kill LDAP_P(( void ));
|
||||||
|
|
||||||
LDAP_SLAPD_F (char *) get_supported_extop LDAP_P((int index));
|
LDAP_SLAPD_F (struct berval *) get_supported_extop LDAP_P((int index));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* filter.c
|
* filter.c
|
||||||
|
@ -37,7 +37,7 @@ root_dse_info(
|
|||||||
{
|
{
|
||||||
char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
Entry *e;
|
Entry *e;
|
||||||
struct berval vals[2];
|
struct berval vals[2], *bv;
|
||||||
int i, j;
|
int i, j;
|
||||||
char ** supportedSASLMechanisms;
|
char ** supportedSASLMechanisms;
|
||||||
|
|
||||||
@ -107,8 +107,8 @@ root_dse_info(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* supportedExtension */
|
/* supportedExtension */
|
||||||
for ( i=0; (vals[0].bv_val = get_supported_extop(i)) != NULL; i++ ) {
|
for ( i=0; (bv = get_supported_extop(i)) != NULL; i++ ) {
|
||||||
vals[0].bv_len = strlen( vals[0].bv_val );
|
vals[0] = *bv;
|
||||||
attr_merge( e, ad_supportedExtension, vals );
|
attr_merge( e, ad_supportedExtension, vals );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user