]> git.sur5r.net Git - openldap/blobdiff - contrib/slapd-modules/acl/posixgroup.c
Merge remote-tracking branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_4
[openldap] / contrib / slapd-modules / acl / posixgroup.c
index f5c8f2f3f12107b0c94f3d96f8c17dbf5f9869dd..defa7cb340f34d3e6b06589af7093b6dba15f53f 100644 (file)
@@ -1,6 +1,8 @@
+/* posixgroup.c */
 /* $OpenLDAP$ */
-/*
- * Copyright 1998-2005 The OpenLDAP Foundation.
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2013 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -162,7 +164,7 @@ pg_dynacl_unparse(
 static int
 pg_dynacl_mask(
        void                    *priv,
-       struct slap_op          *op,
+       Operation               *op,
        Entry                   *target,
        AttributeDescription    *desc,
        struct berval           *val,
@@ -188,7 +190,7 @@ pg_dynacl_mask(
                rc = LDAP_SUCCESS;
 
        } else {
-               user_be = op->o_bd = select_backend( &op->o_ndn, 0, 0 );
+               user_be = op->o_bd = select_backend( &op->o_ndn, 0 );
                if ( op->o_bd == NULL ) {
                        op->o_bd = be;
                        return 0;
@@ -205,13 +207,17 @@ pg_dynacl_mask(
        if ( pg->pg_style == ACL_STYLE_EXPAND ) {
                char            buf[ 1024 ];
                struct berval   bv;
+               AclRegexMatches amatches = { 0 };
+
+               amatches.dn_count = nmatch;
+               AC_MEMCPY( amatches.dn_data, matches, sizeof( amatches.dn_data ) );
 
                bv.bv_len = sizeof( buf ) - 1;
                bv.bv_val = buf;
 
                if ( acl_string_expand( &bv, &pg->pg_pat,
-                               target->e_nname.bv_val,
-                               nmatch, matches ) )
+                               &target->e_nname,
+                               NULL, &amatches ) )
                {
                        goto cleanup;
                }
@@ -232,7 +238,7 @@ pg_dynacl_mask(
                rc = LDAP_SUCCESS;
 
        } else {
-               group_be = op->o_bd = select_backend( &group_ndn, 0, 0 );
+               group_be = op->o_bd = select_backend( &group_ndn, 0 );
                if ( op->o_bd == NULL ) {
                        goto cleanup;
                }
@@ -247,7 +253,7 @@ pg_dynacl_mask(
                Attribute       *a_uid,
                                *a_member;
 
-               a_uid = attr_find( user->e_attrs, pg_uidNumber);
+               a_uid = attr_find( user->e_attrs, pg_uidNumber );
                if ( !a_uid || !BER_BVISNULL( &a_uid->a_nvals[ 1 ] ) ) {
                        rc = LDAP_NO_SUCH_ATTRIBUTE;
 
@@ -283,7 +289,7 @@ cleanup:;
 
        if ( user != NULL && user != target ) {
                op->o_bd = user_be;
-               be_entry_release_r( op, group );
+               be_entry_release_r( op, user );
                op->o_bd = be;
        }