Figure 3 – Connecting to CSS using ADAMADSIEdit.
After connecting to ADAM, browse to the following location:
Figure 4 – Looking for the HTTP-Compression-Configuration object.
Notice that under the HTTP-Compression-Configuration object we have another object called WebListenerUsed and in this case it has a GUID for a WebListener. This GUID is not the real name of the WebListener, this is actually the CN for this object. To see the name of the real web listener in which this object is referring to, you need to right click on this object and choose properties. Look for the attribute called msFPCName as shown below:
Figure 5 – Checking the msFPCName for this attribute.
If this is a valid listener, we should see this GUID under CN=RuleElements,CN=WebListeners as shown below:
Figure 6 – Valid Web Listeners.
Notice that in this case I do not have this value in there, which means that this is the reason why we are receiving this error. In other words: there is an object present under HTTP-Compression-Configuration object that has an attribute that points to an invalid object.
3. Now What?
Since this is an invalid object we need to remove it from there. However, before do that it is important to emphasize that before any intervention directly on ADAM or Registry make sure that you have a backup of your system. In this case since we cannot backup the whole array at least we should backup the Firewall Policy (which works fine since doesn’t look for that object). Also, before delete this object, you can dump it using LDIFDE, so you can have a backup of the attributes for this object (in case you need). To export this object uses the command below:
C:\>ldifde -t 2171 -f backup.ldf -s isacontn1 -d "CN={58231C84-C3B7-4BF7-9A18-1943A657D410},CN=WebListenerUsed,CN=HTTP-Compression-Configuration,CN=WebProxy,CN=ArrayPolicy,CN={878CC789-AF34-48A1-849B-89A806E2CB88},CN=Arrays,CN=Array-Root,CN=FPC2"
Connecting to "isacontn1"
Logging in as current user using SSPI
Exporting directory to file backup.ldf
Searching for entries...
Writing out entries.
1 entries exported
The command has completed successfully
Notes:
· -t allows you to specify which port you are going to use to connect to ADAM. In this case port 2171,
· -d allows you to specify the Distinguished Name (DN) of the object that you want to dump. In this case you need to open the properties of the object and search for the DN.
The output (backup.ldf) of this command for this case is:
dn: CN={58231C84-C3B7-4BF7-9A18-1943A657D410},CN=WebListenerUsed,CN=HTTP-Compression-Configuration,CN=WebProxy,CN=ArrayPolicy,CN={878CC789-AF34-48A1-849B-89A806E2CB88},CN=Arrays,CN=Array-Root,CN=FPC2
changetype: add
objectClass: top
objectClass: msFPCRef
cn: {58231C84-C3B7-4BF7-9A18-1943A657D410}
distinguishedName:
CN={58231C84-C3B7-4BF7-9A18-1943A657D410},CN=WebListenerUsed,CN=HTTP-Compressi
on-Configuration,CN=WebProxy,CN=ArrayPolicy,CN={878CC789-AF34-48A1-849B-89A806
E2CB88},CN=Arrays,CN=Array-Root,CN=FPC2
instanceType: 4
whenCreated: 20090917112759.0Z
whenChanged: 20090917112759.0Z
uSNCreated: 321498
uSNChanged: 321498
name: {58231C84-C3B7-4BF7-9A18-1943A657D410}
objectGUID:: CkNXAblXDkWSUJaZY5Bexw==
objectCategory:
CN=msFPC-Ref,CN=Schema,CN=Configuration,CN={F2298771-D6AA-42E1-B32D-4C0DCFD325
4D}
msFPCRefClass: msFPCWebListener
msFPCName: {DC6A3B0D-9E21-454D-BF68-00E9A79C4E3E}
Now that we have a backup of the Firewall Rules and a dump of the object that we are deleting, let’s get rid of this invalid object. For this particular scenario the object is the one below:
Figure 7 – Object that needs to be eliminated in this case.
After highlight this value, press delete or right click on the object and choose delete.
Note: For ISA Server 2006 Standard Edition, you have to delete this value from the registry.
4. Validating the Procedure
After remove the bad entry you should make sure that the array configuration is in sync, you can force a change, such as disabling a rule or changing the name of the rule. This is just to force a new synchronization. Now after doing that you should be able to open the HTTP Compression properties, as shown below:
Figure 8 – The bogus web listener was listed in there before, now is clear.
5. Conclusion
Fixing corrupted objects on ADAM is not always straight forward like this, sometimes you can’t really determine easily which object is corrupted because there are many objects to evaluate, compare values, etc. In scenarios where you can’t determine, don’t try to “guess” which object is corrupt and delete it without 100%, better to get an ISA Data Packager in repro mode using the Administration template and open a case with MS CSS for further analyzes.