]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/passwd.c
add function prototypes
[openldap] / servers / slapd / passwd.c
index 7f2a4cdfcc214daa4d51797d573bc60401274977..14e37f2970f830257690f2a3b4e0a519c57343f1 100644 (file)
@@ -1,7 +1,7 @@
 /* bind.c - ldbm backend bind and unbind routines */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
@@ -21,7 +21,7 @@
 
 int passwd_extop(
        Connection *conn, Operation *op,
-       const char *reqoid,
+       struct berval *reqoid,
        struct berval *reqdata,
        char **rspoid,
        struct berval **rspdata,
@@ -33,7 +33,7 @@ int passwd_extop(
        int rc;
 
        assert( reqoid != NULL );
-       assert( strcmp( LDAP_EXOP_MODIFY_PASSWD, reqoid ) == 0 );
+       assert( ber_bvcmp( &slap_EXOP_MODIFY_PASSWD, reqoid ) == 0 );
 
        if( op->o_dn.bv_len == 0 ) {
                *text = "only authenticated users may change passwords";
@@ -44,31 +44,39 @@ int passwd_extop(
        be = conn->c_authz_backend;
        ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
 
-       if( be == NULL ) {
-               *text = "operation not supported for SASL user";
-               return LDAP_UNWILLING_TO_PERFORM;
-       }
-
-       if( !be->be_extended ) {
+       if( be && !be->be_extended ) {
                *text = "operation not supported for current user";
                return LDAP_UNWILLING_TO_PERFORM;
        }
 
        {
-               struct berval passwd = BER_BVC( LDAP_EXOP_MODIFY_PASSWD );
-
-               rc = backend_check_restrictions( be, conn, op, &passwd, text );
+               rc = backend_check_restrictions( be, conn, op,
+                       (struct berval *)&slap_EXOP_MODIFY_PASSWD, text );
        }
 
        if( rc != LDAP_SUCCESS ) {
                return rc;
        }
 
-       if( be->be_update_ndn.bv_len ) {
+       if( be == NULL ) {
+#ifdef HAVE_CYRUS_SASL
+               rc = slap_sasl_setpass( conn, op,
+                       reqoid, reqdata,
+                       rspoid, rspdata, rspctrls,
+                       text );
+#else
+               *text = "no authz backend";
+               rc = LDAP_OTHER;
+#endif
+
+#ifndef SLAPD_MULTIMASTER
+       /* This does not apply to multi-master case */
+       } else if( be->be_update_ndn.bv_len ) {
                /* we SHOULD return a referral in this case */
                *refs = referral_rewrite( be->be_update_refs,
                        NULL, NULL, LDAP_SCOPE_DEFAULT );
                        rc = LDAP_REFERRAL;
+#endif /* !SLAPD_MULTIMASTER */
 
        } else {
                rc = be->be_extended(
@@ -90,7 +98,7 @@ int slap_passwd_parse( struct berval *reqdata,
        int rc = LDAP_SUCCESS;
        ber_tag_t tag;
        ber_len_t len;
-       char berbuf[256];
+       char berbuf[LBER_ELEMENT_SIZEOF];
        BerElement *ber = (BerElement *)berbuf;
 
        if( reqdata == NULL ) {
@@ -114,8 +122,8 @@ int slap_passwd_parse( struct berval *reqdata,
        if( tag == LDAP_TAG_EXOP_MODIFY_PASSWD_ID ) {
                if( id == NULL ) {
 #ifdef NEW_LOGGING
-                       LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                                  "slap_passwd_parse: ID not allowed.\n"));
+                       LDAP_LOG( OPERATION, ERR,
+                          "slap_passwd_parse: ID not allowed.\n", 0, 0, 0 );
 #else
                        Debug( LDAP_DEBUG_TRACE, "slap_passwd_parse: ID not allowed.\n",
                                0, 0, 0 );
@@ -130,8 +138,8 @@ int slap_passwd_parse( struct berval *reqdata,
 
                if( tag == LBER_ERROR ) {
 #ifdef NEW_LOGGING
-                       LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                                  "slap_passwd_parse:  ID parse failed.\n"));
+                       LDAP_LOG( OPERATION, ERR,
+                          "slap_passwd_parse:  ID parse failed.\n", 0, 0, 0 );
 #else
                        Debug( LDAP_DEBUG_TRACE, "slap_passwd_parse: ID parse failed.\n",
                                0, 0, 0 );
@@ -146,8 +154,8 @@ int slap_passwd_parse( struct berval *reqdata,
        if( tag == LDAP_TAG_EXOP_MODIFY_PASSWD_OLD ) {
                if( oldpass == NULL ) {
 #ifdef NEW_LOGGING
-                       LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                                  "slap_passwd_parse: OLD not allowed.\n" ));
+                       LDAP_LOG( OPERATION, ERR,
+                          "slap_passwd_parse: OLD not allowed.\n" , 0, 0, 0 );
 #else
                        Debug( LDAP_DEBUG_TRACE, "slap_passwd_parse: OLD not allowed.\n",
                                0, 0, 0 );
@@ -162,8 +170,8 @@ int slap_passwd_parse( struct berval *reqdata,
 
                if( tag == LBER_ERROR ) {
 #ifdef NEW_LOGGING
-                       LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                                  "slap_passwd_parse:  ID parse failed.\n" ));
+                       LDAP_LOG( OPERATION, ERR,
+                          "slap_passwd_parse:  ID parse failed.\n" , 0, 0, 0 );
 #else
                        Debug( LDAP_DEBUG_TRACE, "slap_passwd_parse: ID parse failed.\n",
                                0, 0, 0 );
@@ -178,8 +186,8 @@ int slap_passwd_parse( struct berval *reqdata,
        if( tag == LDAP_TAG_EXOP_MODIFY_PASSWD_NEW ) {
                if( newpass == NULL ) {
 #ifdef NEW_LOGGING
-                       LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                                  "slap_passwd_parse:  NEW not allowed.\n" ));
+                       LDAP_LOG( OPERATION, ERR,
+                          "slap_passwd_parse:  NEW not allowed.\n", 0, 0, 0 );
 #else
                        Debug( LDAP_DEBUG_TRACE, "slap_passwd_parse: NEW not allowed.\n",
                                0, 0, 0 );
@@ -194,8 +202,8 @@ int slap_passwd_parse( struct berval *reqdata,
 
                if( tag == LBER_ERROR ) {
 #ifdef NEW_LOGGING
-                       LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                                  "slap_passwd_parse:  OLD parse failed.\n"));
+                       LDAP_LOG( OPERATION, ERR,
+                          "slap_passwd_parse:  OLD parse failed.\n", 0, 0, 0 );
 #else
                        Debug( LDAP_DEBUG_TRACE, "slap_passwd_parse: OLD parse failed.\n",
                                0, 0, 0 );
@@ -210,8 +218,8 @@ int slap_passwd_parse( struct berval *reqdata,
        if( len != 0 ) {
 decoding_error:
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                          "slap_passwd_parse: decoding error, len=%ld\n", (long)len ));
+               LDAP_LOG( OPERATION, ERR, 
+                       "slap_passwd_parse: decoding error, len=%ld\n", (long)len, 0, 0 );
 #else
                Debug( LDAP_DEBUG_TRACE,
                        "slap_passwd_parse: decoding error, len=%ld\n",
@@ -231,15 +239,15 @@ struct berval * slap_passwd_return(
 {
        int rc;
        struct berval *bv = NULL;
-       char berbuf[256];
+       char berbuf[LBER_ELEMENT_SIZEOF];
        /* opaque structure, size unknown but smaller than berbuf */
        BerElement *ber = (BerElement *)berbuf;
 
        assert( cred != NULL );
 
 #ifdef NEW_LOGGING
-       LDAP_LOG(( "operation", LDAP_LEVEL_ENTRY,
-                  "slap_passwd_return: %ld\n",(long)cred->bv_len ));
+       LDAP_LOG( OPERATION, ENTRY, 
+               "slap_passwd_return: %ld\n",(long)cred->bv_len, 0, 0 );
 #else
        Debug( LDAP_DEBUG_TRACE, "slap_passwd_return: %ld\n",
                (long) cred->bv_len, 0, 0 );
@@ -297,8 +305,7 @@ slap_passwd_generate( struct berval *pass )
 {
        struct berval *tmp;
 #ifdef NEW_LOGGING
-       LDAP_LOG(( "operation", LDAP_LEVEL_ENTRY,
-                  "slap_passwd_generate: begin\n" ));
+       LDAP_LOG( OPERATION, ENTRY, "slap_passwd_generate: begin\n", 0, 0, 0 );
 #else
        Debug( LDAP_DEBUG_TRACE, "slap_passwd_generate\n", 0, 0, 0 );
 #endif