[Mono-dev] [PATCH] ActiveDirectoryMembershipProvider

joel reed joelwreed at gmail.com
Wed Apr 4 10:27:24 EDT 2007

By the way, here's what the exception looks like without this change:

System.TypeInitializationException: An exception was thrown by the type 
initializer for System.Web.Security.Membership ---> 
System.ArgumentNullException: Argument cannot be null.
   at System.Configuration.Provider.ProviderCollection.Add 
(System.Configuration.Provider.ProviderBase provider) [0x00000]
   at System.Web.Security.MembershipProviderCollection.Add 
(System.Configuration.Provider.ProviderBase provider) [0x00000]
   at System.Web.Configuration.ProvidersHelper.InstantiateProviders 
(System.Configuration.ProviderSettingsCollection configProviders, 
System.Configuration.Provider.ProviderCollection providers, System.Type 
providerType) [0x00000]
   at System.Web.Security.Membership..cctor () [0x00000] --- End of 
inner exception stack trace ---


joel reed wrote:
> The patch below enhances the usefulness of 
> ActiveDirectoryMembershipProvider under mono, but may not be acceptable 
> for inclusion in svn. I'm posting this in case some one else runs into a 
> similar problem as I encountered.
> We have a Membership Provider that derives from 
> ActiveDirectoryMembershipProvider and then overrides Initialize and 
> ValidateUser. Our ValidateUser method looks in web.config and either 
> does an validation against AD or our legacy authentication scheme.
> This works on mono (if configured to not use AD), as long as the 
> Initialize method in ActiveDirectoryMembershipProvider calls 
> base.Initialize. Calling base.Initialize is important as this is how 
> ProviderBase sets the Name property which lets the Provider be put into 
> a ProviderCollection. Without the Name, Adding the provider to the 
> collection fails with a ArgumentNullException.
> Currently ActiveDirectoryMembershipProvider just does a "throw 
> NotImplemented".
> If instead we said:
> mcs/class/System.Web/System.Web.Security/ActiveDirectoryMembershipProvider.cs.orig 
> 2007-04-03 20:59:32.000000000 -0400
> +++ 
> mcs/class/System.Web/System.Web.Security/ActiveDirectoryMembershipProvider.cs 
> 2007-04-03 20:59:50.000000000 -0400
> @@ -118,7 +118,7 @@ namespace System.Web.Security {
>          [MonoTODO("Not implemented")]
>          public override void Initialize (string name, 
> NameValueCollection config)
>          {
> -            throw new NotImplementedException ();
> +            base.Initialize(name, config);
>          }
>          [MonoTODO("Not implemented")]
> The class would be slightly more useful in the above scenario. Probably 
> this circumvents some policy about MonoTODOs, but again just want to 
> post this info somewhere for others to google. It might even improve 
> things just by calling base.Initialize and then throwing, as you could 
> catch that exception and still be in business. Thoughts?
> jr

More information about the Mono-devel-list mailing list