func MSSQL_to_PG(conf *SABModules.Config_STR, pg_minsert int) int { var ( ckl int ckl_servers int num_servers int ckl_que int num_que int queryx string pg_Query_Create = []string{` CREATE TABLE IF NOT EXISTS XYZWorkTableZYX (server character varying(255), uid bytea, idparent bytea, name character varying(255), nametr character varying(255), primary key (uid)); `, ` CREATE TABLE IF NOT EXISTS XYZWorkTableZYX (server character varying(255), uid bytea, idparent bytea, name character varying(255), nametr character varying(255), idorg bytea, primary key (uid)); `, ` CREATE TABLE IF NOT EXISTS XYZWorkTableZYX (server character varying(255), uid bytea, idparent bytea, nfr character varying(255), nfir character varying(5), nlr character varying(255), nmr character varying(255), nmir character varying(5), nft character varying(255), nfit character varying(5), nlt character varying(255), nmt character varying(255), nmit character varying(5), tab character varying(255), pos character varying(255), idorg bytea, contract integer NOT NULL, primary key (uid)); `} pg_Query_Create_Status = string(` CREATE TABLE IF NOT EXISTS XYZWorkTableZYX (server character varying(255), status character varying(255), primary key (server)); `) return_result = int(0) ) log.Printf("MS SQL export to PG...") num_servers = len(conf.MSSQL_DSN) num_que = len(SABDefine.MSSQL_QUE) dbpg, err := sql.Open("postgres", conf.PG_DSN) if err != nil { log.Printf("PG::Open() error: %v\n", err) return 10 } defer dbpg.Close() queryx = strings.Replace(pg_Query_Create_Status, "XYZWorkTableZYX", SABDefine.PG_Table_MSSQL_Status, -1) // log.Printf("%s\n", queryx) _, err = dbpg.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Create table error: %v\n", err) return 11 } for ckl_servers = 0; ckl_servers < num_servers; ckl_servers++ { db, err := sql.Open("mssql", conf.MSSQL_DSN[ckl_servers][0]) if err != nil { log.Printf("MS SQL::Open() error: %v\n", err) continue } else { defer db.Close() for ckl_que = 0; ckl_que < num_que; ckl_que++ { log.Printf("\t\tServer %2d of %2d / Pass %2d of %2d / Server name: %s\n", ckl_servers+1, num_servers, ckl_que+1, num_que, conf.MSSQL_DSN[ckl_servers][1]) queryx = strings.Replace(pg_Query_Create[ckl_que], "XYZWorkTableZYX", SABDefine.PG_Table_MSSQL[ckl_que], -1) _, err = dbpg.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Create table error: %v\n", err) return 12 } rows, err := db.Query(SABDefine.MSSQL_QUE[ckl_que]) if err != nil { log.Printf("MS SQL::Query() error: %v\n", err) break } else { timenow := time.Now().Format("2006.01.02 15:04:05") queryx = fmt.Sprintf("INSERT INTO %s (server, status) select '%s', '%s' where not exists (select server from %s where server='%s'); update %s set status='%s' where server='%s'; ", SABDefine.PG_Table_MSSQL_Status, conf.MSSQL_DSN[ckl_servers][1], timenow, SABDefine.PG_Table_MSSQL_Status, conf.MSSQL_DSN[ckl_servers][1], SABDefine.PG_Table_MSSQL_Status, timenow, conf.MSSQL_DSN[ckl_servers][1]) // log.Printf("%s\n", queryx) _, err = dbpg.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Create table error: %v\n", err) return 13 } _, err = dbpg.Query(fmt.Sprintf("delete from %s where server='%s';", SABDefine.PG_Table_MSSQL[ckl_que], conf.MSSQL_DSN[ckl_servers][1])) if err != nil { log.Printf("PG::Query() Clean table error: %v\n", err) return 14 } } ckl = 0 for rows.Next() { if ckl < 1 { queryx = "" } return_result = 94 switch ckl_que + 1 { case 1: var ( xid []byte xname string xidparent []byte xnameq string ) rows.Scan(&xid, &xname, &xidparent) xname = SABModules.TextMutation(xname) xnameq = SABModules.TransMutation(xname, conf) xnametr := unidecode.Unidecode(xnameq) queryx = fmt.Sprintf("%sINSERT INTO %s (server, uid, idparent, name, nametr) select '%s', '%v', '%v','%s','%s' where not exists (select uid from %s where uid='%v'); ", queryx, SABDefine.PG_Table_MSSQL[ckl_que], conf.MSSQL_DSN[ckl_servers][1], xid, xidparent, xname, xnametr, SABDefine.PG_Table_MSSQL[ckl_que], xid) case 2: var ( xid []byte xidorg []byte xidparent []byte xname string xnameq string ) rows.Scan(&xid, &xidorg, &xidparent, &xname) xname = SABModules.TextMutation(xname) xnameq = SABModules.TransMutation(xname, conf) xnametr := unidecode.Unidecode(xnameq) if fmt.Sprintf("%v", xidparent) == "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]" { queryx = fmt.Sprintf("%sINSERT INTO %s (server, uid, idparent, name, nametr, idorg) VALUES ('%s', '%v', '%v','%s','%s','%v'); ", queryx, SABDefine.PG_Table_MSSQL[ckl_que], conf.MSSQL_DSN[ckl_servers][1], xid, xidorg, xname, xnametr, xidorg) } else { queryx = fmt.Sprintf("%sINSERT INTO %s (server, uid, idparent, name, nametr, idorg) VALUES ('%s', '%v', '%v','%s','%s','%v'); ", queryx, SABDefine.PG_Table_MSSQL[ckl_que], conf.MSSQL_DSN[ckl_servers][1], xid, xidparent, xname, xnametr, xidorg) } case 3: var ( xid []byte xname string xfio []string xfiotr []string xtab string xidorg []byte xidparent []byte xpos string xcontract int ) rows.Scan(&xid, &xname, &xtab, &xidorg, &xidparent, &xpos, &xcontract) xfio = SABModules.PeopleMutation(xname, "RUS") xfiotr = SABModules.PeopleMutation(unidecode.Unidecode(xname), "LAT") xtab = SABModules.TextMutation(xtab) xpos = SABModules.PosMutation(xpos, conf) if len(xfio) < 3 { queryx = fmt.Sprintf("%sINSERT INTO %s (server, uid, idparent, nlr, nfr, nfir, nmr, nmir, nlt, nft, nfit, nmt, nmit, tab, pos, idorg, contract) VALUES ('%s', '%v', '%v','%s','%s','%s','','','%s','%s','%s','','','%s','%s','%v',%d); ", queryx, SABDefine.PG_Table_MSSQL[ckl_que], conf.MSSQL_DSN[ckl_servers][1], xid, xidparent, xfio[0], xfio[1], xfio[1][:2], xfiotr[0], xfiotr[1], xfiotr[1][:1], xtab, xpos, xidorg, xcontract) } else { queryx = fmt.Sprintf("%sINSERT INTO %s (server, uid, idparent, nlr, nfr, nfir, nmr, nmir, nlt, nft, nfit, nmt, nmit, tab, pos, idorg, contract) VALUES ('%s', '%v', '%v','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%v',%d); ", queryx, SABDefine.PG_Table_MSSQL[ckl_que], conf.MSSQL_DSN[ckl_servers][1], xid, xidparent, xfio[0], xfio[1], xfio[1][:2], xfio[2], xfio[2][:2], xfiotr[0], xfiotr[1], xfiotr[1][:1], xfiotr[2], xfiotr[2][:1], xtab, xpos, xidorg, xcontract) } default: break } if ckl >= pg_minsert-1 { // log.Printf("%s\n\n", queryx) _, err = dbpg.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Insert into table error: %v\n", err) } queryx = "" ckl = 0 } else { ckl++ } } // log.Printf("%s\n\n", queryx) _, err = dbpg.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Insert into table error: %v\n", err) } } } } log.Printf("\tComplete") return return_result }
func LDAP_to_PG(conf *SABModules.Config_STR, pg_minsert int) int { var ( ckl_servers int num_servers int fName []string fCN []string fOUa []string fOU string fMail string pfName string pfCN string pfMail string ckl = int(0) state = int(0) queryx string pg_Domino_Create = string(` CREATE TABLE IF NOT EXISTS XYZWorkTableZYX (server character varying(255), namerus character varying(255), trnamerus character varying(255), namelat character varying(255), ou character varying(255), mail character varying(255), primary key (mail)); `) pg_Query_Create_Status = string(` CREATE TABLE IF NOT EXISTS XYZWorkTableZYX (server character varying(255), status character varying(255), primary key (server)); `) return_result = int(0) ) log.Printf("LDAP Export to PG...") num_servers = len(conf.LDAP_URL) db, err := sql.Open("postgres", conf.PG_DSN) if err != nil { log.Printf("PG::Open() error: %v\n", err) return 10 } defer db.Close() queryx = strings.Replace(pg_Domino_Create, "XYZWorkTableZYX", SABDefine.PG_Table_Domino, -1) _, err = db.Query(queryx) if err != nil { log.Printf("PG::Query() Create table error: %v\n", err) return 11 } queryx = strings.Replace(pg_Query_Create_Status, "XYZWorkTableZYX", SABDefine.PG_Table_Domino_Status, -1) _, err = db.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Create table error: %v\n", err) return 12 } for ckl_servers = 0; ckl_servers < num_servers; ckl_servers++ { log.Printf("\t\tServer %2d of %2d / Pass 1 of 1 / Server name: %s\n", ckl_servers+1, num_servers, conf.LDAP_URL[ckl_servers][0]) l, err := ldap.Dial("tcp", conf.LDAP_URL[ckl_servers][0]) if err != nil { log.Printf("LDAP::Initialize() error: %v\n", err) continue } defer l.Close() // l.Debug = true err = l.Bind(conf.LDAP_URL[ckl_servers][1], conf.LDAP_URL[ckl_servers][2]) if err != nil { log.Printf("LDAP::Bind() error: %v\n", err) continue } search := ldap.NewSearchRequest(conf.LDAP_URL[ckl_servers][3], ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, conf.LDAP_URL[ckl_servers][4], SABDefine.LDAP_attr, nil) sr, err := l.Search(search) if err != nil { log.Printf("LDAP::Search() error: %v\n", err) continue } log.Printf("\t\t\t%s // %d\n", search.Filter, len(sr.Entries)) if len(sr.Entries) > 10 { timenow := time.Now().Format("2006.01.02 15:04:05") queryx = fmt.Sprintf("INSERT INTO %s (server, status) select '%s', '%s' where not exists (select server from %s where server='%s'); update %s set status='%s' where server='%s'; ", SABDefine.PG_Table_Domino_Status, conf.LDAP_URL[ckl_servers][0], timenow, SABDefine.PG_Table_Domino_Status, conf.LDAP_URL[ckl_servers][0], SABDefine.PG_Table_Domino_Status, timenow, conf.LDAP_URL[ckl_servers][0]) // log.Printf("%s\n", queryx) _, err = db.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Create table error: %v\n", err) return 14 } _, err = db.Query(fmt.Sprintf("delete from %s where server='%s';", SABDefine.PG_Table_Domino, conf.LDAP_URL[ckl_servers][0])) if err != nil { log.Printf("PG::Query() Clean table error: %v\n", err) return 14 } } ckl = 0 for _, entry := range sr.Entries { if ckl < 1 { queryx = "" } for _, attr := range entry.Attributes { if attr.Name == "altfullname" { x := strings.Join(attr.Values, ",") fOUa = strings.Split(x, ",") fName = strings.Split(fOUa[0], "=") } if attr.Name == "cn" { x := strings.Join(attr.Values, ",") fCN = strings.Split(x, ",") } if attr.Name == "mail" { fMail = strings.Join(attr.Values, ",") } } if len(fName) > 0 && len(fCN) > 0 { return_result = 94 if ckl > 0 && state == 1 { queryx = fmt.Sprintf("%s , ", queryx) } fOU = "" for ckl1 := int(len(fOUa) - 2); ckl1 > 0; ckl1-- { fOU = fmt.Sprintf("%s/%s", fOU, fOUa[ckl1]) } fOU = strings.Trim(strings.Trim(strings.Replace(strings.Replace(fOU, "OU=", "", -1), "O=", "", -1), "/"), " ") if fOU == "" { fOU = conf.ROOT_OU } pfName = SABModules.TextMutation(strings.Replace(fName[int(len(fName)-1)], "'", "", -1)) pfCN = SABModules.TextMutation(strings.Replace(fCN[0], "'", "", -1)) pfMail = strings.Replace(strings.ToLower(fMail), " ", "", -1) queryx = fmt.Sprintf("%sINSERT INTO %s (server, namerus, trnamerus, namelat, ou, mail) select '%s','%s','%s','%s','%s','%s' where not exists (select mail from %s where mail='%s'); ", queryx, SABDefine.PG_Table_Domino, conf.LDAP_URL[ckl_servers][0], pfName, unidecode.Unidecode(pfName), pfCN, fOU, pfMail, SABDefine.PG_Table_Domino, pfMail) // log.Printf("%s", queryx) // state = 1 } if ckl >= pg_minsert-1 { // log.Printf("%s\n\n", queryx) _, err = db.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() insert error: %v /// %s\n", err, queryx) } queryx = "" ckl = 0 // state=0 } else { ckl++ } } // log.Printf("%s\n\n", queryx) _, err = db.Query(queryx) if err != nil { log.Printf("%s\n", queryx) log.Printf("PG::Query() Insert into table error: %v\n", err) } } log.Printf("\tComplete") return return_result }