X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=mcs%2Fclass%2FSystem.Web%2FSystem.Web.Security%2FUrlAuthorizationModule.cs;h=eb6b890700b6674116926ca2b99c492a42665e0f;hb=032a79f8a2ba11382cb8c027bd5c979acd0c4a6a;hp=2c7345d8afaee08194aba330d07729ef9f97f1ce;hpb=93703b4ef8bdcf1d6cf336e14f534454221730c5;p=mono.git diff --git a/mcs/class/System.Web/System.Web.Security/UrlAuthorizationModule.cs b/mcs/class/System.Web/System.Web.Security/UrlAuthorizationModule.cs index 2c7345d8afa..eb6b890700b 100644 --- a/mcs/class/System.Web/System.Web.Security/UrlAuthorizationModule.cs +++ b/mcs/class/System.Web/System.Web.Security/UrlAuthorizationModule.cs @@ -27,6 +27,7 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // +using System.Configuration; using System.Web.Configuration; using System.Security.Permissions; using System.Security.Principal; @@ -55,32 +56,42 @@ namespace System.Web.Security { HttpApplication app = (HttpApplication) sender; HttpContext context = app.Context; - if (context.SkipAuthorization) + if (context == null || context.SkipAuthorization) return; -#if NET_2_0 - AuthorizationSection config = (AuthorizationSection) WebConfigurationManager.GetSection ("system.web/authorization"); -#else - AuthorizationConfig config = (AuthorizationConfig) context.GetConfig ("system.web/authorization"); - if (config == null) - return; -#endif - if (!config.IsValidUser (context.User, context.Request.HttpMethod)) { + HttpRequest req = context.Request; + AuthorizationSection config = (AuthorizationSection) WebConfigurationManager.GetSection ("system.web/authorization", req.Path, context); + if (!config.IsValidUser (context.User, req.HttpMethod)) { HttpException e = new HttpException (401, "Unauthorized"); + HttpResponse response = context.Response; - context.Response.StatusCode = 401; - context.Response.Write (e.GetHtmlErrorMessage ()); + response.StatusCode = 401; + response.Write (e.GetHtmlErrorMessage ()); app.CompleteRequest (); } } -#if NET_2_0 - [MonoTODO] public static bool CheckUrlAccessForPrincipal (string virtualPath, IPrincipal user, string verb) { - throw new NotImplementedException (); + AuthorizationSection config = (AuthorizationSection) WebConfigurationManager.GetSection ("system.web/authorization", virtualPath); + + return config == null ? true : config.IsValidUser (user, verb); } + + internal static void ReportUrlAuthorizationFailure(HttpContext context, object webEventSource) { + // Deny access + context.Response.StatusCode = 401; + context.Response.Write (new HttpException(401, "Unauthorized").GetHtmlErrorMessage ()); + +#if false // Sys.Web.Mng not implemented on mono. + if (context.User != null && context.User.Identity.IsAuthenticated) { + // We don't raise failure audit event for anonymous user + WebBaseEvent.RaiseSystemEvent(webEventSource, WebEventCodes.AuditUrlAuthorizationFailure); + } #endif + context.ApplicationInstance.CompleteRequest(); + } + } }