[Mono-bugs] [Bug 467221] asp.net security trimming / authorization not working

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed Sep 15 22:47:42 EDT 2010


https://bugzilla.novell.com/show_bug.cgi?id=467221

https://bugzilla.novell.com/show_bug.cgi?id=467221#c10


Mike Morano <mmorano at mikeandwan.us> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P5 - None                   |P3 - Medium
            Version|2.6.x                       |2.8.x
   Target Milestone|2.6.x                       |2.8.x

--- Comment #10 from Mike Morano <mmorano at mikeandwan.us> 2010-09-16 02:47:38 UTC ---
Hi Marek,

I was wondering if you had any luck with the test site, and reproducing the
issue.  I've started trying to do a little digging to see if I could find
anything, and have noticed a couple things.

If I update the url in the sitemap to be "~/admin" rather than
"~/admin/index.aspx" then security trimming does seem to take hold.  based on
this, and looking through the code, the general path of interest the code seems
to take is:

WebConfigurationManager.LookUpLocation
    Configuration.FindLocationConfiguration
        ConfigurationLocationCollection.Find

I could see the relative path from the sitemap go through here, for example:
admin/index.aspx.  Of course, in the web.config, the location is defined with a
path="admin" so the string compare of "admin/index.aspx" will not match
"admin".  However, if I update the code to try to fall back for paths, this
seems to start to work (though I would expect this is not the right place for
the fix, the code below illustrates my point - and does trim in my test env):

in ConfigurationLocationCollection:

internal ConfigurationLocation Find (string location)
{
    // find the most specific location possible, and when the full path does
not match, fall back
    // to searching for path membership
    while(!string.IsNullOrEmpty(location))
    {
        foreach (ConfigurationLocation loc in InnerList)
        {
            if (String.Compare (loc.Path, location,
StringComparison.OrdinalIgnoreCase) == 0)
            {
                return loc;
            }
        }

        int idx = location.LastIndexOf("/");

        if(idx <= 0)
        {
            location = null;
        }
        else
        {
            location = location.Remove(idx);    
        }
    }
    return null;
}

Hope this helps, sorry I have next to no time to help out, I'm in quite a
different spot than a couple years ago...


All the best,
Mike

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list