It was very simple to impliment. No changes to the database, only the VB code. I changed the .NET code in the AspNetMembershipProvider.vb module to match the below:
~line 777 modify CreateUser:
Public Overrides Function CreateUser(ByRef user As UserInfo) As UserCreateStatus
Dim createStatus As UserCreateStatus
Dim _config As Authentication.Configuration = Authentication.Configuration.GetConfig()
Dim ProviderTypeName As String = _config.ProviderTypeName
Dim isADSIProvider As Boolean = (ProviderTypeName.IndexOf("Authentication.ADSIProvider") >= 0)
Try
' check if username exists in database for any portal
Dim objVerifyUser As UserInfo = GetUserByUserName(Null.NullInteger, user.Username, False)
If Not objVerifyUser Is Nothing Then
If objVerifyUser.IsSuperUser Then
' the username belongs to an existing super user
createStatus = UserCreateStatus.UserAlreadyRegistered
Else
' the username exists so we should now verify the password
If isADSIProvider Or ValidateUser(objVerifyUser.PortalID, user.Username, user.Membership.Password) Then
' check if user exists for the portal specified
objVerifyUser = GetUserByUserName(user.PortalID, user.Username, False)
If Not objVerifyUser Is Nothing Then
.....
I then recompled the code and copied the newly created dll files, I believe there were 4, to the bin directory of my site. It corrected my issues. What the code does is check to see if the site is active directory authenticated. If it is, it avoids the username and password check, which is why sign up to child portals fails. As the AD module doesn't store the actual AD password, the password check always fails and thinks there are 2 different users trying to use the same username.
Also, make sure your site is configured for active directory authentication in the site settings, Forms authentication in the web.config, and copy your windowsignin.aspx file from the admin area to the root. Ensure this page is called, instead of the default.aspx page, and everything should work. Took me all of about 15 minutes.