Changeset 10138

Show
Ignore:
Timestamp:
10/02/06 15:47:55 (2 years ago)
Author:
piotras
Message:

Process legacy ACL checks for parameter method only if an object is registered as MgdSchema? one.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/branch-1-7/src/apis/php4/parameter.c

    r9378 r10138  
    3535        zval **zv_table, **zv_id; 
    3636        midgard_res *res; 
     37        zend_class_entry *ce; 
    3738        CHECK_MGD; 
    3839 
     
    131132                if (res) { mgd_release(res); } 
    132133 
    133                 if (!isglobalowner( 
     134                /* Switch to anonymous mode for MgdSchema objects */ 
     135                MGD_PHP_PCLASS_NAME; 
     136                if (g_hash_table_lookup(mgd_handle()->schema->types, ce->name) == NULL) { 
     137                        if (!isglobalowner( 
    134138                                mgd_lookup_table_id((*zv_table)->value.str.val), 
    135                                 (*zv_id)->value.lval)) { 
    136                         RETURN_FALSE_BECAUSE(MGD_ERR_ACCESS_DENIED); 
     139                                                (*zv_id)->value.lval)) { 
     140                                                        RETURN_FALSE_BECAUSE(MGD_ERR_ACCESS_DENIED); 
     141                                } 
    137142                } 
    138143 
     
    172177 
    173178                if (exists) { 
    174                         if (!isglobalowner( 
    175                                         mgd_lookup_table_id((*zv_table)->value.str.val), 
    176                                         (*zv_id)->value.lval)) { 
    177                                 if (res) mgd_release(res); 
    178                                 RETURN_FALSE_BECAUSE(MGD_ERR_ACCESS_DENIED); 
     179                        /* Switch to anonymous mode for MgdSchema objects */ 
     180                        MGD_PHP_PCLASS_NAME; 
     181                        if (g_hash_table_lookup(mgd_handle()->schema->types, ce->name) == NULL) { 
     182                                if (!isglobalowner( 
     183                                                        mgd_lookup_table_id((*zv_table)->value.str.val), 
     184                                                        (*zv_id)->value.lval)) { 
     185                                        if (res) mgd_release(res); 
     186                                        RETURN_FALSE_BECAUSE(MGD_ERR_ACCESS_DENIED); 
     187                                } 
    179188                        } 
    180189 
     
    188197                } 
    189198                else { 
    190       if (!isglobalowner( 
    191             mgd_lookup_table_id((*zv_table)->value.str.val), 
    192             (*zv_id)->value.lval)) { 
    193         RETURN_FALSE_BECAUSE(MGD_ERR_ACCESS_DENIED); 
    194       } 
    195  
    196       _MGD_SITEGROUP_FORCE(); 
    197       php_midgard_create(return_value, NULL, "record_extension", 
    198                                            "tablename,oid,domain,name,value,lang", 
    199                                            "$q,$d,$q,$q,$q,$d", 
    200                                            (*zv_table)->value.str.val, 
    201                                            (*zv_id)->value.lval, 
    202                                            (*zv_domain)->value.str.val, 
    203                                            (*zv_name)->value.str.val, 
    204                                            (*zv_value)->value.str.val 
    205                                            ,lang 
    206                                            ); 
    207         PHP_CREATE_REPLIGARD("record_extension", 
    208                         return_value->value.lval); 
    209         _MGD_SITEGROUP_FORCE_REVERT();   
     199                            /* Switch to anonymous mode for MgdSchema objects */ 
     200                            MGD_PHP_PCLASS_NAME; 
     201                            if (g_hash_table_lookup(mgd_handle()->schema->types, ce->name) == NULL) { 
     202                                    if (!isglobalowner( 
     203                                                            mgd_lookup_table_id((*zv_table)->value.str.val), 
     204                                                            (*zv_id)->value.lval)) { 
     205                                            RETURN_FALSE_BECAUSE(MGD_ERR_ACCESS_DENIED); 
     206                                    } 
     207                            } 
     208                             
     209                            _MGD_SITEGROUP_FORCE(); 
     210                            php_midgard_create(return_value, NULL, "record_extension", 
     211                                            "tablename,oid,domain,name,value,lang", 
     212                                            "$q,$d,$q,$q,$q,$d", 
     213                                            (*zv_table)->value.str.val, 
     214                                            (*zv_id)->value.lval, 
     215                                            (*zv_domain)->value.str.val, 
     216                                            (*zv_name)->value.str.val, 
     217                                            (*zv_value)->value.str.val 
     218                                            ,lang); 
     219                            PHP_CREATE_REPLIGARD("record_extension", 
     220                                            return_value->value.lval); 
     221                            _MGD_SITEGROUP_FORCE_REVERT();       
    210222                } 
    211223        }