first commit
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					deldify*
 | 
				
			||||||
							
								
								
									
										86
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,86 @@
 | 
				
			|||||||
 | 
					// de-LDIF'y LDAP query result
 | 
				
			||||||
 | 
					// join breaked lines, and decode base64
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Copyright (c) 2023 yo000 <johan@nosd.in>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"flag"
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"regexp"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
						"encoding/base64"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						gVersion = "0.0.1"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() {
 | 
				
			||||||
 | 
						var input string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						flag.Parse()
 | 
				
			||||||
 | 
						if len(flag.Args()) < 1 {
 | 
				
			||||||
 | 
							fmt.Printf("Usage: deldify filename\n")
 | 
				
			||||||
 | 
							os.Exit(1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						input = flag.Args()[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// open file
 | 
				
			||||||
 | 
						f, err := os.Open(input)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Errorf("%v\n", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// remember to close the file at the end of the program
 | 
				
			||||||
 | 
						defer f.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// read the file line by line using scanner
 | 
				
			||||||
 | 
						scanner := bufio.NewScanner(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Make 2 pass:
 | 
				
			||||||
 | 
						//  First concatenate space starting lines, put result into ram
 | 
				
			||||||
 | 
						//  Second to decode base64 lines
 | 
				
			||||||
 | 
						// Then print result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 1st pass
 | 
				
			||||||
 | 
						var res1 []string
 | 
				
			||||||
 | 
						var cl string
 | 
				
			||||||
 | 
						for scanner.Scan() {
 | 
				
			||||||
 | 
							cl = scanner.Text()
 | 
				
			||||||
 | 
							if strings.HasPrefix(cl, " ") {
 | 
				
			||||||
 | 
								res1[len(res1)-1] = fmt.Sprintf("%s%s", res1[len(res1)-1], cl[1:])
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								res1 = append(res1, fmt.Sprintf("%s", cl))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 2nd pass
 | 
				
			||||||
 | 
						var res2 []string
 | 
				
			||||||
 | 
						re := regexp.MustCompile("(\\w+)::\\s(.*)")
 | 
				
			||||||
 | 
						for _, l := range res1 {
 | 
				
			||||||
 | 
							m := re.FindStringSubmatch(l)
 | 
				
			||||||
 | 
							if len(m) > 0 {
 | 
				
			||||||
 | 
								dec, err := base64.StdEncoding.DecodeString(m[2])
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									fmt.Printf("Error decoding base64: %s: %v\n", m[2], err)
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								res2 = append(res2, fmt.Sprintf("%s: %s", m[1], dec))
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								res2 = append(res2, l)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, l := range res2 {
 | 
				
			||||||
 | 
							fmt.Printf("%s\n", l)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := scanner.Err(); err != nil {
 | 
				
			||||||
 | 
							fmt.Errorf("%v\n", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user