func addControlDescriptions(packet *ber.Packet) { packet.Description = "Controls" for _, child := range packet.Children { child.Description = "Control" child.Children[0].Description = "Control Type (" + ControlTypeMap[child.Children[0].Value.(string)] + ")" value := child.Children[1] if len(child.Children) == 3 { child.Children[1].Description = "Criticality" value = child.Children[2] } value.Description = "Control Value" switch child.Children[0].Value.(string) { case ControlTypePaging: value.Description += " (Paging)" if value.Value != nil { valueChildren := ber.DecodePacket(value.Data.Bytes()) value.Data.Truncate(0) value.Value = nil valueChildren.Children[1].Value = valueChildren.Children[1].Data.Bytes() value.AppendChild(valueChildren) } value.Children[0].Description = "Real Search Control Value" value.Children[0].Children[0].Description = "Paging Size" value.Children[0].Children[1].Description = "Cookie" } } }
func DebugBinaryFile(fileName string) error { file, err := ioutil.ReadFile(fileName) if err != nil { return NewError(ErrorDebugging, err) } ber.PrintBytes(file, "") packet := ber.DecodePacket(file) addLDAPDescriptions(packet) ber.PrintPacket(packet) return nil }