public void Run(LdapEntry lhs, LdapEntry rhs) { Log.Debug ("Starting LdapEntryAnalyzer"); if (lhs.CompareTo (rhs) != 0) { Log.Debug ("Entry DNs don't match\nlhs: {0}\nrhs: {1}", lhs.DN, rhs.DN); return; } LdapAttributeSet las = lhs.getAttributeSet (); foreach (LdapAttribute la in las) { LdapAttribute rla = rhs.getAttribute (la.Name); if (rla == null){ Log.Debug ("Delete attribute {0} from {1}", la.Name, lhs.DN); LdapAttribute a = new LdapAttribute (la.Name); LdapModification m = new LdapModification (LdapModification.DELETE, a); mods.Add (m); } else { if (rla.StringValueArray.Length > 1) { Log.Debug ("Replacing attribute {0} with multiple values", la.Name); LdapAttribute a = new LdapAttribute (la.Name, rla.StringValueArray); LdapModification m = new LdapModification (LdapModification.REPLACE, a); mods.Add (m); } else if (la.StringValue != rla.StringValue) { LdapAttribute newattr; LdapModification lm; if (rla.StringValue == "" || rla.StringValue == null) { Log.Debug ("Delete attribute {0} from {1}", la.Name, lhs.DN); newattr = new LdapAttribute (la.Name); lm = new LdapModification (LdapModification.DELETE, newattr); } else { Log.Debug ("Replace attribute {0} value from {1} to {2} ", la.Name, la.StringValue, rla.StringValue); newattr = new LdapAttribute (la.Name, rla.StringValue); lm = new LdapModification (LdapModification.REPLACE, newattr); } mods.Add (lm); } } } LdapAttributeSet rlas = rhs.getAttributeSet (); foreach (LdapAttribute la in rlas) { LdapAttribute lla = lhs.getAttribute (la.Name); if (lla == null && la.StringValue != string.Empty) { Log.Debug ("Add attribute {0} value [{1}] to {2}", la.Name, la.StringValue, lhs.DN); LdapAttribute a = new LdapAttribute (la.Name, la.StringValue); LdapModification m = new LdapModification (LdapModification.ADD, a); mods.Add (m); } } Log.Debug ("End LdapEntryAnalyzer"); }