Hi all,
I am trying to programmatically add onetoone client certificate authentication to the applicationhost.config file.
After referring to these two documents(thread1, thread2), I am sure that it is possible to implement it with different languages. And for some kind of reason I have to develop it with C++. While translating the code sample in thread1,
I found that there is not any kind of "add" or "create new" method for IAppHostPropertyCollection class, which make it impossible for me to add property to the new element I create.
Below is the code snippet FYI.
IAppHostWritableAdminManager * pWMgr = NULL; IAppHostConfigManager * pCfgMgr = NULL; IAppHostConfigFile * pCfgFile = NULL; IAppHostSectionGroup * pRtSctnGrp = NULL; IAppHostSectionGroup * pSctnGrp = NULL; IAppHostSectionDefinitionCollection * pSctnDefCol = NULL; IAppHostSectionDefinition * pSctnDef = NULL; IAppHostElement *pAuth = NULL; IAppHostElementCollection *pAuthColection = NULL; IAppHostChildElementCollection *pChildColection = NULL; IAppHostElement *pOneToOne = NULL; IAppHostElementCollection *pOneToOneCollection = NULL; IAppHostElement *pNewElement = NULL; IAppHostPropertyCollection *propertyCollection = NULL; IAppHostProperty *pProperty = NULL; BSTR bstrConfigCommitPath = SysAllocString(L"MACHINE/WEBROOT/APPHOST/Default Web Site"); BSTR bstrSctnGrpName = SysAllocString(L"mySectionGroup"); BSTR bstrSctnName = SysAllocString(L"myNewSection"); BSTR bstrDeny = SysAllocString(L"Deny"); BSTR bstrAppHostOnly = SysAllocString(L"appHostOnly"); BSTR bstrAuthName = SysAllocString(L"system.webServer/security/authentication/iisClientCertificateMappingAuthentication"); BSTR bstrOnetoOne = SysAllocString(L"oneToOneMappings"); BSTR bstrAuthPath = SysAllocString(L"Default Web Site"); BSTR bstrAdd = SysAllocString(L"add"); BSTR bstrUsername = SysAllocString(L"name"); BSTR bstrUsernameVal = SysAllocString(L"jinqiu.tao@emacle.com"); // Initialize hr = CoInitializeEx( NULL, COINIT_MULTITHREADED ); // Create hr = CoCreateInstance( __uuidof( AppHostWritableAdminManager ), NULL, CLSCTX_INPROC_SERVER, __uuidof( IAppHostWritableAdminManager ), (void**) &pWMgr ); pWMgr -> put_CommitPath ( bstrConfigCommitPath ); // Get an IAppHostConfigManager hr = pWMgr -> get_ConfigManager ( &pCfgMgr ); // Get an IAppHostConfigFile hr = pCfgMgr -> GetConfigFile ( bstrConfigCommitPath, &pCfgFile ); //get section hr = pCfgFile->GetAdminSection(bstrAuthName, bstrConfigCommitPath, &pAuth); BSTR bstrName; hr = pAuth->get_Name(&bstrName); _tprintf(_T("Name : %s\n"), bstrName); hr = pAuth->get_ChildElements(&pChildColection); VARIANT vtPropertyName; vtPropertyName.vt = VT_BSTR; vtPropertyName.bstrVal = bstrOnetoOne; hr = pChildColection->get_Item(vtPropertyName, &pOneToOne); hr = pOneToOne->get_Name(&bstrName); _tprintf(_T("Name : %s\n"), bstrName); hr = pOneToOne->get_Collection(&pOneToOneCollection); hr = pOneToOneCollection->CreateNewElement(bstrAdd, &pNewElement); hr = pNewElement->get_Properties(&propertyCollection); vtPropertyName.vt = VT_BSTR; vtPropertyName.bstrVal = bstrUsername; hr = propertyCollection->get_Item(vtPropertyName, &pProperty);
As you see, I can get the propertyCollection object, but not able to add property to the new element.
What I want to do is just add a record to the onetoonemappings part.
<location path="Default Web Site"><system.webServer><security><access sslFlags="None" /><authentication><anonymousAuthentication enabled="true" /><iisClientCertificateMappingAuthentication enabled="true" oneToOneCertificateMappingsEnabled="true"><oneToOneMappings><add userName="yonggui.yu@emacle.com" password="[enc:AesProvider:4QEVwn3c530VH5sdwCl+Sm8G2eJesNEs4SaL6U5LrXg=:enc]" certificate="MIIFOjCCBCKgAwIBAgIKOAVSKwAAAAAAbDANBgkqhkiG9w0BAQUFADBLMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJdG9uZ2J1cGFuMRkwFwYDVQQDExB0b25nYnVwYW4tV2luLUNBMB4XDTEzMTIwMzA3MjUyMVoXDTE0MTIwMzA3MjUyMVowgYkxEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgl0b25nYnVwYW4xETAPBgNVBAsTCFJtc1VzZXJzMR4wHAYDVQQDDBV5b25nZ3VpLnl1QGVtYWNsZS5jb20xJDAiBgkqhkiG9w0BCQEWFXlvbmdndWkueXVAZW1hY2xlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKVwfUGNVXrLQNcGaCBCUoU3pnygHRAd48eZdy9JCjxohGLBkuEANnMf8ysEsgeq1nkXlTEg76C5lwMtjDJmn2+W63+RVgy4ufc47xLdZ8q0gAjxnm2+we8SPny7T7cVC2fwTFf+vgjFOeP8MnfPHZsm2g+d0YAWwcAVvbJstulOlKu9rp2OZ6wd/WSuYalT1kAHeuvqHGAvj+tfg6gD89ZUteM0tH8nxBJcQWiXKfuTvmMs+slDw/BJSKBKP4SghMTaNJIkDBpf1wX99W9vA1scGaE3DxcyvSOi42ex0HvEBpo4zZ5lYT7ZDp6UP63UVlKi2QeECpk1EiqtKmc4xY0CAwEAAaOCAd8wggHbMBcGCSsGAQQBgjcUAgQKHggAVQBzAGUAcjApBgNVHSUEIjAgBgorBgEEAYI3CgMEBggrBgEFBQcDBAYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMEQGCSqGSIb3DQEJDwQ3MDUwDgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDAHBgUrDgMCBzAKBggqhkiG9w0DBzAdBgNVHQ4EFgQUahW7u+iCz/XhiZwkXvyHANHjey4wHwYDVR0jBBgwFoAUxePO9CAZWFaChtoGA8TGEOSDPscwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC50b25nYnVwYW4uY29tL0NlcnRFbnJvbGwvdG9uZ2J1cGFuLVdpbi1DQS5jcmwwawYIKwYBBQUHAQEEXzBdMFsGCCsGAQUFBzAChk9odHRwOi8vY2EudG9uZ2J1cGFuLmNvbS9DZXJ0RW5yb2xsL1dJTi1TOC1EQy50b25nYnVwYW4uY29tX3RvbmdidXBhbi1XaW4tQ0EuY3J0MEcGA1UdEQRAMD6gJQYKKwYBBAGCNxQCA6AXDBV5b25nZ3VpLnl1QGVtYWNsZS5jb22BFXlvbmdndWkueXVAZW1hY2xlLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAiuIeE8P44a4ZITxu/U3LU9VvypZ6QPwtKTxID2BMHAgwysdD3cPxNInEZYD4dw0IoVfB1qidPX3KCDuf1UOh9S7FPAOJXBwne81ce9tChN2ju9ooiD/uwPaqxO+XTogbX1jpC9ciILU65gWOl7oFKK46xXfvnxtJX4MLxO3aVDKB40u5MjcHjY4JzX+RoiF3aa8WQCTN+keLePmQLLgnwl+B2noP7ZvWN9eSQJADCPKpMTlsPGlb+ZaS+K9ovJ/VeXn5ox3Rz/A7bRXfety2etkXOyVaugSx+B3s5jt5BJIIbiNkfbulFZSpmTj45w2f0wVOU5MOEHPnfDFrv43xhQ==" /><add userName="yuyonggui@tbp.com" password="[enc:AesProvider:iBqmPwvbefiuiUZ03AyPD/0AxzD0HIb4SlJXKQGr9Ug=:enc]" certificate="MIIEjzCCA3egAwIBAgIKGgSFpwAAAAAAMDANBgkqhkiG9w0BAQUFADBGMRMwEQYKCZImiZPyLGQBGRYDY29tMRMwEQYKCZImiZPyLGQBGRYDdGJwMRowGAYDVQQDExF0YnAtV0lOLVRCUC1EQy1DQTAeFw0xMzEyMDkwMzE1MzZaFw0xNDEyMDkwMzE1MzZaMHAxEzARBgoJkiaJk/IsZAEZFgNjb20xEzARBgoJkiaJk/IsZAEZFgN0YnAxDjAMBgNVBAMTBVVzZXJzMRIwEAYDVQQDEwl5dXlvbmdndWkxIDAeBgkqhkiG9w0BCQEWEXl1eW9uZ2d1aUB0YnAuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrtbjcJ6/nZ2mlYR3ZkZgIblnQZAtDYDY45gk0MnmiEKPW8ETajKZt6NyAIYKqLrFAaQnRlbRtIauKH7QywJXAdtTO6uHMgBxRhyaSi3+L9BiFl1FzJPDK8pkQR6HefjDwy4LrUJdzx9ZTMV6/i1ffqv2PE56pkIS0r6Z4P4lwfwIDAQABo4IB1zCCAdMwFwYJKwYBBAGCNxQCBAoeCABVAHMAZQByMB0GA1UdDgQWBBRbc2RcQANJKTZairbVp1A+VR6YhjAOBgNVHQ8BAf8EBAMCBaAwHwYDVR0jBBgwFoAUVs87PUbEQn7y9BCWcVgGK0xVry8wSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL3dpbi10YnAtZGMudGJwLmNvbS9DZXJ0RW5yb2xsL3RicC1XSU4tVEJQLURDLUNBLmNybDBpBggrBgEFBQcBAQRdMFswWQYIKwYBBQUHMAKGTWh0dHA6Ly93aW4tdGJwLWRjLnRicC5jb20vQ2VydEVucm9sbC9XSU4tVEJQLURDLnRicC5jb21fdGJwLVdJTi1UQlAtREMtQ0EuY3J0MCkGA1UdJQQiMCAGCisGAQQBgjcKAwQGCCsGAQUFBwMEBggrBgEFBQcDAjA/BgNVHREEODA2oCEGCisGAQQBgjcUAgOgEwwReXV5b25nZ3VpQHRicC5jb22BEXl1eW9uZ2d1aUB0YnAuY29tMEQGCSqGSIb3DQEJDwQ3MDUwDgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDAHBgUrDgMCBzAKBggqhkiG9w0DBzANBgkqhkiG9w0BAQUFAAOCAQEAgb6YJVq5FbX0JO9f0IAmBmt195Zub3aU14LSTE4Z33Wt31NGcPOUOl+42eS5oqlkPO2TiRvs438cKVBAqbJo4Ujhn9PxD/Lpqe7r/qttvhJi3FvOTpGJJ1im5of/6mDpqAn/XB8OoiSQUHU1de3+eWFgG4bTDNz9ReExXzoJvpIiCXvpt7SnDBEhnfjxkwjQSlBjXDvisYFuI+Z8EwVg0uuE3NfqE+oJgGvWNJ+yFct2w1g7qJE7qY1Q9EcUnfNUZ9CvjJkXO1xg6qfOMGTeYC00UFcOwUWcD1B1QEfxf8NIrceLIyr37rxOHiDen4eEEVG+13JnZQ/2Y3EqhgOrsw==" /><add userName="yonggui.yu@emacle.com" password="[enc:AesProvider:DogNZMKGrLa9ih2IO9PiMNUz9Ucggu9icKD7o8+U8dQ=:enc]" certificate="MIIFZzCCBE+gAwIBAgIHGAOD3e2QQDANBgkqhkiG9w0BAQUFADBcMQswCQYDVQQGEwJDTjEqMCgGA1UEChMhV29TaWduIGVDb21tZXJjZSBTZXJ2aWNlcyBMaW1pdGVkMSEwHwYDVQQDExhXb1NpZ24gQ2xhc3MgMSBDbGllbnQgQ0EwHhcNMTMxMjA4MTMzODU1WhcNMTQxMjEwMDA1ODIyWjAmMSQwIgYJKoZIhvcNAQkBFhV5b25nZ3VpLnl1QGVtYWNsZS5jb20wggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCeUODVRSPEB3ekz20RScWkVQAlxwrsPL0NabAr79GdhieUREeWmILpyvJPanB+0vH7mPZeS+iMrFF/ZTyFjbXeOmJMo0XdDVEyH0oElGQcXm9hT/tWqpLbbWsf/VSWmjYR4bU5uXgrViYjVqeHFFY30vl0fNoTdm7vIuXaaCZpVWikjOKSKfaXv1KNyzla9To4Z3DByxnHK2UzU1hhiVafzkIflBSmUkPFAH370CgRkRnuI3skrEuHp2hS4L0QD9TjGDIXvlrmjtZvYIPR0nbrJNzgoZ8EfIhezWH9eIsLJrROzERrhmDj38JCicYW22h94O1/93MgtdzcPHKClffhAgEDo4ICZDCCAmAwDwYDVR0TAQH/BAUwAwIBADALBgNVHQ8EBAMCBLAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMB0GA1UdDgQWBBSOYGNDRLBARR3oijxZfhfHMPZJ0TAfBgNVHSMEGDAWgBQNPyu5J1DkobglzU7CMZG4dy/QADAgBgNVHREEGTAXgRV5b25nZ3VpLnl1QGVtYWNsZS5jb20wgegGA1UdIASB4DCB3TCB2gYNKwYBBAGCm1EBAQEBAjCByDApBggrBgEFBQcCARYdaHR0cDovL3d3dy53b3NpZ24uY29tL3BvbGljeS8wgZoGCCsGAQUFBwICMIGNMCgWIVdvU2lnbiBlQ29tbWVyY2UgU2VydmljZXMgTGltaXRlZDADAgEBGmFMaW1pdGVkIExpYWJpbGl0eSwgc2VlIHRoZSBXb1NpZ24gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUG9saWN5IGF0IGh0dHA6Ly93d3cud29zaWduLmNvbS9wb2xpY3kvMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmxzLndvc2lnbi5jb20vY2xpZW50LTEuY3JsMHsGCCsGAQUFBwEBBG8wbTAzBggrBgEFBQcwAYYnaHR0cDovL29jc3Aud29zaWduLmNvbS9jbGFzczEvY2xpZW50L2NhMDYGCCsGAQUFBzAChipodHRwOi8vYWlhLndvc2lnbi5jb20vY2xhc3MxLmNsaWVudC5jYS5jZXIwIQYDVR0SBBowGIYWaHR0cDovL3d3dy53b3NpZ24uY29tLzANBgkqhkiG9w0BAQUFAAOCAQEAb9981A/6ll+E3s5v1uyUwmlwv0ez0b5nhqzsSeU66f1AIAWhlVawtqJ0I75WQXFUEAV6dIve5JDr2XxQ8udY+KmNHKmdbqTbOGzG/NW+dGxKGDn2IcYhWVK/7S6TfkaRBzR7t68nbd0x9ZFCsyocO03tx5/gj0fHI6bC7rgStgbso3kCrJAMbbP8N9nxb0v6Yl52cCKrlQNogfnwcoYJlyvrReFBenxYeXLt/drivHVFGMvYe058D6xIBDs1qskyroIPM/f3HXGcoCJogm7yO5YzSJu4whHvtux2zMgNlp8pWmxcsIoVnnaZolFv8/V9GGXITIatqEGcxK91EBybKA==" /></oneToOneMappings></iisClientCertificateMappingAuthentication></authentication></security></system.webServer></location>
I hope that I have made it clear enough. If you guys need any kind of additional information, please do not hesitate to inform me.
Looking forward for your help.
Best Regards,
Jordan