From 0bb837d49af543331c95e5ee1edfa138ca6fce2a Mon Sep 17 00:00:00 2001 From: zhangjianjun_code <7844966+zhangjianjun_code@user.noreply.gitee.com> Date: Fri, 16 Oct 2020 14:13:47 +0800 Subject: [PATCH] 1. Modify English comments; 2. Delete code comments; 3. Fix existing bugs; --- Dockerfile | 8 +- common/aes.go | 98 +- common/common.go | 221 ++-- conf/app.conf | 33 +- conf/product_app.conf | 25 +- controllers/cvedetail.go | 35 +- controllers/file.go | 1 + controllers/hook.go | 189 ++- controllers/issue.go | 46 +- controllers/login.go | 32 +- controllers/packages.go | 124 +- controllers/upload.go | 79 +- controllers/user.go | 1 - doc/md/manual.md | 9 +- doc/sql/db_data.sql | 2520 ++++++++++++++++++++++++++++++++++++ doc/sql/db_struct.sql | 21 +- main.go | 14 +- models/cve.go | 2 - models/cvedetail.go | 2 +- models/excel.go | 2 +- models/giteeissue.go | 8 +- models/hookevent.go | 117 +- models/initdb.go | 11 +- models/issue.go | 35 +- models/login.go | 7 +- models/modeldb.go | 30 +- models/oricvecheck.go | 12 +- models/packages.go | 20 +- models/securitynotice.go | 15 + models/uploadcve.go | 154 +-- models/user.go | 3 +- models/ymal.go | 33 +- routers/router.go | 4 +- task/cve.go | 28 +- task/inittask.go | 57 +- task/issuetask.go | 36 +- task/oricvecheck.go | 8 +- task/printlog.go | 14 +- task/yaml.go | 8 +- taskhandler/assist.go | 22 +- taskhandler/comment.go | 38 +- taskhandler/common.go | 19 - taskhandler/createissue.go | 72 +- taskhandler/cve.go | 34 +- taskhandler/excel.go | 23 +- taskhandler/grabissue.go | 24 +- taskhandler/oricvecheck.go | 6 +- taskhandler/yaml.go | 82 +- util/http.go | 10 +- util/parsepayload.go | 33 +- 50 files changed, 3397 insertions(+), 1028 deletions(-) create mode 100644 models/securitynotice.go diff --git a/Dockerfile b/Dockerfile index a242adb..84cf3a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,9 +24,9 @@ EXPOSE 80 # copy binary config and utils FROM golang:latest -RUN mkdir -p /opt/cve-manager/conf -COPY ./conf/product_app.conf /opt/cve-manager/app.conf +RUN mkdir -p /opt/cve-manager && mkdir -p /opt/cve-manager/conf +COPY ./conf/product_app.conf /opt/cve-manager/conf/app.conf COPY ./cve-manager/cve-manager /opt/cve-manager -WORKDIR /opt/app/ -ENTRYPOINT ["/opt/app/cve-manager"] \ No newline at end of file +WORKDIR /opt/cve-manager/ +ENTRYPOINT ["/opt/cve-manager/cve-manager"] \ No newline at end of file diff --git a/common/aes.go b/common/aes.go index fe6f79e..a1e530e 100644 --- a/common/aes.go +++ b/common/aes.go @@ -14,62 +14,52 @@ import ( "time" ) -//PKCS7Padding PKCS7 填充模式 +//PKCS7Padding PKCS7 padding mode func PKCS7Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize - //Repeat()函数的功能是把切片[]byte{byte(padding)}复制padding个,然后合并成新的字节切片返回 padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) } -//PKCS7UnPadding 填充的反向操作,删除填充字符串 +// PKCS7UnPadding reverse operation of padding, delete padding string func PKCS7UnPadding(origData []byte) ([]byte, error) { - //获取数据长度 length := len(origData) if length == 0 { return nil, errors.New("加密字符串错误!") } - //获取填充字符串长度 + // Get the length of the padding string unPadding := int(origData[length-1]) - //截取切片,删除填充字节,并且返回明文 + // Intercept the slice, delete the padding bytes, and return the plaintext return origData[:(length - unPadding)], nil } -//AesEcrypt 实现加密 +//AesEcrypt Implement encryption func AesEcrypt(origData []byte, key []byte) ([]byte, error) { - //创建加密算法实例 + // Create an instance of an encryption algorithm block, err := aes.NewCipher(key) if err != nil { return nil, err } - //获取块的大小 blockSize := block.BlockSize() - //对数据进行填充,让数据长度满足需求 origData = PKCS7Padding(origData, blockSize) - //采用AES加密方法中CBC加密模式 blocMode := cipher.NewCBCEncrypter(block, key[:blockSize]) crypted := make([]byte, len(origData)) - //执行加密 blocMode.CryptBlocks(crypted, origData) return crypted, nil } -//AesDeCrypt 实现解密 +//AesDeCrypt Realize decryption func AesDeCrypt(cypted []byte, key []byte) ([]byte, error) { - //创建加密算法实例 + //Create an instance of an encryption algorithm block, err := aes.NewCipher(key) if err != nil { return nil, err } - //获取块大小 blockSize := block.BlockSize() - //创建加密客户端实例 blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) origData := make([]byte, len(cypted)) - //这个函数也可以用来解密 blockMode.CryptBlocks(origData, cypted) - //去除填充字符串 origData, err = PKCS7UnPadding(origData) if err != nil { return nil, err @@ -77,7 +67,7 @@ func AesDeCrypt(cypted []byte, key []byte) ([]byte, error) { return origData, err } -//EnPwdCode 加密base64 +//EnPwdCode Encrypted base64 func EnPwdCode(pwd []byte, key []byte) (string, error) { result, err := AesEcrypt(pwd, key) if err != nil { @@ -86,25 +76,17 @@ func EnPwdCode(pwd []byte, key []byte) (string, error) { return base64.StdEncoding.EncodeToString(result), err } -//DePwdCode 解密 +//DePwdCode decryption func DePwdCode(pwd string, key []byte) ([]byte, error) { - //解密base64字符串 + //Decrypt base64 string pwdByte, err := base64.StdEncoding.DecodeString(pwd) if err != nil { return nil, err } - //执行AES解密 return AesDeCrypt(pwdByte, key) } -//func main() { -// str := []byte("12fff我是ww.topgoer.com的站长枯藤") -// pwd, _ := EnPwdCode(str) -// bytes, _ := DePwdCode(pwd) -// fmt.Println(string(bytes)) -//} - var ( length int charset string @@ -116,54 +98,27 @@ const ( SpecStr = "+=-@#~,.[]()!%^*$" ) -//解析参数 func parseArgs(lens int) { - //需要接受指针,就传递地址,& - //flag.IntVar(&length, "l", 16, "-l 生成密码的长度") - //flag.StringVar(&charset, "t", "num", - // //反引号以原样输出 - // `-t 制定密码生成的字符集, - // num:只使用数字[0-9], - // char:只使用英文字母[a-zA-Z], - // mix:使用数字和字母, - // advance:使用数字、字母以及特殊字符`) length = lens charset = "advance" flag.Parse() } -//检测字符串中的空格 -func test1() { - for i := 0; i < len(CharStr); i++ { - if CharStr[i] != ' ' { - fmt.Printf("%c", CharStr[i]) - } - } -} - func generatePasswd() string { - //初始化密码切片 var passwd []byte = make([]byte, length, length) - //源字符串 var sourceStr string - //判断字符类型,如果是数字 if charset == "num" { sourceStr = NUmStr - //如果选的是字符 } else if charset == "char" { sourceStr = charset - //如果选的是混合模式 } else if charset == "mix" { sourceStr = fmt.Sprintf("%s%s", NUmStr, CharStr) - //如果选的是高级模式 } else if charset == "advance" { sourceStr = fmt.Sprintf("%s%s%s", NUmStr, CharStr, SpecStr) } else { sourceStr = NUmStr } fmt.Println("source:", sourceStr) - - //遍历,生成一个随机index索引, for i := 0; i < length; i++ { index := rand.Intn(len(sourceStr)) passwd[i] = sourceStr[index] @@ -171,13 +126,10 @@ func generatePasswd() string { return string(passwd) } -//GenPrivKey 生成私有key +//GenPrivKey Generate private key func GenPrivKey(lens int) string { - //随机种子 rand.Seed(time.Now().UnixNano()) parseArgs(lens) - //fmt.Printf("length:%d charset:%s\n", length, charset) - //test1() passwd := generatePasswd() fmt.Println(passwd) fmt.Printf("length:%d charset:%s\n", length, charset) @@ -196,14 +148,13 @@ func setting(jwtkey []byte, username, password string) (string, error) { username: username, password: password, StandardClaims: jwt.StandardClaims{ - ExpiresAt: expireTime.Unix(), //过期时间 + ExpiresAt: expireTime.Unix(), //expire date IssuedAt: time.Now().Unix(), - Issuer: "127.0.0.1", // 签名颁发者 - Subject: "user token", //签名主题 + Issuer: "127.0.0.1", // Signature issuer + Subject: "user token", //Signature subject }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - // fmt.Println(token) tokenString, err := token.SignedString(jwtkey) if err != nil { logs.Error(err) @@ -212,27 +163,10 @@ func setting(jwtkey []byte, username, password string) (string, error) { return tokenString, nil } -//GenToken 生成Token +//GenToken Generate Token func GenToken(username, password string) (string, error) { pKey := GenPrivKey(16) var jwtkey = []byte(pKey) tokens, err := setting(jwtkey, username, password) return tokens, err } - -////解析token -//func getting(tokenString string) (string, struct{}){ -// token, claims, err := ParseToken(tokenString) -// if err != nil || !token.Valid { -// return "", struct{}{} -// } -// return token, -//} -// -//func ParseToken(tokenString string) (*jwt.Token, *Claims, error) { -// Claims := &Claims{} -// token, err := jwt.ParseWithClaims(tokenString, Claims, func(token *jwt.Token) (i interface{}, err error) { -// return jwtkey, nil -// }) -// return token, Claims, err -//} diff --git a/common/common.go b/common/common.go index e5238e1..741cfbe 100644 --- a/common/common.go +++ b/common/common.go @@ -21,7 +21,6 @@ func DesString(dbpwd string) (strs string) { return strs } - func GetTokenExpirTime() (token_expir_time int) { token_expir_time, err := beego.AppConfig.Int("token_expir_time") if err == nil { @@ -30,9 +29,8 @@ func GetTokenExpirTime() (token_expir_time int) { return 3 } - -func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ - if Vector != "" || len(Vector) != 0{ +func VectorParams(Vector string, VectorMap map[string]string) map[string]string { + if Vector != "" || len(Vector) != 0 { VertorList := strings.Split(Vector, "/") if VertorList != nil && len(VertorList) > 0 { for _, vule := range VertorList { @@ -51,7 +49,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ case "AC": if verVule == "L" { VectorMap["NattackComplexity"] = "Low" - } else if verVule == "H"{ + } else if verVule == "H" { VectorMap["NattackComplexity"] = "High" } else { VectorMap["NattackComplexity"] = "None" @@ -59,7 +57,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ case "PR": if verVule == "L" { VectorMap["NprivilegeRequired"] = "Low" - } else if verVule == "H"{ + } else if verVule == "H" { VectorMap["NprivilegeRequired"] = "High" } else { VectorMap["NprivilegeRequired"] = "None" @@ -67,7 +65,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ case "UI": if verVule == "L" { VectorMap["NuserInteraction"] = "Low" - } else if verVule == "H"{ + } else if verVule == "H" { VectorMap["NuserInteraction"] = "High" } else { VectorMap["NuserInteraction"] = "None" @@ -81,7 +79,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ case "C": if verVule == "L" { VectorMap["Nconfidentiality"] = "Low" - } else if verVule == "H"{ + } else if verVule == "H" { VectorMap["Nconfidentiality"] = "High" } else { VectorMap["Nconfidentiality"] = "None" @@ -89,7 +87,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ case "I": if verVule == "L" { VectorMap["Nintegrity"] = "Low" - } else if verVule == "H"{ + } else if verVule == "H" { VectorMap["Nintegrity"] = "High" } else { VectorMap["Nintegrity"] = "None" @@ -97,7 +95,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ case "A": if verVule == "L" { VectorMap["Navailability"] = "Low" - } else if verVule == "H"{ + } else if verVule == "H" { VectorMap["Navailability"] = "High" } else { VectorMap["Navailability"] = "None" @@ -113,7 +111,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{ return VectorMap } -func GetCurTime() string{ +func GetCurTime() string { return time.Now().Format("2006-01-02 15:04:05") } @@ -123,17 +121,9 @@ func GetCurDate() string { func GetBeforeTime(days int) string { nowTime := time.Now() - getTime := nowTime.AddDate(0, 0, days) //年,月,日 获取一天前的时间 - resTime := getTime.Format("2006-01-02 15:04:05") //获取的时间的格式 + getTime := nowTime.AddDate(0, 0, days) + resTime := getTime.Format("2006-01-02 15:04:05") // The format of the obtained time logs.Info("获取:", days, "前的时间:", resTime) - - //getTime = nowTime.AddDate(0, -1, 0) //年,月,日 获取一个月前的时间 - //resTime = getTime.Format("2006-01-02 15:04:05") //获取的时间的格式 - //fmt.Println(resTime) - // - //getTime = nowTime.AddDate(-2, 0, 0) //年,月,日 获取两年前的时间 - //resTime = getTime.Format("20060102") //获取的时间的格式 - //fmt.Println(resTime) return resTime } @@ -143,7 +133,6 @@ func Catchs() { } } - func DeletePreAndSufSpace(str string) string { strList := []byte(str) spaceCount, count := 0, len(strList) @@ -172,14 +161,14 @@ type CveDescription struct { } type NodeCpe struct { - Cpe23Uri string `json:"cpe23Uri"` + Cpe23Uri string `json:"cpe23Uri"` CpeMatchString string `json:"cpeMatchString"` - Vulnerable string `json:"vulnerable"` + Vulnerable string `json:"vulnerable"` } type ConfNodes struct { - Operator string `json:"operator"` - Cpe []NodeCpe `json:"cpe"` + Operator string `json:"operator"` + Cpe []NodeCpe `json:"cpe"` } type CveConfigurations struct { @@ -187,48 +176,48 @@ type CveConfigurations struct { } type BmCvssV3 struct { - VectorString string `json:"vectorString"` - AttackComplexity string `json:"attackComplexity"` - AttackVector string `json:"attackVector"` - AvailabilityImpact string `json:"availabilityImpact"` - BaseSeverity string `json:"baseSeverity"` - UserInteraction string `json:"userInteraction"` - BaseScore float64 `json:"baseScore"` - PrivilegesRequired string `json:"privilegesRequired"` - Version string `json:"version"` - ConfidentialityImpact string `json:"confidentialityImpact"` - IntegrityImpact string `json:"integrityImpact"` - Scope string `json:"scope"` + VectorString string `json:"vectorString"` + AttackComplexity string `json:"attackComplexity"` + AttackVector string `json:"attackVector"` + AvailabilityImpact string `json:"availabilityImpact"` + BaseSeverity string `json:"baseSeverity"` + UserInteraction string `json:"userInteraction"` + BaseScore float64 `json:"baseScore"` + PrivilegesRequired string `json:"privilegesRequired"` + Version string `json:"version"` + ConfidentialityImpact string `json:"confidentialityImpact"` + IntegrityImpact string `json:"integrityImpact"` + Scope string `json:"scope"` } type ImBaseMetricV3 struct { - CvssV3 BmCvssV3 `json:"cvssV3"` - ImpactScore float64 `json:"impactScore"` - ExploitabilityScore float64 `json:"exploitabilityScore"` + CvssV3 BmCvssV3 `json:"cvssV3"` + ImpactScore float64 `json:"impactScore"` + ExploitabilityScore float64 `json:"exploitabilityScore"` } type BmCvssV2 struct { - VectorString string `json:"vectorString"` - AccessComplexity string `json:"accessComplexity"` - AvailabilityImpact string `json:"availabilityImpact"` - Authentication string `json:"authentication"` - Version string `json:"version"` - BaseScore float64 `json:"baseScore"` - IntegrityImpact string `json:"integrityImpact"` - ConfidentialityImpact string `json:"confidentialityImpact"` - AccessVector string `json:"accessVector"` + VectorString string `json:"vectorString"` + AccessComplexity string `json:"accessComplexity"` + AvailabilityImpact string `json:"availabilityImpact"` + Authentication string `json:"authentication"` + Version string `json:"version"` + BaseScore float64 `json:"baseScore"` + IntegrityImpact string `json:"integrityImpact"` + ConfidentialityImpact string `json:"confidentialityImpact"` + AccessVector string `json:"accessVector"` } type ImBaseMetricV2 struct { - AcInsufInfo string `json:"acInsufInfo"` - CvssV2 BmCvssV2 `json:"cvssV2"` - UserInteractionRequired string `json:"userInteractionRequired"` - Severity string `json:"severity"` - ObtainUserPrivilege string `json:"obtainUserPrivilege"` - ObtainAllPrivilege string `json:"obtainAllPrivilege"` - ImpactScore float64 `json:"impactScore"` - ExploitabilityScore float64 `json:"exploitabilityScore"` - ObtainOtherPrivilege string `json:"obtainOtherPrivilege"` + AcInsufInfo string `json:"acInsufInfo"` + CvssV2 BmCvssV2 `json:"cvssV2"` + UserInteractionRequired string `json:"userInteractionRequired"` + Severity string `json:"severity"` + ObtainUserPrivilege string `json:"obtainUserPrivilege"` + ObtainAllPrivilege string `json:"obtainAllPrivilege"` + ImpactScore float64 `json:"impactScore"` + ExploitabilityScore float64 `json:"exploitabilityScore"` + ObtainOtherPrivilege string `json:"obtainOtherPrivilege"` } type CveImpact struct { @@ -237,95 +226,95 @@ type CveImpact struct { } type CvePoc struct { - Source string `json:"source"` - Date string `json:"date"` - Path string `json:"path"` + Source string `json:"source"` + Date string `json:"date"` + Path string `json:"path"` Dbindex string `json:"dbindex"` - Url string `json:"url"` - Desc string `json:"desc"` + Url string `json:"url"` + Desc string `json:"desc"` } type CveEvent struct { - Title string `json:"title"` - Date string `json:"date"` + Title string `json:"title"` + Date string `json:"date"` Description string `json:"description"` - Url string `json:"url"` + Url string `json:"url"` } type CveReferenceData struct { - Url string `json:"url"` - Name string `json:"name"` - Refsource string `json:"refsource"` - Tags []string `json:"tags"` + Url string `json:"url"` + Name string `json:"name"` + Refsource string `json:"refsource"` + Tags []string `json:"tags"` } type CveVulType struct { Cwe string `json:"cwe"` - En string `json:"en"` - Zh string `json:"zh"` + En string `json:"en"` + Zh string `json:"zh"` } type FixReferences struct { - Url string `json:"url"` - Refsource string `json:"refsource"` - Name string `json:"name"` - Tags []string `json:"tags"` + Url string `json:"url"` + Refsource string `json:"refsource"` + Name string `json:"name"` + Tags []string `json:"tags"` } type CveFixSuggest struct { - Detail string `jsong:"detail"` + Detail string `jsong:"detail"` References []FixReferences `jsong:"references"` } type CveOriginData struct { - Ids string `json:"ids"` - CveNum string `json:"cveNum"` - UpdateType string `json:"updateType"` - CvePackName []string `json:"cvePackName"` - PackName []string `json:"packName"` - Description CveDescription `json:"description"` - Title string `json:"title"` - AffectProduct []string `json:"affectProduct"` - Configurations CveConfigurations `json:"configurations"` - CnnvdID string `json:"cnnvdID"` - CnvdID string `json:"cnvdID"` - PublishedDate string `json:"publishedDate"` - Impact CveImpact `json:"impact"` - VulStatus string `json:"vulStatus"` - Poc CvePoc `json:"poc"` - Event CveEvent `json:"event"` - ReferenceData []CveReferenceData `json:"referenceData"` - VulType CveVulType `json:"vulType"` - FixSuggest CveFixSuggest `json:"fixSuggest"` - Version string `json:"version"` + Ids string `json:"ids"` + CveNum string `json:"cveNum"` + UpdateType string `json:"updateType"` + CvePackName []string `json:"cvePackName"` + PackName []string `json:"packName"` + Description CveDescription `json:"description"` + Title string `json:"title"` + AffectProduct []string `json:"affectProduct"` + Configurations CveConfigurations `json:"configurations"` + CnnvdID string `json:"cnnvdID"` + CnvdID string `json:"cnvdID"` + PublishedDate string `json:"publishedDate"` + Impact CveImpact `json:"impact"` + VulStatus string `json:"vulStatus"` + Poc CvePoc `json:"poc"` + Event CveEvent `json:"event"` + ReferenceData []CveReferenceData `json:"referenceData"` + VulType CveVulType `json:"vulType"` + FixSuggest CveFixSuggest `json:"fixSuggest"` + Version string `json:"version"` } type UploadData struct { - Token string `json:"Token"` + Token string `json:"Token"` CveData []CveOriginData } type CveOriginDetailData struct { - CveNum string `json:"cveNum"` - CvePackName string `json:"cvePackName"` - Description CveDescription `json:"description"` - Title string `json:"title"` - Configurations CveConfigurations `json:"configurations"` - CnnvdID string `json:"cnnvdID"` - CnvdID string `json:"cnvdID"` - PublishedDate string `json:"publishedDate"` - Impact CveImpact `json:"impact"` - VulStatus string `json:"vulStatus"` - Poc CvePoc `json:"poc"` - Event CveEvent `json:"event"` - ReferenceData []CveReferenceData `json:"referenceData"` - VulType CveVulType `json:"vulType"` - FixSuggest CveFixSuggest `json:"fixSuggest"` + CveNum string `json:"cveNum"` + CvePackName string `json:"cvePackName"` + Description CveDescription `json:"description"` + Title string `json:"title"` + Configurations CveConfigurations `json:"configurations"` + CnnvdID string `json:"cnnvdID"` + CnvdID string `json:"cnvdID"` + PublishedDate string `json:"publishedDate"` + Impact CveImpact `json:"impact"` + VulStatus string `json:"vulStatus"` + Poc CvePoc `json:"poc"` + Event CveEvent `json:"event"` + ReferenceData []CveReferenceData `json:"referenceData"` + VulType CveVulType `json:"vulType"` + FixSuggest CveFixSuggest `json:"fixSuggest"` } func GetRepoOrg() (string, error) { BConfig, err := config.NewConfig("ini", "conf/app.conf") - if err != nil{ + if err != nil { logs.Error("config init error:", err) return "", err } @@ -335,4 +324,4 @@ func GetRepoOrg() (string, error) { return "", errors.New("value is nil") } return owner, nil -} \ No newline at end of file +} diff --git a/conf/app.conf b/conf/app.conf index 93cf1bc..d60770f 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -1,33 +1,32 @@ appname = cvevulner -#appname = cve_manager httpport = 80 runmode = dev autorender = false copyrequestbody = true EnableDocs = true sqlconn = -# 登录双方约定的key +# Login key agreed by both parties key = "${AES_KEY||djS*@+8K9{J!ymk6}" initdb = 1 -# 登录key +# Login key loginkey = "{${LOGIN_KEY||djS*@+8K9{-!yo%64}" -# token 有效期,单位:天 +# Token validity period, unit: day token_expir_time=3 -#分析指令 +# Analysis instructions analysisCmd = "/analysis" endCmd = "/done" rejectCmd = "/reject" approveCmd = "/approve" +closeCmd = "/close" +labelFixed = "CVE/FIXED" +labelUnFix = "CVE/UNFIX" [mysql] dbhost = 192.168.1.95 -#dbhost = 159.138.2.2 dbport = 3306 -#dbuser = "${DB_USER||root}" dbuser = "${DB_USER||cve}" dbpwd = "${DB_PWD||***}" -#dbpwd = "+KAOKtEnEn7gRlDEIjeh59lutAMw2688YOqKVJQ2+Lo=" dbname = cvevulner dbprefix = cve_ maxidle = 30 @@ -37,13 +36,12 @@ maxconn = 3000 [log] log_level = 7 log_dir = ./logs -#log_path = C:\GoPject\src\cvevulner\logs\cve.log log_path = logs/cve.log -maxlines=200000 -maxsize=1024000 +maxlines=50000 +maxsize=304800 [crontab] -ymalflag = 2 +ymalflag = 2git getymal = 00 00 23 * * * cveflag = 2 getcve = 00 00 01 * * * @@ -60,23 +58,18 @@ genexcelflag = 2 genexcel = 00 00 04 * * * days = -30 prcnum = 100 -printlogflag = 1 +printlogflag = 2 printlog = 0 */10 * * * * [gitee] -#owner = xwzQmxx -#path = test -#email = 1499273991@qq.com -#redirect_uri = http://119.8.126.102:80/v1/issue/oauth/callback -# -------jianjun gitee 配置 -------- owner = cve-test path = jasper email = 7844966+zhangjianjun_code@user.noreply.gitee.com redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback scope = user_info projects pull_requests issues notes keys hook groups gists enterprises emails -# 优先从系统环境变量获取 获取失败使用默认值 **** +# Obtain first from the system environment variables, use the default value if it fails **** client_id = "${GITEE_CLIENT_ID||****}" client_secret = "${GITEE_CLIENT_SECRET||****}" password = "${GITEE_PASSWORD||****}" @@ -87,7 +80,7 @@ git_token = "${GITEE_TOKEN||xxx}" [hook] hookpwd = "${HOOK_PWD||***}" hookurl = http://159.138.2.2:80/v1/issue/hook/event -#hookurl = http://119.8.126.102:80/v1/issue/hook/event + [yaml] diff --git a/conf/product_app.conf b/conf/product_app.conf index 0697ea9..7bcd783 100644 --- a/conf/product_app.conf +++ b/conf/product_app.conf @@ -1,4 +1,3 @@ -#appname = cvevulner appname = cve_manager httpport = 80 runmode = dev @@ -6,25 +5,24 @@ autorender = false copyrequestbody = true EnableDocs = true sqlconn = -# 登录双方约定的key +# **** Login key agreed by both parties **** key = "${AES_KEY||djS*@+8K9{J!ymk6}" initdb = 1 -# 登录key +# **** Login key**** loginkey = "{${LOGIN_KEY||djS*@+8K9{-!yo%64}" -# token 有效期,单位:天 +# **** Token validity period, unit: day**** token_expir_time=3 -#分析指令 +# **** Analysis instructions**** analysisCmd = "/analysis" endCmd = "/done" rejectCmd = "/reject" approveCmd = "/approve" +closeCmd = "/close" [mysql] -#dbhost = 127.0.0.1 dbhost = fafd55e8084b402d9998539b072eef7fin01.internal.ap-southeast-1.mysql.rds.myhuaweicloud.com dbport = 3306 -#dbuser = "${DB_USER||root}" dbuser = "${DB_USER||cve}" dbpwd = "${DB_PWD||***}" dbname = cvevulner @@ -35,7 +33,6 @@ maxconn = 3000 [log] log_level = 7 -#log_path = C:\GoPject\src\cvevulner\logs\cve.log log_path = logs/cve.log maxlines=200000 maxsize=1024000 @@ -61,29 +58,23 @@ prcnum = 100 [gitee] -#owner = xwzQmxx -#path = test -#email = 1499273991@qq.com -#redirect_uri = http://119.8.126.102:80/v1/issue/oauth/callback -# -------jianjun gitee 配置 -------- -owner = src-openeuler +owner = cve-test path = jasper email = 7844966+zhangjianjun_code@user.noreply.gitee.com redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback scope = user_info projects pull_requests issues notes keys hook groups gists enterprises emails -# 优先从系统环境变量获取 获取失败使用默认值 **** +# **** Obtain first from the system environment variables, use the default value if it fails **** client_id = "${GITEE_CLIENT_ID||****}" client_secret = "${GITEE_CLIENT_SECRET||****}" password = "${GITEE_PASSWORD||****}" -# git token +# **** git token**** git_token = "${GITEE_TOKEN||xxx}" [hook] hookpwd = "${HOOK_PWD||***}" hookurl = http://159.138.2.2:80/v1/issue/hook/event -#hookurl = http://119.8.126.102:80/v1/issue/hook/event [yaml] diff --git a/controllers/cvedetail.go b/controllers/cvedetail.go index 9dea1e4..cf14c2b 100644 --- a/controllers/cvedetail.go +++ b/controllers/cvedetail.go @@ -15,11 +15,10 @@ type CveDetailController struct { } func (c *CveDetailController) RetData(resp map[string]interface{}) { - c.Data["json"] =resp + c.Data["json"] = resp c.ServeJSON() } - // @Title Get cvedetail // @Description get cvedetail // @Param cvenumber type string true @@ -29,34 +28,34 @@ func (c *CveDetailController) RetData(resp map[string]interface{}) { func (u *CveDetailController) Get() { req := u.Ctx.Request addr := req.RemoteAddr - logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) + logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) resp := make(map[string]interface{}) var cod common.CveOriginDetailData - resp["errno"]=errcode.RecodeUnknowErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr) + resp["errno"] = errcode.RecodeUnknowErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr) resp["body"] = cod defer u.RetData(resp) cveNum := u.GetString("cveNum") if cveNum == "" { logs.Error("cveNum, 参数错误") - resp["errno"]=errcode.RecodeParamErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr) + resp["errno"] = errcode.RecodeParamErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr) return } cveType, typeError := u.GetInt("cveType") if typeError != nil || cveType == 0 { logs.Error("cveType, 参数错误") - resp["errno"]=errcode.RecodeParamErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr) + resp["errno"] = errcode.RecodeParamErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr) return } - // 原始数据来源于中科院展示 + // The original data comes from the display of the Chinese Academy of Sciences if cveType == 1 { var ou models.OriginUpstream ouErr := models.GetOriginUpstream(cveNum, &ou) - if ouErr != nil || ou.CveId == 0{ - resp["errno"]=errcode.RecodeNodata - resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata) + if ouErr != nil || ou.CveId == 0 { + resp["errno"] = errcode.RecodeNodata + resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata) return } cod.CveNum = ou.CveNum @@ -102,7 +101,7 @@ func (u *CveDetailController) Get() { cveImpact, ok := models.QueryCveImpact(ou.CveId) if ok && cveImpact.ImpactId > 0 { cveScore, ok := models.QueryCveScore(cveImpact.ImpactId, "v3") - if ok && cveScore.ScoreId > 0{ + if ok && cveScore.ScoreId > 0 { cveScV3, ok := models.QueryCveCvssV3(cveScore.ScoreId) if ok && cveScV3.V3Id > 0 { logs.Info(cveScV3) @@ -207,13 +206,13 @@ func (u *CveDetailController) Get() { } cod.FixSuggest.Detail = ouf.Detail } - resp["errno"]=errcode.RecodeOk - resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk) + resp["errno"] = errcode.RecodeOk + resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) resp["body"] = cod return } else { - resp["errno"]=errcode.RecodeNodata - resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata) + resp["errno"] = errcode.RecodeNodata + resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata) return } diff --git a/controllers/file.go b/controllers/file.go index 54bb97c..8d17494 100644 --- a/controllers/file.go +++ b/controllers/file.go @@ -4,6 +4,7 @@ import ( "cvevulner/models" "github.com/astaxie/beego" ) + //FileController file operation routing processing type FileController struct { beego.Controller diff --git a/controllers/hook.go b/controllers/hook.go index b15be03..a5c0bbe 100644 --- a/controllers/hook.go +++ b/controllers/hook.go @@ -1,6 +1,7 @@ package controllers import ( + "bytes" "cvevulner/models" "cvevulner/taskhandler" "cvevulner/util" @@ -9,6 +10,7 @@ import ( "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/logs" + "net/http" "os" "strconv" "strings" @@ -129,7 +131,7 @@ func (c *HookEventControllers) handleIssue() { return } if issueHook.Action == "assign" { - //更新issue 模板负责人 + //Update the person in charge of the issue template issueTmp := models.IssueTemplate{IssueNum: issueHook.Iid} err := models.GetIssueTemplateByColName(&issueTmp, "issue_num") if err != nil { @@ -152,6 +154,8 @@ func (c *HookEventControllers) handleIssue() { } func handleIssueStateChange(issueHook *models.IssuePayload) error { + unFix := beego.AppConfig.String("labelUnFix") + fixed := beego.AppConfig.String("labelFixed") issueTmp := models.IssueTemplate{IssueNum: issueHook.Iid} err := models.GetIssueTemplateByColName(&issueTmp, "issue_num") if err != nil { @@ -166,36 +170,80 @@ func handleIssueStateChange(issueHook *models.IssuePayload) error { case IssueOpenState: issueTmp.Status = 1 cveCenter.IsExport = 0 + _, _, ok := checkIssueAnalysisComplete(&issueTmp) + if ok { + issueTmp.IssueStatus = 3 + } else { + issueTmp.IssueStatus = 1 + } + issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix) + //issueTmp.IssueStatus = 1 case IssueProgressState: issueTmp.Status = 2 cveCenter.IsExport = 0 + _, _, ok := checkIssueAnalysisComplete(&issueTmp) + if ok { + issueTmp.IssueStatus = 3 + } else { + issueTmp.IssueStatus = 1 + } + issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix) case IssueCloseState: issueTmp.Status = 3 if isNormalCloseIssue(issueTmp.CveId, issueTmp.IssueStatus) { issueTmp.IssueStatus = 2 cveCenter.IsExport = 3 + issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(unFix, fixed) } else { issueTmp.IssueStatus = 6 cveCenter.IsExport = 2 + issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix) } case IssueRejectState: issueTmp.Status = 4 issueTmp.IssueStatus = 6 cveCenter.IsExport = 2 - /*if isNormalCloseIssue(issueTmp.CveId, issueTmp.IssueStatus) { - issueTmp.IssueStatus = 2 - } else { - issueTmp.IssueStatus = 6 - }*/ + issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix) } issueTmp.StatusName = issueHook.Issue.StateName - err = models.UpdateIssueTemplate(&issueTmp, "status", "issue_status", "status_name") + appearErr := 0 + err = models.UpdateIssueTemplate(&issueTmp, "status", "issue_status", "status_name", "issue_label") + if err != nil { + logs.Error(err) + appearErr += 1 + } update := models.UpdateVulnCenter(&cveCenter, "is_export") + if !update { + logs.Error("update vulnCenter fail ") + appearErr += 1 + } + token := beego.AppConfig.String("gitee::git_token") + owner := beego.AppConfig.String("gitee::owner") + update = ChangeIssueLabel(token, issueTmp.Repo, issueHook.Issue.Number, owner, issueTmp.IssueLabel) + if !update { + logs.Error("update gitee issue label fail ") + appearErr++ + } + sn := models.SecurityNotice{CveId: issueTmp.CveId} + err = sn.Read("cve_id") if err != nil { return err } - if update != true { - return errors.New("update vulnCenter fail ") + switch issueTmp.IssueStatus { + case 2: + sn.AffectStatus = "Fixed" + case 6: + sn.AffectStatus = "UnAffected" + default: + sn.AffectStatus = "UnFixed" + } + err = sn.Update("affect_status") + if err != nil { + appearErr++ + logs.Error(err) + } + if appearErr > 0 { + return errors.New("handle issue state hook appear error maybe some step fail") } return nil } @@ -222,16 +270,17 @@ func handleIssueComment(payload models.CommentPayload) { if payload.Comment.User == nil { return } - issueNum := payload.Issue.Number //issue 编号 - cBody := payload.Comment.Body //评论主体 - cuAccount := payload.Comment.User.UserName //gitee 域地址 + issueNum := payload.Issue.Number //issue number + cBody := payload.Comment.Body //Comment subject + cuAccount := payload.Comment.User.UserName //gitee domain address cmdRej := beego.AppConfig.DefaultString("rejectCmd", "/reject") cmdApe := beego.AppConfig.DefaultString("approveCmd", "/approve") + cmdClose := beego.AppConfig.DefaultString("closeCmd", "/close") if issueNum == "" || cuAccount == "" || cBody == "" { return } if strings.HasPrefix(cBody, cmdRej) { - //审核拒绝 添加评论 @分析人 + //Review rejected Add comment @Analyst if !isReviewer(cuAccount) { return } @@ -251,7 +300,7 @@ func handleIssueComment(payload models.CommentPayload) { path := issueTmp.Repo taskhandler.AddCommentToIssue(fmt.Sprintf(ReviewRejectScore, issueTmp.Assignee, cuAccount), issueTmp.IssueNum, owner, path, accessToken) } else if strings.HasPrefix(cBody, cmdApe) { - //审核通过 修改评分状态 + //Approved to modify the rating status if !isReviewer(cuAccount) { return } @@ -272,6 +321,30 @@ func handleIssueComment(payload models.CommentPayload) { taskhandler.AddCommentToIssue(fmt.Sprintf(ReviewApproveScore, issueTmp.Assignee, cuAccount), issueTmp.IssueNum, owner, path, accessToken) } + } else if strings.HasPrefix(cBody, cmdClose) { + //close issue + issueTmp := models.IssueTemplate{IssueNum: issueNum} + err := models.GetIssueTemplateByColName(&issueTmp, "issue_num") + if err != nil { + logs.Error(err) + return + } + if cuAccount == issueTmp.Assignee { + //call the gitee api to change issue status + c := strings.Trim(cBody, cmdClose) + issueTmp.ErrorDescription = c + token := beego.AppConfig.String("gitee::git_token") + owner := beego.AppConfig.String("gitee::owner") + success := CloseIssue(token, issueTmp.Repo, issueNum, owner) + if success { + //update issue tpl + err = models.UpdateIssueTemplate(&issueTmp, "error_description") + if err != nil { + logs.Error(err) + return + } + } + } } else { cBody = strings.ReplaceAll(cBody, ":", ":") analysisComment(issueNum, cuAccount, cBody, &payload) @@ -285,8 +358,6 @@ func isReviewer(path string) bool { } func analysisComment(issueNum string, cuAccount string, cBody string, payload *models.CommentPayload) { - //cmdAys := beego.AppConfig.DefaultString("analysisCmd", "//不需要分析指令 - //cmdEnd := beego.AppConfig.DefaultString("endCmd", "/done") //不需要结束指令 issueTmp := models.IssueTemplate{IssueNum: issueNum} err := models.GetIssueTemplateByColName(&issueTmp, "issue_num") if err != nil { @@ -294,7 +365,6 @@ func analysisComment(issueNum string, cuAccount string, cBody string, payload *m return } canVerfy := false - //if cuAccount == issueTmp.Assignee && strings.Contains(cBody, cmdAys) { if cuAccount == issueTmp.Assignee { //is Analyst comment and content start with '/analysis' vMap := util.ExtractCommentAnalysisAllValue(cBody) @@ -367,12 +437,10 @@ func analysisComment(issueNum string, cuAccount string, cBody string, payload *m } } - //if cuAccount == issueTmp.Assignee && strings.Contains(cBody, cmdEnd) { if cuAccount == issueTmp.Assignee && canVerfy { //Check whether the data is legal accessToken := os.Getenv("GITEE_TOKEN") owner := beego.AppConfig.String("gitee::owner") - //path := beego.AppConfig.String("gitee::path") path := issueTmp.Repo if msg, tb, ok := checkIssueAnalysisComplete(&issueTmp); !ok { //send comment to issue @@ -480,12 +548,6 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok tbContent[3] = "已分析" tbContent[4] = "影响性分析说明" tbContent[5] = util.TrimStringNR(i.CveAnalysis) - //新模板没有该值 - /*if i.PrincipleAnalysis == "" { - msg = fmt.Sprintf("原理分析:%v",i.PrincipleAnalysis) - ok = false - return - }*/ if i.OpenEulerVector == "" { msg = fmt.Sprintf("openEulerVector没有填写:%v", i.OpenEulerVector) ok = false @@ -532,25 +594,6 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok tbContent[10] = "受影响版本排查" tbContent[11] = "" } - //非必填字段 - /*if i.AffectedVersion == "" { - msg = fmt.Sprintf("受影响的包:%v",i.OpenEulerVector) - ok = false - return - }*/ - //新模板没有该值 - /*if i.Solution == ""{ - msg = fmt.Sprintf("规避方案或消减措施:%v",i.OpenEulerVector) - ok = false - return - } - pkg, err := models.QueryPackageByCveId(i.CveId) - if err != nil { - return "受影响的包:",false - } - if len(pkg) == 0 { - return "受影响的包",false - }*/ tbStr = fmt.Sprintf(tb, tbContent...) return } @@ -558,7 +601,6 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok func commentUpdateIssue(issueTmp models.IssueTemplate) { accessToken := os.Getenv("GITEE_TOKEN") owner := beego.AppConfig.String("gitee::owner") - //path := beego.AppConfig.String("gitee::path") path := issueTmp.Repo if accessToken != "" && owner != "" && path != "" { cvlnCenter := models.VulnCenter{} @@ -665,7 +707,7 @@ func saveVectorData(vct string, cveID int64) error { } } if len(upFields) > 0 { - //执行更新 + //Perform update err = models.UpdateScore(&score, upFields...) if err != nil { return err @@ -682,3 +724,58 @@ func handleCommentPackage(packageStr string, cveID int64) error { } return nil } + +//CloseIssue close gitee issue +func CloseIssue(token, repo, issueNum, owner string) bool { + url := fmt.Sprintf("https://gitee.com/api/v5/repos/%s/issues/%s", owner, issueNum) + param := struct { + AccessToken string `json:"access_token"` + Repo string `json:"repo"` + State string `json:"state"` + }{token, repo, "closed"} + pj, err := json.Marshal(¶m) + if err != nil { + logs.Error(err) + return false + } + return UpdateGiteIssue(url, pj) +} + +//ChangeIssueLabel update issue label +func ChangeIssueLabel(token, repo, issueNum, owner, label string) bool { + url := fmt.Sprintf("https://gitee.com/api/v5/repos/%s/issues/%s", owner, issueNum) + param := struct { + AccessToken string `json:"access_token"` + Repo string `json:"repo"` + Label string `json:"labels"` + }{token, repo, label} + pj, err := json.Marshal(¶m) + if err != nil { + logs.Error(err) + return false + } + return UpdateGiteIssue(url, pj) +} + +//UpdateGiteIssue update gitee issue +func UpdateGiteIssue(url string, param []byte) bool { + read := bytes.NewReader(param) + req, err := http.NewRequest(http.MethodPatch, url, read) + if err != nil { + logs.Error(err) + return false + } + defer req.Body.Close() + req.Header.Set("Content-Type", "application/json;charset=UTF-8") + client := http.Client{} + resp, err := client.Do(req) + if err != nil { + logs.Error(err) + return false + } + defer resp.Body.Close() + if resp.StatusCode == 200 { + return true + } + return false +} diff --git a/controllers/issue.go b/controllers/issue.go index bb5ef08..2d47c21 100644 --- a/controllers/issue.go +++ b/controllers/issue.go @@ -11,9 +11,8 @@ type IssueOathCallbackController struct { beego.Controller } - func (c *IssueOathCallbackController) RetData(resp map[string]interface{}) { - c.Data["json"] =resp + c.Data["json"] = resp c.ServeJSON() } @@ -26,48 +25,11 @@ func (c *IssueOathCallbackController) RetData(resp map[string]interface{}) { func (c *IssueOathCallbackController) Post() { req := make(map[string]interface{}) resp := make(map[string]interface{}) - resp["errno"]=errcode.RecodeLoginErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeLoginErr) + resp["errno"] = errcode.RecodeLoginErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeLoginErr) resp["body"] = Result{} defer c.RetData(resp) - json.Unmarshal(c.Ctx.Input.RequestBody,&req) + json.Unmarshal(c.Ctx.Input.RequestBody, &req) logs.Info("登录请求参数:", &req) - //判断是否合法 - //if req["UserName"] == nil || req["PassWord"] ==nil{ - // resp["errno"]=errcode.RECODE_DATAERR - // resp["errmsg"]=errcode.RecodeText(errcode.RECODE_DATAERR) - // resp["body"] = Result{} - // logs.Error("数据错误") - // return - //} - //password := fmt.Sprintf("%s", req["PassWord"]) - //// 加密先注释 - ////password = common.DesString(password) - //if password == "" || len(password) == 0{ - // resp["errno"]=errcode.RECODE_PWDERR - // resp["errmsg"]=errcode.RecodeText(errcode.RECODE_PWDERR) - // logs.Error("密码解析错误", password) - // resp["body"] = Result{} - // return - //} - //var strc Result - //username := fmt.Sprintf("%s", req["UserName"]) - //resp_model, err := models.GetCveUserByUser(username, password) - //logs.Info(resp_model) - //if resp_model!= nil && err == nil { - // token,terr := common.GenToken(username, password) - // if terr == nil { - // strc.Key = token - // logs.Info(resp_model[0]["user_id"]) - // user_id := resp_model[0]["user_id"] - // strc.UserId = user_id - // resp["body"] = strc - // resp["errno"]=errcode.RECODE_OK - // resp["errmsg"]=errcode.RecodeText(errcode.RECODE_OK) - // models.UpdateToken(resp_model[0]["user_id"], token) - // return - // } - //} return } - diff --git a/controllers/login.go b/controllers/login.go index f9c31d2..ae3757a 100644 --- a/controllers/login.go +++ b/controllers/login.go @@ -16,12 +16,12 @@ type UserLoginController struct { } type Result struct { - Key string `json:"Token"` + Key string `json:"Token"` UserId interface{} `json:"UserId"` } func (c *UserLoginController) RetData(resp map[string]interface{}) { - c.Data["json"] =resp + c.Data["json"] = resp c.ServeJSON() } @@ -34,30 +34,30 @@ func (c *UserLoginController) RetData(resp map[string]interface{}) { func (u *UserLoginController) Post() { req := make(map[string]interface{}) resp := make(map[string]interface{}) - resp["errno"]=errcode.RecodeLoginErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeLoginErr) + resp["errno"] = errcode.RecodeLoginErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeLoginErr) resp["body"] = Result{} defer u.RetData(resp) err := json.Unmarshal(u.Ctx.Input.RequestBody, &req) - if err != nil{ + if err != nil { logs.Error(err) return } logs.Info("登录请求参数:", &req) - //判断是否合法 - if req["userName"] == nil || req["passWord"] == nil{ - resp["errno"]=errcode.RecodeDataErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeDataErr) + //Judge whether it is legal + if req["userName"] == nil || req["passWord"] == nil { + resp["errno"] = errcode.RecodeDataErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeDataErr) resp["body"] = Result{} logs.Error("数据错误") return } password := fmt.Sprintf("%s", req["passWord"]) - // 加密先注释 + // Encryption first comment //password = common.DesString(password) - if password == "" || len(password) == 0{ - resp["errno"]=errcode.RecodePwdErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodePwdErr) + if password == "" || len(password) == 0 { + resp["errno"] = errcode.RecodePwdErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodePwdErr) logs.Error("密码解析错误", password) resp["body"] = Result{} return @@ -66,7 +66,7 @@ func (u *UserLoginController) Post() { username := fmt.Sprintf("%s", req["userName"]) resp_model, err := models.GetCveUserByUser(username, password) logs.Info(resp_model) - if resp_model!= nil && err == nil { + if resp_model != nil && err == nil { token, terr := common.GenToken(username, password) if terr == nil { strc.Key = token @@ -74,8 +74,8 @@ func (u *UserLoginController) Post() { user_id := resp_model[0]["user_id"] strc.UserId = user_id resp["body"] = strc - resp["errno"]=errcode.RecodeOk - resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk) + resp["errno"] = errcode.RecodeOk + resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) expirTime := common.GetTokenExpirTime() newTime := time.Now().AddDate(0, 0, expirTime) models.UpdateToken(resp_model[0]["user_id"], token, newTime) diff --git a/controllers/packages.go b/controllers/packages.go index 444fff0..692091f 100644 --- a/controllers/packages.go +++ b/controllers/packages.go @@ -14,7 +14,7 @@ type PackagesController struct { } func (c *PackagesController) RetData(resp map[string]interface{}) { - c.Data["json"] =resp + c.Data["json"] = resp c.ServeJSON() } @@ -23,48 +23,48 @@ type PackagesInfoController struct { } func (c *PackagesInfoController) RetData(resp map[string]interface{}) { - c.Data["json"] =resp + c.Data["json"] = resp c.ServeJSON() } type PackageData struct { - Id int64 `json:"id"` - Name string `json:"name"` - Version string `json:"version"` - Release string `json:"release"` - OriginUrl string `json:"url"` - CpeName string `json:"cpeName"` - ReleaseTime string `json:"releaseTime"` - LatestVersion string `json:"latestVersion"` + Id int64 `json:"id"` + Name string `json:"name"` + Version string `json:"version"` + Release string `json:"release"` + OriginUrl string `json:"url"` + CpeName string `json:"cpeName"` + ReleaseTime string `json:"releaseTime"` + LatestVersion string `json:"latestVersion"` LatestVersionTime string `json:"latestVersionTime"` } type Provide struct { - Name string `json:"name"` + Name string `json:"name"` Requiredby []string `json:"requiredby"` } type Require struct { - Name string `json:"name"` + Name string `json:"name"` Providedby []string `json:"providedby"` } type SubPack struct { - Name string `json:"name"` + Name string `json:"name"` Provides []Provide `json:"provides"` Requires []Require `json:"requires"` } type PackageInfoData struct { - PkgName string `json:"pkgName"` - Version string `json:"version"` - Release string `json:"release"` - OriginUrl string `json:"url"` - GiteeUrl string `json:"giteeUrl"` - Summary string `json:"summary"` - Description string `json:"description"` - BuildRequired []string `json:"buildRequired"` - Subpack []SubPack `json:"subpack"` + PkgName string `json:"pkgName"` + Version string `json:"version"` + Release string `json:"release"` + OriginUrl string `json:"url"` + GiteeUrl string `json:"giteeUrl"` + Summary string `json:"summary"` + Description string `json:"description"` + BuildRequired []string `json:"buildRequired"` + Subpack []SubPack `json:"subpack"` } // @Title Get packages @@ -76,11 +76,11 @@ type PackageInfoData struct { func (u *PackagesController) Get() { req := u.Ctx.Request addr := req.RemoteAddr - logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) + logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) resp := make(map[string]interface{}) var pd []PackageData - resp["errno"]=errcode.RecodeUnknowErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr) + resp["errno"] = errcode.RecodeUnknowErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr) resp["body"] = []PackageData{} resp["totalCount"] = 0 resp["totalPage"] = 0 @@ -90,40 +90,40 @@ func (u *PackagesController) Get() { addrIp := strings.Split(addr, ":") err := models.GetIpWhite(addrIp[0], &iw) if err != nil { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } } else { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } token := u.GetString("token") if token == "" { - resp["errno"]=errcode.RecodeSessionErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr) + resp["errno"] = errcode.RecodeSessionErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr) return } else { ok := models.CheckToken(token) if !ok { - resp["errno"]=errcode.RecodeRoleErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr) + resp["errno"] = errcode.RecodeRoleErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeRoleErr) return } } PageNum, err := u.GetInt64("pageNum") if err != nil { logs.Error("pageNum, err: ", err) - resp["errno"]=errcode.RecodeParamErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr) + resp["errno"] = errcode.RecodeParamErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr) return } PageSize, err := u.GetInt64("pageSize") if err != nil { logs.Error("PageSize, err: ", err) - resp["errno"]=errcode.RecodeParamErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr) + resp["errno"] = errcode.RecodeParamErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr) return } QueryPkgName := u.GetString("queryPkgName") @@ -136,7 +136,7 @@ func (u *PackagesController) Get() { if PageSize >= totalNum { resp["totalPage"] = 1 } else { - if totalNum % PageSize == 0 { + if totalNum%PageSize == 0 { resp["totalPage"] = totalNum / PageSize } else { totalPage := totalNum / PageSize @@ -146,9 +146,8 @@ func (u *PackagesController) Get() { } resp["totalCount"] = totalNum ge, num, err := models.GetPackageList(PageSize, PageNum, QueryPkgName) - if num >0 && err == nil { + if num > 0 && err == nil { for _, g := range ge { - //logs.Info("添加第:", i, "条数据") var pg PackageData pg.Id = g.GitId pg.Release = g.Release @@ -162,17 +161,16 @@ func (u *PackagesController) Get() { pd = append(pd, pg) } resp["body"] = pd - resp["errno"]=errcode.RecodeOk - resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk) + resp["errno"] = errcode.RecodeOk + resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) } } else { - resp["errno"]=errcode.RecodeNodata - resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata) + resp["errno"] = errcode.RecodeNodata + resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata) return } } - // @Title Get packagesinfo // @Description get packagesinfo // @Param pkgName token string true @@ -182,11 +180,11 @@ func (u *PackagesController) Get() { func (u *PackagesInfoController) Get() { req := u.Ctx.Request addr := req.RemoteAddr - logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) + logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) resp := make(map[string]interface{}) var pd PackageInfoData - resp["errno"]=errcode.RecodeUnknowErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr) + resp["errno"] = errcode.RecodeUnknowErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr) resp["body"] = PackageInfoData{} defer u.RetData(resp) var iw models.IpWhite @@ -194,40 +192,40 @@ func (u *PackagesInfoController) Get() { addrIp := strings.Split(addr, ":") err := models.GetIpWhite(addrIp[0], &iw) if err != nil { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } } else { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } token := u.GetString("token") if token == "" { - resp["errno"]=errcode.RecodeSessionErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr) + resp["errno"] = errcode.RecodeSessionErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr) return } else { ok := models.CheckToken(token) if !ok { - resp["errno"]=errcode.RecodeRoleErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr) + resp["errno"] = errcode.RecodeRoleErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeRoleErr) return } } pkgName := u.GetString("pkgName") if pkgName == "" { logs.Error("pkgName, 参数错误") - resp["errno"]=errcode.RecodeParamErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr) + resp["errno"] = errcode.RecodeParamErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr) return } var gi models.GitPackageInfo err := models.GetPackageInfo(pkgName, &gi) if err != nil { - resp["errno"]=errcode.RecodeNodata - resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata) + resp["errno"] = errcode.RecodeNodata + resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata) return } pd.OriginUrl = gi.OriginUrl @@ -287,8 +285,8 @@ func (u *PackagesInfoController) Get() { } else { pd.Subpack = []SubPack{} } - resp["errno"]=errcode.RecodeOk - resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk) + resp["errno"] = errcode.RecodeOk + resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) resp["body"] = pd return -} \ No newline at end of file +} diff --git a/controllers/upload.go b/controllers/upload.go index 54c1e4a..74f3264 100644 --- a/controllers/upload.go +++ b/controllers/upload.go @@ -16,16 +16,16 @@ type UserUploadController struct { type ResultData struct { CveNum string `json:"CveNum"` - Status int `json:"Status"` + Status int `json:"Status"` } func (c *UserUploadController) RetData(resp map[string]interface{}) { - c.Data["json"] =resp + c.Data["json"] = resp c.ServeJSON() } func (c *CveErrorFeedBackController) RetData(resp map[string]interface{}) { - c.Data["json"] =resp + c.Data["json"] = resp c.ServeJSON() } @@ -34,8 +34,8 @@ type CveErrorFeedBackController struct { } type CveErrorData struct { - CveNum string `json:"cveNum"` - ErrorDesc string `json:"errorDesc"` + CveNum string `json:"cveNum"` + ErrorDesc string `json:"errorDesc"` CveUploadTime string `json:"cveUploadTime"` } @@ -48,11 +48,11 @@ type CveErrorData struct { func (u *CveErrorFeedBackController) Get() { req := u.Ctx.Request addr := req.RemoteAddr - logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) + logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body) resp := make(map[string]interface{}) var ced []CveErrorData - resp["errno"]=errcode.RecodeUnknowErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr) + resp["errno"] = errcode.RecodeUnknowErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr) resp["body"] = []CveErrorData{} defer u.RetData(resp) var iw models.IpWhite @@ -60,25 +60,25 @@ func (u *CveErrorFeedBackController) Get() { addrIp := strings.Split(addr, ":") err := models.GetIpWhite(addrIp[0], &iw) if err != nil { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } } else { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } token := u.GetString("token") if token == "" { - resp["errno"]=errcode.RecodeSessionErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr) + resp["errno"] = errcode.RecodeSessionErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr) return } else { ok := models.CheckToken(token) if !ok { - resp["errno"]=errcode.RecodeRoleErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr) + resp["errno"] = errcode.RecodeRoleErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeRoleErr) return } } @@ -105,11 +105,11 @@ func (u *CveErrorFeedBackController) Get() { ced = append(ced, ved) } resp["body"] = ced - resp["errno"]=errcode.RecodeOk - resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk) + resp["errno"] = errcode.RecodeOk + resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) } else { - resp["errno"]=errcode.RecodeNodata - resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata) + resp["errno"] = errcode.RecodeNodata + resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata) return } } @@ -125,54 +125,53 @@ func (u *UserUploadController) Post() { var ResDataList []ResultData req := u.Ctx.Request addr := req.RemoteAddr - logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header) + logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header) resp := make(map[string]interface{}) - resp["errno"]=errcode.RecodeUnknowErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr) + resp["errno"] = errcode.RecodeUnknowErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr) resp["body"] = []ResultData{} defer u.RetData(resp) - json.Unmarshal(u.Ctx.Input.RequestBody,&uploaddata) + json.Unmarshal(u.Ctx.Input.RequestBody, &uploaddata) logs.Info("Cve上传请求参数:", &uploaddata) var iw models.IpWhite if addr != "" { addrIp := strings.Split(addr, ":") err := models.GetIpWhite(addrIp[0], &iw) if err != nil { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } } else { - resp["errno"]=errcode.RecodeIpErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr) + resp["errno"] = errcode.RecodeIpErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr) return } - //判断是否合法 + //Judge whether it is legal if uploaddata.Token == "" { - resp["errno"]=errcode.RecodeSessionErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr) + resp["errno"] = errcode.RecodeSessionErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr) resp["body"] = []ResultData{} logs.Error("token 校验失败") return } else { - // 校验token + // Check token ok := models.CheckToken(uploaddata.Token) if !ok { - resp["errno"]=errcode.RecodeSessionErr - resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr) + resp["errno"] = errcode.RecodeSessionErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr) resp["body"] = []ResultData{} logs.Error("token 校验失败") return } } - if uploaddata.CveData == nil || len(uploaddata.CveData) == 0{ - resp["errno"]=errcode.RecodeNodata - resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata) + if uploaddata.CveData == nil || len(uploaddata.CveData) == 0 { + resp["errno"] = errcode.RecodeNodata + resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata) resp["body"] = []ResultData{} logs.Error("数据为空") return } - //logs.Info(uploaddata.CveData, uploaddata.Token) for _, CveDataDict := range uploaddata.CveData { defer common.Catchs() logs.Info("每一条请求参数: ", CveDataDict) @@ -316,8 +315,8 @@ func (u *UserUploadController) Post() { ResDataList = append(ResDataList, ResData) } } - resp["errno"]=errcode.RecodeOk - resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk) + resp["errno"] = errcode.RecodeOk + resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) resp["body"] = ResDataList return } diff --git a/controllers/user.go b/controllers/user.go index 2a7b360..3691759 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -116,4 +116,3 @@ func (u *UserController) Logout() { u.Data["json"] = "logout success" u.ServeJSON() } - diff --git a/doc/md/manual.md b/doc/md/manual.md index 027b9b7..e857b0e 100644 --- a/doc/md/manual.md +++ b/doc/md/manual.md @@ -11,8 +11,6 @@ issue分析注意事项 ```batch 影响性分析说明: openEuler评分: (评分和向量) - openEulerScore: - openEulerVector: 受影响版本排查(受影响/不受影响): 1.openEuler-20.03-LTS: 2.openEuler-20.09: @@ -60,6 +58,7 @@ issue分析注意事项 | ------ | ------- | ------- | | /approve | 审核通过 | security-committee-sig组成员 | | /reject | 审核拒绝 | security-committee-sig组成员 | + | /close | 关闭issue | issue 负责人 | - 注意事项 ```batch @@ -67,6 +66,12 @@ issue分析注意事项 2.以最后一位审核员评论审核的指令为最终指令 3.审核评论成功 cve-manage 会新增一条@责任人的评论 (若没有新增评论,可主动刷新页面,多次刷新后没有回复则没有审核评论成功) + 4.对于‘/close’ 指令有两种含义 + 4.1 正常关闭issue 所有流程走完要关闭issue(如分析流程没走完系统将默认为异常关闭),可以使用该指令也可以使用gitee提供的操作界面修改issue状态。 + 4.2 异常关闭issue 如发现该issue因某种原因不需要分析,则可以使用该指令关闭issue并可携带关闭原因。 + 例:/close 该CVE内容不符合事实 + (ps 关闭原因cvemanage将记录到数据库并作为反馈给cve提供方,异常原因可选不影响issue的关闭。 + 异常关闭建议最好加上异常关闭原因同时建议使用指令而不是使用giee界面操作。) ``` ### 分析导出 diff --git a/doc/sql/db_data.sql b/doc/sql/db_data.sql index 484272d..79bbf1d 100644 --- a/doc/sql/db_data.sql +++ b/doc/sql/db_data.sql @@ -28,6 +28,16 @@ CREATE TABLE `cve_email_list` ( KEY `cve_email_list_email_type` (`email_type`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; +/*Data for the table `cve_email_list` */ + +insert into `cve_email_list`(`id`,`email_name`,`email_type`) values +(1,'jjzhangcm@isoftstone.com',1), +(2,'yanxiaobing@huawei.com',1), +(3,'guoxiaoqi2@huawei.com',1), +(4,'yanglijin@huawei.com',1), +(5,'zhujianwei7@huawei.com',1), +(6,'liujingang09@huawei.com',1); + /*Table structure for table `cve_ip_white` */ DROP TABLE IF EXISTS `cve_ip_white`; @@ -41,6 +51,14 @@ CREATE TABLE `cve_ip_white` ( KEY `cve_ip_white_machine_ip` (`machine_ip`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; +/*Data for the table `cve_ip_white` */ + +insert into `cve_ip_white`(`ip_id`,`machine_name`,`machine_ip`,`access_count`) values +(1,'root','127.0.0.1',0), +(2,'guest','124.192.225.141',0), +(3,'guest','124.202.179.122',0), +(4,'root','159.138.2.2',0); + /*Table structure for table `cve_other_user` */ DROP TABLE IF EXISTS `cve_other_user`; @@ -57,6 +75,2499 @@ CREATE TABLE `cve_other_user` ( PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +/*Data for the table `cve_other_user` */ + +insert into `cve_other_user`(`user_id`,`user_name`,`pass_word`,`aes_key`,`expiration_time`,`create_time`,`update_time`,`delete_time`) values +(1,'test','123','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDMyNjk3OTQsImlhdCI6MTYwMjY2NDk5NCwiaXNzIjoiMTI3LjAuMC4xIiwic3ViIjoidXNlciB0b2tlbiJ9.IROeQHVDkPwUgaBioCLDLKU0mjA5OTSBEgYu2cK6Ndw','2020-10-17 16:43:14','2020-08-27 17:22:48','2020-10-14 16:43:14',NULL); + +/*Table structure for table `cve_package_cpe` */ + +DROP TABLE IF EXISTS `cve_package_cpe`; + +CREATE TABLE `cve_package_cpe` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `packname` varchar(512) DEFAULT NULL, + `cpe_packname` varchar(512) DEFAULT NULL, + `create_time` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `cve_package_cpe_packname` (`packname`) +) ENGINE=InnoDB AUTO_INCREMENT=2472 DEFAULT CHARSET=utf8; + +/*Data for the table `cve_package_cpe` */ + +insert into `cve_package_cpe`(`id`,`packname`,`cpe_packname`,`create_time`) values +(1,'389-ds-base','389-ds-base,389 Directory Server','2020-10-15 15:15:24'), +(2,'CUnit','CUnit','2020-10-15 15:15:24'), +(3,'CreateImage','CreateImage','2020-10-15 15:15:25'), +(4,'Cython','Cython','2020-10-15 15:15:25'), +(5,'GConf2','GConf2','2020-10-15 15:15:25'), +(6,'GeoIP','GeoIP','2020-10-15 15:15:25'), +(7,'GeoIP-GeoLite-data','GeoIP-GeoLite-data','2020-10-15 15:15:25'), +(8,'GraphicsMagick','GraphicsMagick','2020-10-15 15:15:25'), +(9,'Judy','Judy','2020-10-15 15:15:25'), +(10,'LibRaw','LibRaw','2020-10-15 15:15:25'), +(11,'ModemManager','ModemManager','2020-10-15 15:15:25'), +(12,'NetworkManager','NetworkManager','2020-10-15 15:15:25'), +(13,'NetworkManager-libreswan','NetworkManager-libreswan','2020-10-15 15:15:25'), +(14,'ORBit2','ORBit2','2020-10-15 15:15:25'), +(15,'OpenEXR','OpenEXR','2020-10-15 15:15:25'), +(16,'OpenIPMI','OpenIPMI','2020-10-15 15:15:25'), +(17,'PackageKit','PackageKit','2020-10-15 15:15:25'), +(18,'PyYAML','pyyaml','2020-10-15 15:15:25'), +(19,'Resource-Manager-for-Docker','Resource-Manager-for-Docker','2020-10-15 15:15:25'), +(20,'SDL','SDL,libsdl','2020-10-15 15:15:25'), +(21,'SDL2','SDL2','2020-10-15 15:15:25'), +(22,'SPDK','SPDK','2020-10-15 15:15:25'), +(23,'TeXamator','TeXamator','2020-10-15 15:15:25'), +(24,'Xaw3d','Xaw3d','2020-10-15 15:15:25'), +(25,'a52dec','a52dec','2020-10-15 15:15:25'), +(26,'aajohan-comfortaa-fonts','aajohan-comfortaa-fonts','2020-10-15 15:15:25'), +(27,'abattis-cantarell-fonts','abattis-cantarell-fonts','2020-10-15 15:15:25'), +(28,'abrt','abrt','2020-10-15 15:15:25'), +(29,'abrt-java-connector','abrt-java-connector','2020-10-15 15:15:25'), +(30,'accountsservice','accountsservice','2020-10-15 15:15:25'), +(31,'acl','acl','2020-10-15 15:15:25'), +(32,'acpica-tools','acpica-tools','2020-10-15 15:15:25'), +(33,'acpid','acpid','2020-10-15 15:15:25'), +(34,'adcli','adcli','2020-10-15 15:15:25'), +(35,'adobe-mappings-cmap','adobe-mappings-cmap','2020-10-15 15:15:25'), +(36,'adobe-mappings-pdf','adobe-mappings-pdf','2020-10-15 15:15:25'), +(37,'adwaita-icon-theme','adwaita-icon-theme','2020-10-15 15:15:25'), +(38,'agetty_query','agetty_query','2020-10-15 15:15:25'), +(39,'agg','agg','2020-10-15 15:15:25'), +(40,'aic94xx-firmware','aic94xx-firmware','2020-10-15 15:15:25'), +(41,'aide','aide','2020-10-15 15:15:25'), +(42,'akonadi','akonadi','2020-10-15 15:15:25'), +(43,'alacarte','alacarte','2020-10-15 15:15:25'), +(44,'alsa-firmware','alsa-firmware','2020-10-15 15:15:25'), +(45,'alsa-lib','alsa-lib','2020-10-15 15:15:25'), +(46,'alsa-plugins','alsa-plugins','2020-10-15 15:15:25'), +(47,'alsa-tools','alsa-tools','2020-10-15 15:15:25'), +(48,'alsa-utils','alsa-utils','2020-10-15 15:15:25'), +(49,'amanda','amanda','2020-10-15 15:15:25'), +(50,'anaconda','anaconda','2020-10-15 15:15:25'), +(51,'anaconda-user-help','anaconda-user-help','2020-10-15 15:15:25'), +(52,'ant','ant','2020-10-15 15:15:25'), +(53,'antlr','antlr','2020-10-15 15:15:25'), +(54,'apache-commons-cli','apache-commons-cli','2020-10-15 15:15:25'), +(55,'apache-commons-codec','apache-commons-codec','2020-10-15 15:15:25'), +(56,'apache-commons-collections','apache-commons-collections','2020-10-15 15:15:25'), +(57,'apache-commons-daemon','apache-commons-daemon','2020-10-15 15:15:25'), +(58,'apache-commons-dbcp','apache-commons-dbcp','2020-10-15 15:15:25'), +(59,'apache-commons-io','apache-commons-io','2020-10-15 15:15:25'), +(60,'apache-commons-lang','apache-commons-lang','2020-10-15 15:15:25'), +(61,'apache-commons-logging','apache-commons-logging','2020-10-15 15:15:25'), +(62,'apache-commons-pool','apache-commons-pool','2020-10-15 15:15:25'), +(63,'appict','appict','2020-10-15 15:15:25'), +(64,'apr','apr','2020-10-15 15:15:25'), +(65,'apr-util','apr-util','2020-10-15 15:15:25'), +(66,'argon2','argon2','2020-10-15 15:15:25'), +(67,'args4j','args4j','2020-10-15 15:15:25'), +(68,'arm-trusted-firmware','arm-trusted-firmware','2020-10-15 15:15:25'), +(69,'arptables','arptables','2020-10-15 15:15:25'), +(70,'arpwatch','arpwatch','2020-10-15 15:15:25'), +(71,'asciidoc','asciidoc','2020-10-15 15:15:25'), +(72,'aspell','aspell','2020-10-15 15:15:25'), +(73,'at','at','2020-10-15 15:15:25'), +(74,'at-spi2-atk','at-spi2-atk','2020-10-15 15:15:25'), +(75,'at-spi2-core','at-spi2-core','2020-10-15 15:15:25'), +(76,'atf','atf','2020-10-15 15:15:25'), +(77,'atk','atk','2020-10-15 15:15:25'), +(78,'atkmm','atkmm','2020-10-15 15:15:25'), +(79,'atlas','atlas','2020-10-15 15:15:25'), +(80,'atmel-firmware','atmel-firmware','2020-10-15 15:15:25'), +(81,'attica','attica','2020-10-15 15:15:25'), +(82,'attr','attr','2020-10-15 15:15:25'), +(83,'audiofile','audiofile','2020-10-15 15:15:25'), +(84,'audit','audit','2020-10-15 15:15:25'), +(85,'augeas','augeas','2020-10-15 15:15:25'), +(86,'authconfig','authconfig','2020-10-15 15:15:25'), +(87,'authd','authd','2020-10-15 15:15:25'), +(88,'authselect','authselect','2020-10-15 15:15:25'), +(89,'authz','authz','2020-10-15 15:15:25'), +(90,'autoconf','autoconf','2020-10-15 15:15:25'), +(91,'autoconf-archive','autoconf-archive','2020-10-15 15:15:25'), +(92,'autoconf213','autoconf213','2020-10-15 15:15:25'), +(93,'autofs','autofs','2020-10-15 15:15:25'), +(94,'autogen','autogen','2020-10-15 15:15:25'), +(95,'automake','automake','2020-10-15 15:15:25'), +(96,'automoc','automoc','2020-10-15 15:15:25'), +(97,'avahi','avahi','2020-10-15 15:15:25'), +(98,'avalon-framework','avalon-framework','2020-10-15 15:15:25'), +(99,'avalon-logkit','avalon-logkit','2020-10-15 15:15:25'), +(100,'b43-openfwwf','b43-openfwwf','2020-10-15 15:15:25'), +(101,'b43-tools','b43-tools','2020-10-15 15:15:25'), +(102,'babel','babel','2020-10-15 15:15:25'), +(103,'babeltrace','babeltrace','2020-10-15 15:15:25'), +(104,'babl','babl','2020-10-15 15:15:25'), +(105,'bacula','bacula','2020-10-15 15:15:25'), +(106,'baobab','baobab','2020-10-15 15:15:25'), +(107,'basesystem','basesystem','2020-10-15 15:15:25'), +(108,'bash','bash','2020-10-15 15:15:25'), +(109,'bash-completion','bash-completion','2020-10-15 15:15:25'), +(110,'bc','bc','2020-10-15 15:15:25'), +(111,'bcel','bcel','2020-10-15 15:15:25'), +(112,'bcm283x-firmware','bcm283x-firmware','2020-10-15 15:15:25'), +(113,'bea-stax','bea-stax','2020-10-15 15:15:26'), +(114,'bep-env','bep-env','2020-10-15 15:15:26'), +(115,'bind','bind','2020-10-15 15:15:26'), +(116,'bind-dyndb-ldap','bind-dyndb-ldap','2020-10-15 15:15:26'), +(117,'binutils','binutils','2020-10-15 15:15:26'), +(118,'biosdevname','biosdevname','2020-10-15 15:15:26'), +(119,'bison','bison','2020-10-15 15:15:26'), +(120,'bitmap-fonts','bitmap-fonts','2020-10-15 15:15:26'), +(121,'blivet-gui','blivet-gui','2020-10-15 15:15:26'), +(122,'blktrace','blktrace','2020-10-15 15:15:26'), +(123,'bltk','bltk','2020-10-15 15:15:26'), +(124,'bluez','bluez','2020-10-15 15:15:26'), +(125,'bolt','bolt','2020-10-15 15:15:26'), +(126,'boom-boot','boom-boot','2020-10-15 15:15:26'), +(127,'boost','boost','2020-10-15 15:15:26'), +(128,'bpg-fonts','bpg-fonts','2020-10-15 15:15:26'), +(129,'bridge-utils','bridge-utils','2020-10-15 15:15:26'), +(130,'brltty','brltty','2020-10-15 15:15:26'), +(131,'brotli','brotli','2020-10-15 15:15:26'), +(132,'bsp_mce_print','bsp_mce_print','2020-10-15 15:15:26'), +(133,'btrfs-progs','btrfs-progs','2020-10-15 15:15:26'), +(134,'bubblewrap','bubblewrap','2020-10-15 15:15:26'), +(135,'busybox','busybox','2020-10-15 15:15:26'), +(136,'byacc','byacc','2020-10-15 15:15:26'), +(137,'bzip2','bzip2','2020-10-15 15:15:26'), +(138,'c-ares','c-ares','2020-10-15 15:15:26'), +(139,'ca-certificates','ca-certificates','2020-10-15 15:15:26'), +(140,'cachefilesd','cachefilesd','2020-10-15 15:15:26'), +(141,'cairo','cairo','2020-10-15 15:15:26'), +(142,'cairomm','cairomm','2020-10-15 15:15:26'), +(143,'cal10n','cal10n','2020-10-15 15:15:26'), +(144,'capstone','capstone','2020-10-15 15:15:26'), +(145,'caribou','caribou','2020-10-15 15:15:26'), +(146,'ccid','ccid','2020-10-15 15:15:26'), +(147,'cdparanoia','cdparanoia','2020-10-15 15:15:26'), +(148,'cdrkit','cdrkit','2020-10-15 15:15:26'), +(149,'celt051','celt051','2020-10-15 15:15:26'), +(150,'centos-kernel','centos-kernel','2020-10-15 15:15:26'), +(151,'ceph','ceph','2020-10-15 15:15:26'), +(152,'ceph-common','ceph-common','2020-10-15 15:15:26'), +(153,'certmonger','certmonger','2020-10-15 15:15:26'), +(154,'cgdcbxd','cgdcbxd','2020-10-15 15:15:26'), +(155,'check','check','2020-10-15 15:15:26'), +(156,'checkpolicy','checkpolicy','2020-10-15 15:15:26'), +(157,'cheese','cheese','2020-10-15 15:15:26'), +(158,'chkconfig','chkconfig','2020-10-15 15:15:26'), +(159,'chrony','chrony','2020-10-15 15:15:26'), +(160,'chrpath','chrpath','2020-10-15 15:15:26'), +(161,'cifs-utils','cifs-utils','2020-10-15 15:15:26'), +(162,'cim-schema','cim-schema','2020-10-15 15:15:26'), +(163,'cjkuni-ukai-fonts','cjkuni-ukai-fonts','2020-10-15 15:15:26'), +(164,'cjkuni-uming-fonts','cjkuni-uming-fonts','2020-10-15 15:15:26'), +(165,'clang','clang','2020-10-15 15:15:26'), +(166,'cldr-emoji-annotation','cldr-emoji-annotation','2020-10-15 15:15:26'), +(167,'clevis','clevis','2020-10-15 15:15:26'), +(168,'clibcni','clibcni','2020-10-15 15:15:26'), +(169,'cloud-init','cloud-init','2020-10-15 15:15:26'), +(170,'cloud-utils','cloud-utils','2020-10-15 15:15:26'), +(171,'clucene','clucene','2020-10-15 15:15:26'), +(172,'clutter','clutter','2020-10-15 15:15:26'), +(173,'clutter-gst2','clutter-gst2','2020-10-15 15:15:26'), +(174,'clutter-gst3','clutter-gst3','2020-10-15 15:15:26'), +(175,'clutter-gtk','clutter-gtk','2020-10-15 15:15:26'), +(176,'cmake','cmake','2020-10-15 15:15:26'), +(177,'cmocka','cmocka','2020-10-15 15:15:26'), +(178,'cmpi-bindings','cmpi-bindings','2020-10-15 15:15:26'), +(179,'cockpit','cockpit','2020-10-15 15:15:26'), +(180,'codemodel','codemodel','2020-10-15 15:15:26'), +(181,'cogl','cogl','2020-10-15 15:15:26'), +(182,'color-filesystem','color-filesystem','2020-10-15 15:15:26'), +(183,'colord','colord','2020-10-15 15:15:26'), +(184,'colord-gtk','colord-gtk','2020-10-15 15:15:26'), +(185,'compat-PackageKit08','compat-PackageKit08','2020-10-15 15:15:26'), +(186,'compat-cogl114','compat-cogl114','2020-10-15 15:15:26'), +(187,'compat-colord10','compat-colord10','2020-10-15 15:15:26'), +(188,'compat-dapl','compat-dapl','2020-10-15 15:15:26'), +(189,'compat-db','compat-db','2020-10-15 15:15:26'), +(190,'compat-gcc-44','compat-gcc-44','2020-10-15 15:15:26'), +(191,'compat-glibc','compat-glibc','2020-10-15 15:15:26'), +(192,'compat-gnome-bluetooth38','compat-gnome-bluetooth38','2020-10-15 15:15:26'), +(193,'compat-gnome-desktop38','compat-gnome-desktop38','2020-10-15 15:15:26'), +(194,'compat-libcap1','compat-libcap1','2020-10-15 15:15:26'), +(195,'compat-libgdata013','compat-libgdata013','2020-10-15 15:15:26'), +(196,'compat-libgfortran-41','compat-libgfortran-41','2020-10-15 15:15:26'), +(197,'compat-libgweather3','compat-libgweather3','2020-10-15 15:15:26'), +(198,'compat-libtiff3','compat-libtiff3','2020-10-15 15:15:26'), +(199,'compat-openldap','compat-openldap','2020-10-15 15:15:26'), +(200,'compat-opensm-libs','compat-opensm-libs','2020-10-15 15:15:26'), +(201,'compat-openssl10','compat-openssl10','2020-10-15 15:15:26'), +(202,'compat-upower09','compat-upower09','2020-10-15 15:15:26'), +(203,'comps-extras','comps-extras','2020-10-15 15:15:26'), +(204,'config-minios','config-minios','2020-10-15 15:15:26'), +(205,'config-os-cloudedge','config-os-cloudedge','2020-10-15 15:15:26'), +(206,'config-os-euler','config-os-euler','2020-10-15 15:15:26'), +(207,'config-os-pangea','config-os-pangea','2020-10-15 15:15:26'), +(208,'conman','conman','2020-10-15 15:15:26'), +(209,'conntrack-tools','conntrack-tools','2020-10-15 15:15:26'), +(210,'console-setup','console-setup','2020-10-15 15:15:26'), +(211,'container-resourced','container-resourced','2020-10-15 15:15:26'), +(212,'container-selinux','container-selinux','2020-10-15 15:15:26'), +(213,'containerd','containerd','2020-10-15 15:15:26'), +(214,'control-center','control-center','2020-10-15 15:15:26'), +(215,'convmv','convmv','2020-10-15 15:15:26'), +(216,'coolkey','coolkey','2020-10-15 15:15:26'), +(217,'copy-jdk-configs','copy-jdk-configs','2020-10-15 15:15:26'), +(218,'coreutils','coreutils','2020-10-15 15:15:26'), +(219,'cpio','cpio','2020-10-15 15:15:26'), +(220,'cppcheck','cppcheck','2020-10-15 15:15:26'), +(221,'cppunit','cppunit','2020-10-15 15:15:26'), +(222,'cracklib','cracklib','2020-10-15 15:15:27'), +(223,'crash','crash','2020-10-15 15:15:27'), +(224,'crash-gcore-command','crash-gcore-command','2020-10-15 15:15:27'), +(225,'crash-trace-command','crash-trace-command','2020-10-15 15:15:27'), +(226,'crda','crda','2020-10-15 15:15:27'), +(227,'createrepo','createrepo','2020-10-15 15:15:27'), +(228,'createrepo_c','createrepo_c','2020-10-15 15:15:27'), +(229,'crid','crid,kubernetes','2020-10-15 15:15:27'), +(230,'criu','criu','2020-10-15 15:15:27'), +(231,'cronie','cronie','2020-10-15 15:15:27'), +(232,'crontabs','crontabs','2020-10-15 15:15:27'), +(233,'crypto-policies','crypto-policies','2020-10-15 15:15:27'), +(234,'crypto-utils','crypto-utils','2020-10-15 15:15:27'), +(235,'cryptsetup','cryptsetup','2020-10-15 15:15:27'), +(236,'cscope','cscope','2020-10-15 15:15:27'), +(237,'ctags','ctags','2020-10-15 15:15:27'), +(238,'culmus-fonts','culmus-fonts','2020-10-15 15:15:27'), +(239,'cups','cups','2020-10-15 15:15:27'), +(240,'cups-filters','cups-filters','2020-10-15 15:15:27'), +(241,'cups-pk-helper','cups-pk-helper','2020-10-15 15:15:27'), +(242,'curl','curl','2020-10-15 15:15:27'), +(243,'custodia','custodia','2020-10-15 15:15:27'), +(244,'custom_build_tool','custom_build_tool','2020-10-15 15:15:27'), +(245,'cvs','cvs','2020-10-15 15:15:27'), +(246,'cyrus-sasl','cyrus-sasl','2020-10-15 15:15:27'), +(247,'dapl','dapl','2020-10-15 15:15:27'), +(248,'dblatex','dblatex','2020-10-15 15:15:27'), +(249,'dbus','dbus','2020-10-15 15:15:27'), +(250,'dbus-glib','dbus-glib','2020-10-15 15:15:27'), +(251,'dbus-python','dbus-python','2020-10-15 15:15:27'), +(252,'dbusmenu-qt','dbusmenu-qt','2020-10-15 15:15:27'), +(253,'dbxtool','dbxtool','2020-10-15 15:15:27'), +(254,'dconf','dconf','2020-10-15 15:15:27'), +(255,'dconf-editor','dconf-editor','2020-10-15 15:15:27'), +(256,'dejagnu','dejagnu','2020-10-15 15:15:27'), +(257,'dejavu-fonts','dejavu-fonts','2020-10-15 15:15:27'), +(258,'deltarpm','deltarpm','2020-10-15 15:15:27'), +(259,'desktop-file-utils','desktop-file-utils','2020-10-15 15:15:27'), +(260,'device-mapper-multipath','device-mapper-multipath','2020-10-15 15:15:27'), +(261,'device-mapper-persistent-data','device-mapper-persistent-data','2020-10-15 15:15:27'), +(262,'devtoolset-6','devtoolset-6','2020-10-15 15:15:27'), +(263,'dhcp','dhcp','2020-10-15 15:15:27'), +(264,'dialog','dialog','2020-10-15 15:15:27'), +(265,'diffstat','diffstat','2020-10-15 15:15:27'), +(266,'diffutils','diffutils','2020-10-15 15:15:27'), +(267,'digest-list-tools','digest-list-tools','2020-10-15 15:15:27'), +(268,'ding-libs','ding-libs','2020-10-15 15:15:27'), +(269,'disk-partition','disk-partition','2020-10-15 15:15:27'), +(270,'dleyna-connector-dbus','dleyna-connector-dbus','2020-10-15 15:15:27'), +(271,'dleyna-core','dleyna-core','2020-10-15 15:15:27'), +(272,'dleyna-server','dleyna-server','2020-10-15 15:15:27'), +(273,'dliso-config','dliso-config','2020-10-15 15:15:27'), +(274,'dlm','dlm','2020-10-15 15:15:27'), +(275,'dmidecode','dmidecode','2020-10-15 15:15:27'), +(276,'dmraid','dmraid','2020-10-15 15:15:27'), +(277,'dnf','dnf','2020-10-15 15:15:27'), +(278,'dnf-plugins-core','dnf-plugins-core','2020-10-15 15:15:27'), +(279,'dnsmasq','dnsmasq','2020-10-15 15:15:27'), +(280,'dnssec-trigger','dnssec-trigger','2020-10-15 15:15:27'), +(281,'docbook-dtds','docbook-dtds','2020-10-15 15:15:27'), +(282,'docbook-simple','docbook-simple','2020-10-15 15:15:27'), +(283,'docbook-slides','docbook-slides','2020-10-15 15:15:27'), +(284,'docbook-style-dsssl','docbook-style-dsssl','2020-10-15 15:15:27'), +(285,'docbook-style-xsl','docbook-style-xsl','2020-10-15 15:15:27'), +(286,'docbook-utils','docbook-utils','2020-10-15 15:15:27'), +(287,'docbook2X','docbook2X','2020-10-15 15:15:27'), +(288,'docbook5-schemas','docbook5-schemas','2020-10-15 15:15:27'), +(289,'docbook5-style-xsl','docbook5-style-xsl','2020-10-15 15:15:27'), +(290,'docker','docker','2020-10-15 15:15:27'), +(291,'docker-anaconda-addon','docker-anaconda-addon','2020-10-15 15:15:27'), +(292,'docker-engine','docker-engine,engine','2020-10-15 15:15:27'), +(293,'docker-engine-selinux','docker-engine-selinux','2020-10-15 15:15:27'), +(294,'docker-lxcfs-toolkit','docker-lxcfs-toolkit','2020-10-15 15:15:27'), +(295,'docker-monitor','docker-monitor','2020-10-15 15:15:27'), +(296,'docker-runc','docker-runc','2020-10-15 15:15:27'), +(297,'docker-toolkit','docker-toolkit','2020-10-15 15:15:27'), +(298,'docker-tools','docker-tools','2020-10-15 15:15:27'), +(299,'dom4j','dom4j','2020-10-15 15:15:27'), +(300,'dos2unix','dos2unix','2020-10-15 15:15:27'), +(301,'dosfstools','dosfstools','2020-10-15 15:15:27'), +(302,'dotconf','dotconf','2020-10-15 15:15:27'), +(303,'doxygen','doxygen','2020-10-15 15:15:27'), +(304,'dpdk','DPDK,data_plane_development_kit','2020-10-15 15:15:27'), +(305,'dracut','dracut','2020-10-15 15:15:27'), +(306,'dropwatch','dropwatch','2020-10-15 15:15:27'), +(307,'drpm','drpm','2020-10-15 15:15:27'), +(308,'dstat','dstat','2020-10-15 15:15:27'), +(309,'dtc','dtc','2020-10-15 15:15:27'), +(310,'dump','dump','2020-10-15 15:15:27'), +(311,'dump_mem_tool','dump_mem_tool','2020-10-15 15:15:27'), +(312,'dumpet','dumpet','2020-10-15 15:15:27'), +(313,'dvgrab','dvgrab','2020-10-15 15:15:27'), +(314,'dwz','dwz','2020-10-15 15:15:27'), +(315,'dyninst','dyninst','2020-10-15 15:15:27'), +(316,'e2fsprogs','e2fsprogs','2020-10-15 15:15:27'), +(317,'easymock2','easymock2','2020-10-15 15:15:27'), +(318,'ebtables','ebtables','2020-10-15 15:15:27'), +(319,'ecj','ecj','2020-10-15 15:15:27'), +(320,'ed','ed','2020-10-15 15:15:27'), +(321,'edac-utils','edac-utils','2020-10-15 15:15:27'), +(322,'edk2','edk2','2020-10-15 15:15:27'), +(323,'efi-rpm-macros','efi-rpm-macros','2020-10-15 15:15:27'), +(324,'efibootmgr','efibootmgr','2020-10-15 15:15:27'), +(325,'efivar','efivar','2020-10-15 15:15:27'), +(326,'egl-wayland','egl-wayland','2020-10-15 15:15:27'), +(327,'eglexternalplatform','eglexternalplatform','2020-10-15 15:15:27'), +(328,'elara','elara,etcd','2020-10-15 15:15:27'), +(329,'elfutils','elfutils','2020-10-15 15:15:27'), +(330,'elinks','elinks','2020-10-15 15:15:27'), +(331,'emacs','emacs','2020-10-15 15:15:27'), +(332,'emacs-auctex','emacs-auctex','2020-10-15 15:15:27'), +(333,'empathy','empathy','2020-10-15 15:15:27'), +(334,'enchant','enchant','2020-10-15 15:15:27'), +(335,'enscript','enscript','2020-10-15 15:15:27'), +(336,'environment-modules','environment-modules','2020-10-15 15:15:27'), +(337,'eog','eog','2020-10-15 15:15:27'), +(338,'epydoc','epydoc','2020-10-15 15:15:27'), +(339,'esc','esc','2020-10-15 15:15:27'), +(340,'espeak','espeak','2020-10-15 15:15:27'), +(341,'esyslog','esyslog','2020-10-15 15:15:27'), +(342,'etcd','etcd','2020-10-15 15:15:28'), +(343,'ethtool','ethtool','2020-10-15 15:15:28'), +(344,'euca2ools','euca2ools','2020-10-15 15:15:28'), +(345,'euler-discv6','euler-discv6','2020-10-15 15:15:28'), +(346,'euler-tpm2-la','euler-tpm2-la','2020-10-15 15:15:28'), +(347,'euler-tpm2-tools','euler-tpm2-tools','2020-10-15 15:15:28'), +(348,'euleros-32bit','euleros-32bit','2020-10-15 15:15:28'), +(349,'euleros-certdb','euleros-certdb','2020-10-15 15:15:28'), +(350,'euleros-config','euleros-config','2020-10-15 15:15:28'), +(351,'euleros-config-9032','euleros-config-9032','2020-10-15 15:15:28'), +(352,'euleros-hwcompat','euleros-hwcompat','2020-10-15 15:15:28'), +(353,'euleros-indexhtml','euleros-indexhtml','2020-10-15 15:15:28'), +(354,'euleros-klp-template','euleros-klp-template','2020-10-15 15:15:28'), +(355,'euleros-latest-release','euleros-latest-release','2020-10-15 15:15:28'), +(356,'euleros-logos','euleros-logos','2020-10-15 15:15:28'), +(357,'euleros-logrotate','euleros-logrotate','2020-10-15 15:15:28'), +(358,'euleros-lsb','euleros-lsb','2020-10-15 15:15:28'), +(359,'euleros-release','euleros-release','2020-10-15 15:15:28'), +(360,'euleros-repos','euleros-repos','2020-10-15 15:15:28'), +(361,'euleros-toolkit','euleros-toolkit','2020-10-15 15:15:28'), +(362,'euleros-upgrade','euleros-upgrade','2020-10-15 15:15:28'), +(363,'euleros_chroot','euleros_chroot','2020-10-15 15:15:28'), +(364,'evince','evince','2020-10-15 15:15:28'), +(365,'evolution','evolution','2020-10-15 15:15:28'), +(366,'evolution-data-server','evolution-data-server','2020-10-15 15:15:28'), +(367,'exempi','exempi','2020-10-15 15:15:28'), +(368,'exiv2','exiv2','2020-10-15 15:15:28'), +(369,'expat','expat','2020-10-15 15:15:28'), +(370,'expect','expect','2020-10-15 15:15:28'), +(371,'fabtests','fabtests','2020-10-15 15:15:28'), +(372,'fakechroot','fakechroot','2020-10-15 15:15:28'), +(373,'fakeroot','fakeroot','2020-10-15 15:15:28'), +(374,'farstream','farstream','2020-10-15 15:15:28'), +(375,'farstream02','farstream02','2020-10-15 15:15:28'), +(376,'fcoe-utils','fcoe-utils','2020-10-15 15:15:28'), +(377,'fdupes','fdupes','2020-10-15 15:15:28'), +(378,'fence-agents','fence-agents','2020-10-15 15:15:28'), +(379,'fence-virt','fence-virt','2020-10-15 15:15:28'), +(380,'festival','festival','2020-10-15 15:15:28'), +(381,'festival-freebsoft-utils','festival-freebsoft-utils','2020-10-15 15:15:28'), +(382,'fetchmail','fetchmail','2020-10-15 15:15:28'), +(383,'fftw','fftw','2020-10-15 15:15:28'), +(384,'file','file','2020-10-15 15:15:28'), +(385,'file-roller','file-roller','2020-10-15 15:15:28'), +(386,'filebench','filebench','2020-10-15 15:15:28'), +(387,'filesystem','filesystem','2020-10-15 15:15:28'), +(388,'findutils','findutils','2020-10-15 15:15:28'), +(389,'finger','finger','2020-10-15 15:15:28'), +(390,'fipscheck','fipscheck','2020-10-15 15:15:28'), +(391,'firebird','firebird','2020-10-15 15:15:28'), +(392,'firewalld','firewalld','2020-10-15 15:15:28'), +(393,'firstboot','firstboot','2020-10-15 15:15:28'), +(394,'flac','flac','2020-10-15 15:15:28'), +(395,'flatpak','flatpak','2020-10-15 15:15:28'), +(396,'flex','flex','2020-10-15 15:15:28'), +(397,'flite','flite','2020-10-15 15:15:28'), +(398,'fltk','fltk','2020-10-15 15:15:28'), +(399,'folks','folks','2020-10-15 15:15:28'), +(400,'fontawesome-fonts','fontawesome-fonts','2020-10-15 15:15:28'), +(401,'fontconfig','fontconfig','2020-10-15 15:15:28'), +(402,'fontforge','fontforge','2020-10-15 15:15:28'), +(403,'fontpackages','fontpackages','2020-10-15 15:15:28'), +(404,'fonts-rpm-macros','fonts-rpm-macros','2020-10-15 15:15:28'), +(405,'fonts-tweak-tool','fonts-tweak-tool','2020-10-15 15:15:28'), +(406,'foomatic','foomatic','2020-10-15 15:15:28'), +(407,'foomatic-db','foomatic-db','2020-10-15 15:15:28'), +(408,'fpaste','fpaste','2020-10-15 15:15:28'), +(409,'fpc-srpm-macros','fpc-srpm-macros','2020-10-15 15:15:28'), +(410,'fprintd','fprintd','2020-10-15 15:15:28'), +(411,'freeglut','freeglut','2020-10-15 15:15:28'), +(412,'freeipmi','freeipmi','2020-10-15 15:15:28'), +(413,'freeradius','freeradius','2020-10-15 15:15:28'), +(414,'freerdp','freerdp','2020-10-15 15:15:28'), +(415,'freetds','freetds','2020-10-15 15:15:28'), +(416,'freetype','freetype','2020-10-15 15:15:28'), +(417,'frei0r-plugins','frei0r-plugins','2020-10-15 15:15:28'), +(418,'fribidi','fribidi','2020-10-15 15:15:28'), +(419,'fros','fros','2020-10-15 15:15:28'), +(420,'fsync','fsync','2020-10-15 15:15:28'), +(421,'ftp','ftp','2020-10-15 15:15:28'), +(422,'fuse','fuse','2020-10-15 15:15:28'), +(423,'fuseiso','fuseiso','2020-10-15 15:15:28'), +(424,'future','future','2020-10-15 15:15:28'), +(425,'fwupd','fwupd','2020-10-15 15:15:28'), +(426,'fwupdate','fwupdate','2020-10-15 15:15:28'), +(427,'fxload','fxload','2020-10-15 15:15:28'), +(428,'fxload-2008_10_13-14','fxload-2008_10_13-14','2020-10-15 15:15:28'), +(429,'gamin','gamin','2020-10-15 15:15:28'), +(430,'gavl','gavl','2020-10-15 15:15:28'), +(431,'gawk','gawk','2020-10-15 15:15:28'), +(432,'gazelle','gazelle','2020-10-15 15:15:28'), +(433,'gc','gc','2020-10-15 15:15:28'), +(434,'gcab','gcab','2020-10-15 15:15:28'), +(435,'gcc','gcc','2020-10-15 15:15:28'), +(436,'gcc-libraries','gcc-libraries','2020-10-15 15:15:28'), +(437,'gcc_secure','gcc_secure','2020-10-15 15:15:28'), +(438,'gconf-editor','gconf-editor','2020-10-15 15:15:28'), +(439,'gcr','gcr','2020-10-15 15:15:28'), +(440,'gd','gd,GD Graphics Library (LibGD),libgd','2020-10-15 15:15:28'), +(441,'gdb','gdb','2020-10-15 15:15:28'), +(442,'gdbm','gdbm','2020-10-15 15:15:28'), +(443,'gdisk','gdisk','2020-10-15 15:15:28'), +(444,'gdk-pixbuf2','gdk-pixbuf2','2020-10-15 15:15:28'), +(445,'gdm','gdm','2020-10-15 15:15:28'), +(446,'gedit','gedit','2020-10-15 15:15:28'), +(447,'gedit-plugins','gedit-plugins','2020-10-15 15:15:28'), +(448,'gegl','gegl','2020-10-15 15:15:28'), +(449,'gegl04','gegl04','2020-10-15 15:15:28'), +(450,'gengetopt','gengetopt','2020-10-15 15:15:28'), +(451,'geoclue','geoclue','2020-10-15 15:15:28'), +(452,'geoclue2','geoclue2','2020-10-15 15:15:28'), +(453,'geocode-glib','geocode-glib','2020-10-15 15:15:28'), +(454,'geolite2','geolite2','2020-10-15 15:15:28'), +(455,'geronimo-annotation','geronimo-annotation','2020-10-15 15:15:28'), +(456,'geronimo-jms','geronimo-jms','2020-10-15 15:15:28'), +(457,'geronimo-jta','geronimo-jta','2020-10-15 15:15:28'), +(458,'getcpuusage','getcpuusage','2020-10-15 15:15:28'), +(459,'gettext','gettext','2020-10-15 15:15:28'), +(460,'gflags','gflags','2020-10-15 15:15:28'), +(461,'gfs2-utils','gfs2-utils','2020-10-15 15:15:28'), +(462,'ghc-srpm-macros','ghc-srpm-macros','2020-10-15 15:15:28'), +(463,'ghostscript','ghostscript,ghostscript_ghostxps','2020-10-15 15:15:29'), +(464,'ghostscript-chinese','ghostscript-chinese','2020-10-15 15:15:29'), +(465,'ghostscript-fonts','ghostscript-fonts','2020-10-15 15:15:29'), +(466,'giflib','giflib','2020-10-15 15:15:29'), +(467,'gimp','gimp','2020-10-15 15:15:29'), +(468,'gimp-data-extras','gimp-data-extras','2020-10-15 15:15:29'), +(469,'gimp-help','gimp-help','2020-10-15 15:15:29'), +(470,'git','git','2020-10-15 15:15:29'), +(471,'gjs','gjs','2020-10-15 15:15:29'), +(472,'gl-manpages','gl-manpages','2020-10-15 15:15:29'), +(473,'glade','glade','2020-10-15 15:15:29'), +(474,'glassfish-dtd-parser','glassfish-dtd-parser','2020-10-15 15:15:29'), +(475,'glassfish-fastinfoset','glassfish-fastinfoset','2020-10-15 15:15:29'), +(476,'glassfish-jaxb','glassfish-jaxb','2020-10-15 15:15:29'), +(477,'glassfish-jaxb-api','glassfish-jaxb-api','2020-10-15 15:15:29'), +(478,'glew','glew','2020-10-15 15:15:29'), +(479,'glib','glib','2020-10-15 15:15:29'), +(480,'glib-networking','glib-networking','2020-10-15 15:15:29'), +(481,'glib2','glib2','2020-10-15 15:15:29'), +(482,'glibc','glibc','2020-10-15 15:15:29'), +(483,'glibc32','glibc32','2020-10-15 15:15:29'), +(484,'glibmm24','glibmm24','2020-10-15 15:15:29'), +(485,'glusterfs','glusterfs','2020-10-15 15:15:29'), +(486,'gmime30','gmime30','2020-10-15 15:15:29'), +(487,'gmp','gmp','2020-10-15 15:15:29'), +(488,'gnat-srpm-macros','gnat-srpm-macros','2020-10-15 15:15:29'), +(489,'gnome-abrt','gnome-abrt','2020-10-15 15:15:29'), +(490,'gnome-autoar','gnome-autoar','2020-10-15 15:15:29'), +(491,'gnome-backgrounds','gnome-backgrounds','2020-10-15 15:15:29'), +(492,'gnome-bluetooth','gnome-bluetooth','2020-10-15 15:15:29'), +(493,'gnome-boxes','gnome-boxes','2020-10-15 15:15:29'), +(494,'gnome-calculator','gnome-calculator','2020-10-15 15:15:29'), +(495,'gnome-clocks','gnome-clocks','2020-10-15 15:15:29'), +(496,'gnome-color-manager','gnome-color-manager','2020-10-15 15:15:29'), +(497,'gnome-common','gnome-common','2020-10-15 15:15:29'), +(498,'gnome-contacts','gnome-contacts','2020-10-15 15:15:29'), +(499,'gnome-control-center','gnome-control-center','2020-10-15 15:15:29'), +(500,'gnome-desktop3','gnome-desktop3','2020-10-15 15:15:29'), +(501,'gnome-devel-docs','gnome-devel-docs','2020-10-15 15:15:29'), +(502,'gnome-dictionary','gnome-dictionary','2020-10-15 15:15:29'), +(503,'gnome-disk-utility','gnome-disk-utility','2020-10-15 15:15:29'), +(504,'gnome-doc-utils','gnome-doc-utils','2020-10-15 15:15:29'), +(505,'gnome-documents','gnome-documents','2020-10-15 15:15:29'), +(506,'gnome-font-viewer','gnome-font-viewer','2020-10-15 15:15:29'), +(507,'gnome-getting-started-docs','gnome-getting-started-docs','2020-10-15 15:15:29'), +(508,'gnome-icon-theme','gnome-icon-theme','2020-10-15 15:15:29'), +(509,'gnome-icon-theme-extras','gnome-icon-theme-extras','2020-10-15 15:15:29'), +(510,'gnome-icon-theme-symbolic','gnome-icon-theme-symbolic','2020-10-15 15:15:29'), +(511,'gnome-initial-setup','gnome-initial-setup','2020-10-15 15:15:29'), +(512,'gnome-keyring','gnome-keyring','2020-10-15 15:15:29'), +(513,'gnome-menus','gnome-menus','2020-10-15 15:15:29'), +(514,'gnome-online-accounts','gnome-online-accounts','2020-10-15 15:15:29'), +(515,'gnome-online-miners','gnome-online-miners','2020-10-15 15:15:29'), +(516,'gnome-packagekit','gnome-packagekit','2020-10-15 15:15:29'), +(517,'gnome-python2','gnome-python2','2020-10-15 15:15:29'), +(518,'gnome-screenshot','gnome-screenshot','2020-10-15 15:15:29'), +(519,'gnome-session','gnome-session','2020-10-15 15:15:29'), +(520,'gnome-settings-daemon','gnome-settings-daemon','2020-10-15 15:15:29'), +(521,'gnome-shell','gnome-shell','2020-10-15 15:15:29'), +(522,'gnome-shell-extensions','gnome-shell-extensions','2020-10-15 15:15:29'), +(523,'gnome-software','gnome-software','2020-10-15 15:15:29'), +(524,'gnome-system-log','gnome-system-log','2020-10-15 15:15:29'), +(525,'gnome-system-monitor','gnome-system-monitor','2020-10-15 15:15:29'), +(526,'gnome-terminal','gnome-terminal','2020-10-15 15:15:29'), +(527,'gnome-themes-standard','gnome-themes-standard','2020-10-15 15:15:29'), +(528,'gnome-tweak-tool','gnome-tweak-tool','2020-10-15 15:15:29'), +(529,'gnome-user-docs','gnome-user-docs','2020-10-15 15:15:29'), +(530,'gnome-vfs2','gnome-vfs2','2020-10-15 15:15:29'), +(531,'gnome-video-effects','gnome-video-effects','2020-10-15 15:15:29'), +(532,'gnome-weather','gnome-weather','2020-10-15 15:15:29'), +(533,'gnote','gnote','2020-10-15 15:15:29'), +(534,'gnu-efi','gnu-efi','2020-10-15 15:15:29'), +(535,'gnu-free-fonts','gnu-free-fonts','2020-10-15 15:15:29'), +(536,'gnulib','gnulib','2020-10-15 15:15:29'), +(537,'gnupg2','gnupg2,gnupg','2020-10-15 15:15:29'), +(538,'gnuplot','gnuplot','2020-10-15 15:15:29'), +(539,'gnutls','gnutls','2020-10-15 15:15:29'), +(540,'go-srpm-macros','go-srpm-macros','2020-10-15 15:15:29'), +(541,'gobject-introspection','gobject-introspection','2020-10-15 15:15:29'), +(542,'golang','golang,go','2020-10-15 15:15:29'), +(543,'golang-github-cpuguy83-go-md2man','golang-github-cpuguy83-go-md2man','2020-10-15 15:15:29'), +(544,'golang-github-russross-blackfriday','golang-github-russross-blackfriday','2020-10-15 15:15:29'), +(545,'gom','gom','2020-10-15 15:15:29'), +(546,'google-crosextra-caladea-fonts','google-crosextra-caladea-fonts','2020-10-15 15:15:29'), +(547,'google-crosextra-carlito-fonts','google-crosextra-carlito-fonts','2020-10-15 15:15:29'), +(548,'google-droid-fonts','google-droid-fonts','2020-10-15 15:15:29'), +(549,'google-noto-cjk-fonts','google-noto-cjk-fonts','2020-10-15 15:15:29'), +(550,'google-noto-emoji-fonts','google-noto-emoji-fonts','2020-10-15 15:15:29'), +(551,'google-noto-fonts','google-noto-fonts','2020-10-15 15:15:29'), +(552,'google-roboto-slab-fonts','google-roboto-slab-fonts','2020-10-15 15:15:29'), +(553,'gperf','gperf','2020-10-15 15:15:29'), +(554,'gperftools','gperftools','2020-10-15 15:15:29'), +(555,'gpgme','gpgme','2020-10-15 15:15:29'), +(556,'gphoto2','gphoto2','2020-10-15 15:15:29'), +(557,'gpm','gpm','2020-10-15 15:15:29'), +(558,'graphite2','graphite2','2020-10-15 15:15:29'), +(559,'graphviz','graphviz','2020-10-15 15:15:29'), +(560,'grep','grep','2020-10-15 15:15:29'), +(561,'grilo','grilo','2020-10-15 15:15:29'), +(562,'grilo-plugins','grilo-plugins','2020-10-15 15:15:29'), +(563,'groff','groff','2020-10-15 15:15:29'), +(564,'grpc','grpc','2020-10-15 15:15:29'), +(565,'grub2','grub2','2020-10-15 15:15:29'), +(566,'grubby','grubby','2020-10-15 15:15:30'), +(567,'gsettings-desktop-schemas','gsettings-desktop-schemas','2020-10-15 15:15:30'), +(568,'gsl','gsl','2020-10-15 15:15:30'), +(569,'gsm','gsm','2020-10-15 15:15:30'), +(570,'gsound','gsound','2020-10-15 15:15:30'), +(571,'gspell','gspell','2020-10-15 15:15:30'), +(572,'gssdp','gssdp','2020-10-15 15:15:30'), +(573,'gssproxy','gssproxy','2020-10-15 15:15:30'), +(574,'gstreamer','gstreamer','2020-10-15 15:15:30'), +(575,'gstreamer-plugins-bad-free','gstreamer-plugins-bad-free','2020-10-15 15:15:30'), +(576,'gstreamer-plugins-base','gstreamer-plugins-base','2020-10-15 15:15:30'), +(577,'gstreamer-plugins-good','gstreamer-plugins-good','2020-10-15 15:15:30'), +(578,'gstreamer1','gstreamer1','2020-10-15 15:15:30'), +(579,'gstreamer1-plugins-bad-free','gstreamer1-plugins-bad-free','2020-10-15 15:15:30'), +(580,'gstreamer1-plugins-base','gstreamer1-plugins-base','2020-10-15 15:15:30'), +(581,'gstreamer1-plugins-good','gstreamer1-plugins-good','2020-10-15 15:15:30'), +(582,'gstreamer1-plugins-ugly-free','gstreamer1-plugins-ugly-free','2020-10-15 15:15:30'), +(583,'gtest','gtest','2020-10-15 15:15:30'), +(584,'gtk-doc','gtk-doc','2020-10-15 15:15:30'), +(585,'gtk-vnc','gtk-vnc','2020-10-15 15:15:30'), +(586,'gtk2','gtk2','2020-10-15 15:15:30'), +(587,'gtk3','gtk3','2020-10-15 15:15:30'), +(588,'gtkhtml3','gtkhtml3','2020-10-15 15:15:30'), +(589,'gtkmm24','gtkmm24','2020-10-15 15:15:30'), +(590,'gtkmm30','gtkmm30','2020-10-15 15:15:30'), +(591,'gtksourceview3','gtksourceview3','2020-10-15 15:15:30'), +(592,'gtkspell','gtkspell','2020-10-15 15:15:30'), +(593,'gtkspell3','gtkspell3','2020-10-15 15:15:30'), +(594,'gubbi-fonts','gubbi-fonts','2020-10-15 15:15:30'), +(595,'gucharmap','gucharmap','2020-10-15 15:15:30'), +(596,'guile','guile','2020-10-15 15:15:30'), +(597,'gupnp','gupnp','2020-10-15 15:15:30'), +(598,'gupnp-av','gupnp-av','2020-10-15 15:15:30'), +(599,'gupnp-dlna','gupnp-dlna','2020-10-15 15:15:30'), +(600,'gupnp-igd','gupnp-igd','2020-10-15 15:15:30'), +(601,'gutenprint','gutenprint','2020-10-15 15:15:30'), +(602,'gv','gv','2020-10-15 15:15:30'), +(603,'gvfs','gvfs','2020-10-15 15:15:30'), +(604,'gzip','gzip','2020-10-15 15:15:30'), +(605,'hamcrest','hamcrest','2020-10-15 15:15:30'), +(606,'haproxy','haproxy','2020-10-15 15:15:30'), +(607,'hardlink','hardlink','2020-10-15 15:15:30'), +(608,'harfbuzz','harfbuzz','2020-10-15 15:15:30'), +(609,'haveged','haveged','2020-10-15 15:15:30'), +(610,'hawkey','hawkey','2020-10-15 15:15:30'), +(611,'hawtjni','hawtjni','2020-10-15 15:15:30'), +(612,'hdparm','hdparm','2020-10-15 15:15:30'), +(613,'help2man','help2man','2020-10-15 15:15:30'), +(614,'hesiod','hesiod','2020-10-15 15:15:30'), +(615,'hexedit','hexedit','2020-10-15 15:15:30'), +(616,'hicolor-icon-theme','hicolor-icon-theme','2020-10-15 15:15:30'), +(617,'highlight','highlight','2020-10-15 15:15:30'), +(618,'hiredis','hiredis','2020-10-15 15:15:30'), +(619,'hivex','hivex','2020-10-15 15:15:30'), +(620,'hmaccalc','hmaccalc','2020-10-15 15:15:30'), +(621,'hostname','hostname','2020-10-15 15:15:30'), +(622,'hotpatchrec','hotpatchrec','2020-10-15 15:15:30'), +(623,'hplip','hplip','2020-10-15 15:15:30'), +(624,'hsqldb','hsqldb','2020-10-15 15:15:30'), +(625,'http-parser','http-parser','2020-10-15 15:15:30'), +(626,'httpcomponents-client','httpcomponents-client','2020-10-15 15:15:30'), +(627,'httpcomponents-core','httpcomponents-core','2020-10-15 15:15:30'), +(628,'httpd','httpd,http_server','2020-10-15 15:15:30'), +(629,'hungtask_monitor','hungtask_monitor','2020-10-15 15:15:30'), +(630,'hungtask_monitor-kmod','hungtask_monitor-kmod','2020-10-15 15:15:30'), +(631,'hunspell','hunspell','2020-10-15 15:15:30'), +(632,'hunspell-de','hunspell-de','2020-10-15 15:15:30'), +(633,'hunspell-en','hunspell-en','2020-10-15 15:15:30'), +(634,'hwdata','hwdata','2020-10-15 15:15:30'), +(635,'hwinfo','hwinfo','2020-10-15 15:15:30'), +(636,'hwloc','hwloc','2020-10-15 15:15:30'), +(637,'hws-apitools','hws-apitools','2020-10-15 15:15:30'), +(638,'hyphen','hyphen','2020-10-15 15:15:30'), +(639,'i2c-tools','i2c-tools','2020-10-15 15:15:30'), +(640,'i40e','i40e','2020-10-15 15:15:30'), +(641,'i40evf','i40evf','2020-10-15 15:15:30'), +(642,'iSulad','iSulad','2020-10-15 15:15:30'), +(643,'iSulad-img','iSulad-img','2020-10-15 15:15:30'), +(644,'iSulad-kit','iSulad-kit','2020-10-15 15:15:30'), +(645,'iavf','iavf','2020-10-15 15:15:30'), +(646,'ibus','ibus','2020-10-15 15:15:30'), +(647,'ibus-chewing','ibus-chewing','2020-10-15 15:15:30'), +(648,'ibus-hangul','ibus-hangul','2020-10-15 15:15:30'), +(649,'ibus-kkc','ibus-kkc','2020-10-15 15:15:30'), +(650,'ibus-libpinyin','ibus-libpinyin','2020-10-15 15:15:30'), +(651,'ibus-m17n','ibus-m17n','2020-10-15 15:15:30'), +(652,'ibus-qt','ibus-qt','2020-10-15 15:15:30'), +(653,'ibus-rawcode','ibus-rawcode','2020-10-15 15:15:30'), +(654,'ibus-sayura','ibus-sayura','2020-10-15 15:15:30'), +(655,'ibus-table','ibus-table','2020-10-15 15:15:30'), +(656,'ibus-table-chinese','ibus-table-chinese','2020-10-15 15:15:30'), +(657,'ibus-typing-booster','ibus-typing-booster','2020-10-15 15:15:30'), +(658,'ibutils','ibutils','2020-10-15 15:15:30'), +(659,'icedtea-web','icedtea-web','2020-10-15 15:15:30'), +(660,'icfg','icfg','2020-10-15 15:15:30'), +(661,'icoutils','icoutils','2020-10-15 15:15:30'), +(662,'icu','icu','2020-10-15 15:15:30'), +(663,'iio-sensor-proxy','iio-sensor-proxy','2020-10-15 15:15:30'), +(664,'ilmbase','ilmbase','2020-10-15 15:15:30'), +(665,'im-chooser','im-chooser','2020-10-15 15:15:30'), +(666,'ima-evm-utils','ima-evm-utils','2020-10-15 15:15:30'), +(667,'image-slim','image-slim','2020-10-15 15:15:30'), +(668,'imake','imake','2020-10-15 15:15:30'), +(669,'imsettings','imsettings','2020-10-15 15:15:30'), +(670,'indent','indent','2020-10-15 15:15:30'), +(671,'infiniband-diags','infiniband-diags','2020-10-15 15:15:30'), +(672,'infinipath-psm','infinipath-psm','2020-10-15 15:15:30'), +(673,'iniparser','iniparser','2020-10-15 15:15:30'), +(674,'initial-setup','initial-setup','2020-10-15 15:15:30'), +(675,'initscripts','initscripts','2020-10-15 15:15:30'), +(676,'inkscape','inkscape','2020-10-15 15:15:30'), +(677,'install-scripts','install-scripts','2020-10-15 15:15:30'), +(678,'install-systemd-data','install-systemd-data','2020-10-15 15:15:30'), +(679,'intltool','intltool','2020-10-15 15:15:30'), +(680,'iok','iok','2020-10-15 15:15:30'), +(681,'iotop','iotop','2020-10-15 15:15:30'), +(682,'iowatcher','iowatcher','2020-10-15 15:15:30'), +(683,'ip-conflict-check','ip-conflict-check','2020-10-15 15:15:30'), +(684,'ip-ext','ip-ext','2020-10-15 15:15:30'), +(685,'ipa','ipa','2020-10-15 15:15:30'), +(686,'ipa-gothic-fonts','ipa-gothic-fonts','2020-10-15 15:15:30'), +(687,'ipa-mincho-fonts','ipa-mincho-fonts','2020-10-15 15:15:31'), +(688,'ipa-pgothic-fonts','ipa-pgothic-fonts','2020-10-15 15:15:31'), +(689,'ipa-pmincho-fonts','ipa-pmincho-fonts','2020-10-15 15:15:31'), +(690,'ipcalc','ipcalc','2020-10-15 15:15:31'), +(691,'ipmitool','ipmitool','2020-10-15 15:15:31'), +(692,'ipnat','ipnat','2020-10-15 15:15:31'), +(693,'iproute','iproute','2020-10-15 15:15:31'), +(694,'iprutils','iprutils','2020-10-15 15:15:31'), +(695,'ipset','ipset','2020-10-15 15:15:31'), +(696,'ipsilon','ipsilon','2020-10-15 15:15:31'), +(697,'iptables','iptables','2020-10-15 15:15:31'), +(698,'iptraf-ng','iptraf-ng','2020-10-15 15:15:31'), +(699,'iptstate','iptstate','2020-10-15 15:15:31'), +(700,'iputils','iputils','2020-10-15 15:15:31'), +(701,'ipvs-fnat','ipvs-fnat','2020-10-15 15:15:31'), +(702,'ipvs-toa','ipvs-toa','2020-10-15 15:15:31'), +(703,'ipvsadm','ipvsadm','2020-10-15 15:15:31'), +(704,'ipxe','ipxe','2020-10-15 15:15:31'), +(705,'irqbalance','irqbalance','2020-10-15 15:15:31'), +(706,'irssi','irssi','2020-10-15 15:15:31'), +(707,'iscsi-initiator-utils','iscsi-initiator-utils','2020-10-15 15:15:31'), +(708,'isdn4k-utils','isdn4k-utils','2020-10-15 15:15:31'), +(709,'isns-utils','isns-utils','2020-10-15 15:15:31'), +(710,'iso-codes','iso-codes','2020-10-15 15:15:31'), +(711,'isocut','isocut','2020-10-15 15:15:31'), +(712,'isomd5sum','isomd5sum','2020-10-15 15:15:31'), +(713,'isorelax','isorelax','2020-10-15 15:15:31'), +(714,'istack-commons','istack-commons','2020-10-15 15:15:31'), +(715,'isula-build','isula-build','2020-10-15 15:15:31'), +(716,'itstool','itstool','2020-10-15 15:15:31'), +(717,'ivtv-firmware','ivtv-firmware','2020-10-15 15:15:31'), +(718,'iw','iw','2020-10-15 15:15:31'), +(719,'jackson','jackson','2020-10-15 15:15:31'), +(720,'jakarta-commons-httpclient','jakarta-commons-httpclient','2020-10-15 15:15:31'), +(721,'jakarta-oro','jakarta-oro','2020-10-15 15:15:31'), +(722,'jakarta-taglibs-standard','jakarta-taglibs-standard','2020-10-15 15:15:31'), +(723,'jansi','jansi','2020-10-15 15:15:31'), +(724,'jansi-native','jansi-native','2020-10-15 15:15:31'), +(725,'jansson','jansson','2020-10-15 15:15:31'), +(726,'jasper','jasper','2020-10-15 15:15:31'), +(727,'java-atk-wrapper','java-atk-wrapper','2020-10-15 15:15:31'), +(728,'javamail','javamail','2020-10-15 15:15:31'), +(729,'javapackages-tools','javapackages-tools','2020-10-15 15:15:31'), +(730,'javassist','javassist','2020-10-15 15:15:31'), +(731,'jaxen','jaxen','2020-10-15 15:15:31'), +(732,'jbig2dec','jbig2dec','2020-10-15 15:15:31'), +(733,'jbigkit','jbigkit','2020-10-15 15:15:31'), +(734,'jboss-annotations-1.1-api','jboss-annotations-1.1-api','2020-10-15 15:15:31'), +(735,'jdom','jdom','2020-10-15 15:15:31'), +(736,'jemalloc','jemalloc','2020-10-15 15:15:31'), +(737,'jettison','jettison','2020-10-15 15:15:31'), +(738,'jfsutils','jfsutils','2020-10-15 15:15:31'), +(739,'jimtcl','jimtcl','2020-10-15 15:15:31'), +(740,'jing-trang','jing-trang','2020-10-15 15:15:31'), +(741,'jline','jline','2020-10-15 15:15:31'), +(742,'jna','jna','2020-10-15 15:15:31'), +(743,'joda-convert','joda-convert','2020-10-15 15:15:31'), +(744,'joda-time','joda-time','2020-10-15 15:15:31'), +(745,'jomolhari-fonts','jomolhari-fonts','2020-10-15 15:15:31'), +(746,'jose','jose','2020-10-15 15:15:31'), +(747,'jq','jq','2020-10-15 15:15:31'), +(748,'js','js','2020-10-15 15:15:31'), +(749,'json-c','json-c','2020-10-15 15:15:31'), +(750,'json-glib','json-glib','2020-10-15 15:15:31'), +(751,'jsoncpp','jsoncpp','2020-10-15 15:15:31'), +(752,'jsr-311','jsr-311','2020-10-15 15:15:31'), +(753,'jss','jss','2020-10-15 15:15:31'), +(754,'junit','junit','2020-10-15 15:15:31'), +(755,'kacst-fonts','kacst-fonts','2020-10-15 15:15:31'), +(756,'kata-agent','kata-agent','2020-10-15 15:15:31'), +(757,'kata-containers','kata-containers','2020-10-15 15:15:31'), +(758,'kata-proxy','kata-proxy','2020-10-15 15:15:31'), +(759,'kata-runtime','kata-runtime','2020-10-15 15:15:31'), +(760,'kata-shim','kata-shim','2020-10-15 15:15:31'), +(761,'kbd','kbd','2020-10-15 15:15:31'), +(762,'kbox','kbox','2020-10-15 15:15:31'), +(763,'kbox-kmod','kbox-kmod','2020-10-15 15:15:31'), +(764,'kde-settings','kde-settings','2020-10-15 15:15:31'), +(765,'kdump-anaconda-addon','kdump-anaconda-addon','2020-10-15 15:15:31'), +(766,'keepalived','keepalived','2020-10-15 15:15:31'), +(767,'kernel','kernel,github_linux_kernel,Linux Kernel','2020-10-15 15:15:31'), +(768,'kernel-4.18','kernel-4.18,Linux Kernel,github_linux_kernel','2020-10-15 15:15:31'), +(769,'kexec-tools','kexec-tools','2020-10-15 15:15:31'), +(770,'keybinder3','keybinder3','2020-10-15 15:15:31'), +(771,'keyutils','keyutils','2020-10-15 15:15:31'), +(772,'khmeros-fonts','khmeros-fonts','2020-10-15 15:15:31'), +(773,'kiwi','kiwi','2020-10-15 15:15:31'), +(774,'kiwi-dlimage','kiwi-dlimage','2020-10-15 15:15:31'), +(775,'kiwi-template-euleros','kiwi-template-euleros','2020-10-15 15:15:31'), +(776,'kmem_analyzer_tools','kmem_analyzer_tools','2020-10-15 15:15:31'), +(777,'kmod','kmod','2020-10-15 15:15:31'), +(778,'kmod-megaraid_sas','kmod-megaraid_sas','2020-10-15 15:15:31'), +(779,'konkretcmpi','konkretcmpi','2020-10-15 15:15:31'), +(780,'kpatch','kpatch','2020-10-15 15:15:31'), +(781,'krb5','krb5,Kerberos 5 (krb5)','2020-10-15 15:15:31'), +(782,'ksh','ksh','2020-10-15 15:15:31'), +(783,'kurdit-unikurd-web-fonts','kurdit-unikurd-web-fonts','2020-10-15 15:15:31'), +(784,'kyua','kyua','2020-10-15 15:15:31'), +(785,'langpacks','langpacks','2020-10-15 15:15:31'), +(786,'langtable','langtable','2020-10-15 15:15:31'), +(787,'lapack','lapack','2020-10-15 15:15:31'), +(788,'lasso','lasso','2020-10-15 15:15:31'), +(789,'latencytop','latencytop','2020-10-15 15:15:31'), +(790,'latex2html','latex2html','2020-10-15 15:15:31'), +(791,'lato-fonts','lato-fonts','2020-10-15 15:15:31'), +(792,'latrace','latrace','2020-10-15 15:15:31'), +(793,'lcms2','lcms2','2020-10-15 15:15:31'), +(794,'lcr','lcr','2020-10-15 15:15:31'), +(795,'ldapjdk','ldapjdk','2020-10-15 15:15:31'), +(796,'ldns','ldns','2020-10-15 15:15:31'), +(797,'ledmon','ledmon','2020-10-15 15:15:31'), +(798,'less','less','2020-10-15 15:15:31'), +(799,'leveldb','leveldb','2020-10-15 15:15:31'), +(800,'lftp','lftp','2020-10-15 15:15:31'), +(801,'libICE','libICE','2020-10-15 15:15:31'), +(802,'libIDL','libIDL','2020-10-15 15:15:31'), +(803,'libSM','libSM','2020-10-15 15:15:31'), +(804,'libX11','libX11,libx11','2020-10-15 15:15:31'), +(805,'libXScrnSaver','libXScrnSaver','2020-10-15 15:15:32'), +(806,'libXau','libXau','2020-10-15 15:15:32'), +(807,'libXaw','libXaw','2020-10-15 15:15:32'), +(808,'libXcomposite','libXcomposite','2020-10-15 15:15:32'), +(809,'libXcursor','libXcursor','2020-10-15 15:15:32'), +(810,'libXdamage','libXdamage','2020-10-15 15:15:32'), +(811,'libXdmcp','libXdmcp','2020-10-15 15:15:32'), +(812,'libXext','libXext','2020-10-15 15:15:32'), +(813,'libXfixes','libXfixes','2020-10-15 15:15:32'), +(814,'libXfont2','libXfont2','2020-10-15 15:15:32'), +(815,'libXft','libXft','2020-10-15 15:15:32'), +(816,'libXi','libXi','2020-10-15 15:15:32'), +(817,'libXinerama','libXinerama','2020-10-15 15:15:32'), +(818,'libXmu','libXmu','2020-10-15 15:15:32'), +(819,'libXp','libXp','2020-10-15 15:15:32'), +(820,'libXpm','libXpm','2020-10-15 15:15:32'), +(821,'libXrandr','libXrandr','2020-10-15 15:15:32'), +(822,'libXrender','libXrender','2020-10-15 15:15:32'), +(823,'libXres','libXres','2020-10-15 15:15:32'), +(824,'libXt','libXt','2020-10-15 15:15:32'), +(825,'libXtst','libXtst','2020-10-15 15:15:32'), +(826,'libXv','libXv','2020-10-15 15:15:32'), +(827,'libXvMC','libXvMC','2020-10-15 15:15:32'), +(828,'libXxf86dga','libXxf86dga','2020-10-15 15:15:32'), +(829,'libXxf86misc','libXxf86misc','2020-10-15 15:15:32'), +(830,'libXxf86vm','libXxf86vm','2020-10-15 15:15:32'), +(831,'libabw','libabw','2020-10-15 15:15:32'), +(832,'libaio','libaio','2020-10-15 15:15:32'), +(833,'libalarm','libalarm','2020-10-15 15:15:32'), +(834,'libao','libao','2020-10-15 15:15:32'), +(835,'libappindicator','libappindicator','2020-10-15 15:15:32'), +(836,'libappstream-glib','libappstream-glib','2020-10-15 15:15:32'), +(837,'libarchive','libarchive','2020-10-15 15:15:32'), +(838,'libart_lgpl','libart_lgpl','2020-10-15 15:15:32'), +(839,'libassuan','libassuan','2020-10-15 15:15:32'), +(840,'libasyncns','libasyncns','2020-10-15 15:15:32'), +(841,'libatasmart','libatasmart','2020-10-15 15:15:32'), +(842,'libatomic_ops','libatomic_ops','2020-10-15 15:15:32'), +(843,'libavc1394','libavc1394','2020-10-15 15:15:32'), +(844,'libblockdev','libblockdev','2020-10-15 15:15:32'), +(845,'libbluedevil','libbluedevil','2020-10-15 15:15:32'), +(846,'libbluray','libbluray','2020-10-15 15:15:32'), +(847,'libbonobo','libbonobo','2020-10-15 15:15:32'), +(848,'libbonoboui','libbonoboui','2020-10-15 15:15:32'), +(849,'libburn','libburn','2020-10-15 15:15:32'), +(850,'libbytesize','libbytesize','2020-10-15 15:15:32'), +(851,'libcacard','libcacard','2020-10-15 15:15:32'), +(852,'libcanberra','libcanberra','2020-10-15 15:15:32'), +(853,'libcap','libcap','2020-10-15 15:15:32'), +(854,'libcap-ng','libcap-ng','2020-10-15 15:15:32'), +(855,'libcdio','libcdio','2020-10-15 15:15:32'), +(856,'libcdio-paranoia','libcdio-paranoia','2020-10-15 15:15:32'), +(857,'libcdr','libcdr','2020-10-15 15:15:32'), +(858,'libcgroup','libcgroup','2020-10-15 15:15:32'), +(859,'libchamplain','libchamplain','2020-10-15 15:15:32'), +(860,'libchewing','libchewing','2020-10-15 15:15:32'), +(861,'libclc','libclc','2020-10-15 15:15:32'), +(862,'libcmis','libcmis','2020-10-15 15:15:32'), +(863,'libcmpiutil','libcmpiutil','2020-10-15 15:15:32'), +(864,'libcomps','libcomps','2020-10-15 15:15:32'), +(865,'libconfig','libconfig','2020-10-15 15:15:32'), +(866,'libcroco','libcroco','2020-10-15 15:15:32'), +(867,'libcryptui','libcryptui','2020-10-15 15:15:32'), +(868,'libdaemon','libdaemon','2020-10-15 15:15:32'), +(869,'libdatrie','libdatrie','2020-10-15 15:15:32'), +(870,'libdb','libdb,Berkeley DB','2020-10-15 15:15:32'), +(871,'libdbi','libdbi','2020-10-15 15:15:32'), +(872,'libdbi-drivers','libdbi-drivers','2020-10-15 15:15:32'), +(873,'libdbusmenu','libdbusmenu','2020-10-15 15:15:32'), +(874,'libdmapsharing','libdmapsharing','2020-10-15 15:15:32'), +(875,'libdmx','libdmx','2020-10-15 15:15:32'), +(876,'libdnet','libdnet','2020-10-15 15:15:32'), +(877,'libdnf','libdnf','2020-10-15 15:15:32'), +(878,'libdrm','libdrm','2020-10-15 15:15:32'), +(879,'libdv','libdv','2020-10-15 15:15:32'), +(880,'libdvdnav','libdvdnav','2020-10-15 15:15:32'), +(881,'libdvdread','libdvdread','2020-10-15 15:15:32'), +(882,'libdwarf','libdwarf','2020-10-15 15:15:32'), +(883,'libeasyfc','libeasyfc','2020-10-15 15:15:32'), +(884,'libecap','libecap','2020-10-15 15:15:32'), +(885,'libedit','libedit','2020-10-15 15:15:32'), +(886,'libell','libell','2020-10-15 15:15:32'), +(887,'libepoxy','libepoxy','2020-10-15 15:15:32'), +(888,'liberation-fonts','liberation-fonts','2020-10-15 15:15:32'), +(889,'libesmtp','libesmtp','2020-10-15 15:15:32'), +(890,'libestr','libestr','2020-10-15 15:15:32'), +(891,'libetonyek','libetonyek','2020-10-15 15:15:32'), +(892,'libev','libev','2020-10-15 15:15:32'), +(893,'libevdev','libevdev','2020-10-15 15:15:32'), +(894,'libevent','libevent','2020-10-15 15:15:32'), +(895,'libevhtp','libevhtp','2020-10-15 15:15:32'), +(896,'libexif','libexif','2020-10-15 15:15:32'), +(897,'libexttextcat','libexttextcat','2020-10-15 15:15:32'), +(898,'libfabric','libfabric','2020-10-15 15:15:32'), +(899,'libfastjson','libfastjson','2020-10-15 15:15:32'), +(900,'libffi','libffi','2020-10-15 15:15:32'), +(901,'libfontenc','libfontenc','2020-10-15 15:15:32'), +(902,'libfprint','libfprint','2020-10-15 15:15:32'), +(903,'libfreehand','libfreehand','2020-10-15 15:15:32'), +(904,'libgcrypt','libgcrypt','2020-10-15 15:15:32'), +(905,'libgdata','libgdata','2020-10-15 15:15:32'), +(906,'libgdither','libgdither','2020-10-15 15:15:32'), +(907,'libgee','libgee','2020-10-15 15:15:32'), +(908,'libgee06','libgee06','2020-10-15 15:15:32'), +(909,'libgepub','libgepub','2020-10-15 15:15:32'), +(910,'libgexiv2','libgexiv2','2020-10-15 15:15:32'), +(911,'libgit2','libgit2','2020-10-15 15:15:32'), +(912,'libgit2-glib','libgit2-glib','2020-10-15 15:15:32'), +(913,'libglade2','libglade2','2020-10-15 15:15:32'), +(914,'libglvnd','libglvnd','2020-10-15 15:15:32'), +(915,'libgnome','libgnome','2020-10-15 15:15:32'), +(916,'libgnome-keyring','libgnome-keyring','2020-10-15 15:15:32'), +(917,'libgnomecanvas','libgnomecanvas','2020-10-15 15:15:32'), +(918,'libgnomekbd','libgnomekbd','2020-10-15 15:15:32'), +(919,'libgnomeui','libgnomeui','2020-10-15 15:15:32'), +(920,'libgovirt','libgovirt','2020-10-15 15:15:32'), +(921,'libgpg-error','libgpg-error','2020-10-15 15:15:32'), +(922,'libgphoto2','libgphoto2','2020-10-15 15:15:32'), +(923,'libgsf','libgsf','2020-10-15 15:15:32'), +(924,'libgtop2','libgtop2','2020-10-15 15:15:32'), +(925,'libgudev','libgudev','2020-10-15 15:15:32'), +(926,'libguestfs','libguestfs','2020-10-15 15:15:33'), +(927,'libguestfs-winsupport','libguestfs-winsupport','2020-10-15 15:15:33'), +(928,'libgusb','libgusb','2020-10-15 15:15:33'), +(929,'libgweather','libgweather','2020-10-15 15:15:33'), +(930,'libgxps','libgxps','2020-10-15 15:15:33'), +(931,'libhangul','libhangul','2020-10-15 15:15:33'), +(932,'libhbaapi','libhbaapi','2020-10-15 15:15:33'), +(933,'libhbalinux','libhbalinux','2020-10-15 15:15:33'), +(934,'libhif','libhif','2020-10-15 15:15:33'), +(935,'libhugetlbfs','libhugetlbfs','2020-10-15 15:15:33'), +(936,'libibcommon','libibcommon','2020-10-15 15:15:33'), +(937,'libibmad','libibmad','2020-10-15 15:15:33'), +(938,'libical','libical','2020-10-15 15:15:33'), +(939,'libidn','libidn','2020-10-15 15:15:33'), +(940,'libidn2','libidn2','2020-10-15 15:15:33'), +(941,'libiec61883','libiec61883','2020-10-15 15:15:33'), +(942,'libieee1284','libieee1284','2020-10-15 15:15:33'), +(943,'libijs','libijs','2020-10-15 15:15:33'), +(944,'libimagequant','libimagequant','2020-10-15 15:15:33'), +(945,'libimobiledevice','libimobiledevice','2020-10-15 15:15:33'), +(946,'libindicator','libindicator','2020-10-15 15:15:33'), +(947,'libinput','libinput','2020-10-15 15:15:33'), +(948,'libiodbc','libiodbc','2020-10-15 15:15:33'), +(949,'libipt','libipt','2020-10-15 15:15:33'), +(950,'libiptcdata','libiptcdata','2020-10-15 15:15:33'), +(951,'libiscsi','libiscsi','2020-10-15 15:15:33'), +(952,'libisofs','libisofs','2020-10-15 15:15:33'), +(953,'libjpeg-turbo','libjpeg-turbo','2020-10-15 15:15:33'), +(954,'libkcapi','libkcapi','2020-10-15 15:15:33'), +(955,'libkeepalive','libkeepalive','2020-10-15 15:15:33'), +(956,'libkkc','libkkc','2020-10-15 15:15:33'), +(957,'libksba','libksba','2020-10-15 15:15:33'), +(958,'liblangtag','liblangtag','2020-10-15 15:15:33'), +(959,'libldb','libldb','2020-10-15 15:15:33'), +(960,'libldm','libldm','2020-10-15 15:15:33'), +(961,'liblockfile','liblockfile','2020-10-15 15:15:33'), +(962,'liblognorm','liblognorm','2020-10-15 15:15:33'), +(963,'liblouis','liblouis','2020-10-15 15:15:33'), +(964,'libmatchbox','libmatchbox','2020-10-15 15:15:33'), +(965,'libmaxminddb','libmaxminddb','2020-10-15 15:15:33'), +(966,'libmbim','libmbim','2020-10-15 15:15:33'), +(967,'libmediaart','libmediaart','2020-10-15 15:15:33'), +(968,'libmemcached','libmemcached','2020-10-15 15:15:33'), +(969,'libmetalink','libmetalink','2020-10-15 15:15:33'), +(970,'libmicrohttpd','libmicrohttpd','2020-10-15 15:15:33'), +(971,'libmikmod','libmikmod','2020-10-15 15:15:33'), +(972,'libmng','libmng','2020-10-15 15:15:33'), +(973,'libmnl','libmnl','2020-10-15 15:15:33'), +(974,'libmodman','libmodman','2020-10-15 15:15:33'), +(975,'libmodulemd','libmodulemd','2020-10-15 15:15:33'), +(976,'libmpc','libmpc','2020-10-15 15:15:33'), +(977,'libmpcdec','libmpcdec','2020-10-15 15:15:33'), +(978,'libmsn','libmsn','2020-10-15 15:15:33'), +(979,'libmspack','libmspack','2020-10-15 15:15:33'), +(980,'libmspub','libmspub','2020-10-15 15:15:33'), +(981,'libmtp','libmtp','2020-10-15 15:15:33'), +(982,'libmusicbrainz5','libmusicbrainz5','2020-10-15 15:15:33'), +(983,'libmwaw','libmwaw','2020-10-15 15:15:33'), +(984,'libndp','libndp','2020-10-15 15:15:33'), +(985,'libnet','libnet','2020-10-15 15:15:33'), +(986,'libnetfilter_conntrack','libnetfilter_conntrack','2020-10-15 15:15:33'), +(987,'libnetfilter_cthelper','libnetfilter_cthelper','2020-10-15 15:15:33'), +(988,'libnetfilter_cttimeout','libnetfilter_cttimeout','2020-10-15 15:15:33'), +(989,'libnetfilter_queue','libnetfilter_queue','2020-10-15 15:15:33'), +(990,'libnetwork','libnetwork','2020-10-15 15:15:33'), +(991,'libnfnetlink','libnfnetlink','2020-10-15 15:15:33'), +(992,'libnfs','libnfs','2020-10-15 15:15:33'), +(993,'libnfsidmap','libnfsidmap','2020-10-15 15:15:33'), +(994,'libnftnl','libnftnl','2020-10-15 15:15:33'), +(995,'libnice','libnice','2020-10-15 15:15:33'), +(996,'libnl','libnl','2020-10-15 15:15:33'), +(997,'libnl3','libnl3','2020-10-15 15:15:33'), +(998,'libnotify','libnotify','2020-10-15 15:15:33'), +(999,'libnsl2','libnsl2','2020-10-15 15:15:33'), +(1000,'liboauth','liboauth','2020-10-15 15:15:33'), +(1001,'libodfgen','libodfgen','2020-10-15 15:15:33'), +(1002,'libofa','libofa','2020-10-15 15:15:33'), +(1003,'libogg','libogg','2020-10-15 15:15:33'), +(1004,'libomxil-bellagio','libomxil-bellagio','2020-10-15 15:15:33'), +(1005,'libopenraw','libopenraw','2020-10-15 15:15:33'), +(1006,'liborcus','liborcus','2020-10-15 15:15:33'), +(1007,'libosinfo','libosinfo','2020-10-15 15:15:33'), +(1008,'libotf','libotf','2020-10-15 15:15:33'), +(1009,'libpagemaker','libpagemaker','2020-10-15 15:15:33'), +(1010,'libpaper','libpaper','2020-10-15 15:15:33'), +(1011,'libpcap','libpcap','2020-10-15 15:15:33'), +(1012,'libpciaccess','libpciaccess','2020-10-15 15:15:33'), +(1013,'libpeas','libpeas','2020-10-15 15:15:33'), +(1014,'libpfm','libpfm','2020-10-15 15:15:33'), +(1015,'libpinyin','libpinyin','2020-10-15 15:15:33'), +(1016,'libpipeline','libpipeline','2020-10-15 15:15:33'), +(1017,'libplist','libplist','2020-10-15 15:15:33'), +(1018,'libpng','libpng','2020-10-15 15:15:33'), +(1019,'libpng12','libpng12','2020-10-15 15:15:33'), +(1020,'libproxy','libproxy','2020-10-15 15:15:33'), +(1021,'libpsl','libpsl','2020-10-15 15:15:33'), +(1022,'libpsm2','libpsm2','2020-10-15 15:15:33'), +(1023,'libpwquality','libpwquality','2020-10-15 15:15:33'), +(1024,'libqb','libqb','2020-10-15 15:15:33'), +(1025,'libqmi','libqmi','2020-10-15 15:15:33'), +(1026,'libquvi','libquvi','2020-10-15 15:15:33'), +(1027,'libquvi-scripts','libquvi-scripts','2020-10-15 15:15:33'), +(1028,'librabbitmq','librabbitmq','2020-10-15 15:15:33'), +(1029,'libraw1394','libraw1394','2020-10-15 15:15:33'), +(1030,'librdkafka','librdkafka','2020-10-15 15:15:33'), +(1031,'librelp','librelp','2020-10-15 15:15:33'), +(1032,'libreoffice','libreoffice','2020-10-15 15:15:33'), +(1033,'librepo','librepo','2020-10-15 15:15:33'), +(1034,'libreport','libreport','2020-10-15 15:15:33'), +(1035,'libreswan','libreswan','2020-10-15 15:15:33'), +(1036,'librevenge','librevenge','2020-10-15 15:15:33'), +(1037,'librsvg2','librsvg2','2020-10-15 15:15:33'), +(1038,'libsamplerate','libsamplerate','2020-10-15 15:15:33'), +(1039,'libsass','libsass','2020-10-15 15:15:33'), +(1040,'libseccomp','libseccomp','2020-10-15 15:15:33'), +(1041,'libsecret','libsecret','2020-10-15 15:15:33'), +(1042,'libselinux','libselinux','2020-10-15 15:15:33'), +(1043,'libsemanage','libsemanage','2020-10-15 15:15:33'), +(1044,'libsepol','libsepol','2020-10-15 15:15:33'), +(1045,'libserf','libserf','2020-10-15 15:15:34'), +(1046,'libsexy','libsexy','2020-10-15 15:15:34'), +(1047,'libshout','libshout','2020-10-15 15:15:34'), +(1048,'libsigc++20','libsigc++20','2020-10-15 15:15:34'), +(1049,'libsigsegv','libsigsegv','2020-10-15 15:15:34'), +(1050,'libsmi','libsmi','2020-10-15 15:15:34'), +(1051,'libsndfile','libsndfile','2020-10-15 15:15:34'), +(1052,'libsodium','libsodium','2020-10-15 15:15:34'), +(1053,'libsolv','libsolv','2020-10-15 15:15:34'), +(1054,'libsoup','libsoup','2020-10-15 15:15:34'), +(1055,'libspectre','libspectre','2020-10-15 15:15:34'), +(1056,'libspiro','libspiro','2020-10-15 15:15:34'), +(1057,'libsrtp','libsrtp','2020-10-15 15:15:34'), +(1058,'libssh','libssh','2020-10-15 15:15:34'), +(1059,'libssh2','libssh2','2020-10-15 15:15:34'), +(1060,'libstaroffice','libstaroffice','2020-10-15 15:15:34'), +(1061,'libstemmer','libstemmer','2020-10-15 15:15:34'), +(1062,'libstorage-mgr','libstorage-mgr','2020-10-15 15:15:34'), +(1063,'libstorage-mgr-dbg','libstorage-mgr-dbg','2020-10-15 15:15:34'), +(1064,'libstorage-uio','libstorage-uio','2020-10-15 15:15:34'), +(1065,'libstorage-uio-dbg','libstorage-uio-dbg','2020-10-15 15:15:34'), +(1066,'libstoragemgmt','libstoragemgmt','2020-10-15 15:15:34'), +(1067,'libtalloc','libtalloc','2020-10-15 15:15:34'), +(1068,'libtar','libtar','2020-10-15 15:15:34'), +(1069,'libtasn1','libtasn1','2020-10-15 15:15:34'), +(1070,'libtdb','libtdb','2020-10-15 15:15:34'), +(1071,'libteam','libteam','2020-10-15 15:15:34'), +(1072,'libtevent','libtevent','2020-10-15 15:15:34'), +(1073,'libthai','libthai','2020-10-15 15:15:34'), +(1074,'libtheora','libtheora','2020-10-15 15:15:34'), +(1075,'libtiff','libtiff','2020-10-15 15:15:34'), +(1076,'libtimezonemap','libtimezonemap','2020-10-15 15:15:34'), +(1077,'libtirpc','libtirpc','2020-10-15 15:15:34'), +(1078,'libtomcrypt','libtomcrypt','2020-10-15 15:15:34'), +(1079,'libtommath','libtommath','2020-10-15 15:15:34'), +(1080,'libtool','libtool','2020-10-15 15:15:34'), +(1081,'libtranslit','libtranslit','2020-10-15 15:15:34'), +(1082,'libunistring','libunistring','2020-10-15 15:15:34'), +(1083,'libunwind','libunwind','2020-10-15 15:15:34'), +(1084,'libusb','libusb','2020-10-15 15:15:34'), +(1085,'libusbmuxd','libusbmuxd','2020-10-15 15:15:34'), +(1086,'libusbx','libusbx','2020-10-15 15:15:34'), +(1087,'libuser','libuser','2020-10-15 15:15:34'), +(1088,'libutempter','libutempter','2020-10-15 15:15:34'), +(1089,'libuv','libuv','2020-10-15 15:15:34'), +(1090,'libva','libva','2020-10-15 15:15:34'), +(1091,'libvdpau','libvdpau','2020-10-15 15:15:34'), +(1092,'libverto','libverto','2020-10-15 15:15:34'), +(1093,'libvirt','libvirt,Libvirt','2020-10-15 15:15:34'), +(1094,'libvirt-glib','libvirt-glib','2020-10-15 15:15:34'), +(1095,'libvirt-python','libvirt-python','2020-10-15 15:15:34'), +(1096,'libvisio','libvisio','2020-10-15 15:15:34'), +(1097,'libvisual','libvisual','2020-10-15 15:15:34'), +(1098,'libvncserver','libvncserver','2020-10-15 15:15:34'), +(1099,'libvoikko','libvoikko','2020-10-15 15:15:34'), +(1100,'libvorbis','libvorbis','2020-10-15 15:15:34'), +(1101,'libvpx','libvpx','2020-10-15 15:15:34'), +(1102,'libwacom','libwacom','2020-10-15 15:15:34'), +(1103,'libwebp','libwebp','2020-10-15 15:15:34'), +(1104,'libwebsockets','libwebsockets','2020-10-15 15:15:34'), +(1105,'libwmf','libwmf','2020-10-15 15:15:34'), +(1106,'libwnck3','libwnck3','2020-10-15 15:15:34'), +(1107,'libwpd','libwpd','2020-10-15 15:15:34'), +(1108,'libwpg','libwpg','2020-10-15 15:15:34'), +(1109,'libwps','libwps','2020-10-15 15:15:34'), +(1110,'libwvstreams','libwvstreams','2020-10-15 15:15:34'), +(1111,'libx86emu','libx86emu','2020-10-15 15:15:34'), +(1112,'libxcb','libxcb','2020-10-15 15:15:34'), +(1113,'libxcrypt','libxcrypt','2020-10-15 15:15:34'), +(1114,'libxkbcommon','libxkbcommon','2020-10-15 15:15:34'), +(1115,'libxkbfile','libxkbfile','2020-10-15 15:15:34'), +(1116,'libxklavier','libxklavier','2020-10-15 15:15:34'), +(1117,'libxml2','libxml2','2020-10-15 15:15:34'), +(1118,'libxshmfence','libxshmfence','2020-10-15 15:15:34'), +(1119,'libxslt','libxslt','2020-10-15 15:15:34'), +(1120,'libyaml','libyaml','2020-10-15 15:15:34'), +(1121,'libzapojit','libzapojit','2020-10-15 15:15:34'), +(1122,'libzip','libzip','2020-10-15 15:15:34'), +(1123,'libzmf','libzmf','2020-10-15 15:15:34'), +(1124,'linkloopdetect','linkloopdetect','2020-10-15 15:15:34'), +(1125,'linux-firmware','linux-firmware','2020-10-15 15:15:34'), +(1126,'linuxconsoletools','linuxconsoletools','2020-10-15 15:15:34'), +(1127,'linuxdoc-tools','linuxdoc-tools','2020-10-15 15:15:34'), +(1128,'linuxptp','linuxptp','2020-10-15 15:15:34'), +(1129,'lklug-fonts','lklug-fonts','2020-10-15 15:15:34'), +(1130,'lksctp-tools','lksctp-tools','2020-10-15 15:15:34'), +(1131,'lldpad','lldpad','2020-10-15 15:15:34'), +(1132,'llvm','llvm','2020-10-15 15:15:34'), +(1133,'lm_sensors','lm_sensors','2020-10-15 15:15:34'), +(1134,'lmdb','lmdb','2020-10-15 15:15:34'), +(1135,'lockdev','lockdev','2020-10-15 15:15:34'), +(1136,'log4cxx','log4cxx','2020-10-15 15:15:34'), +(1137,'log4j','log4j','2020-10-15 15:15:34'), +(1138,'logrotate','logrotate','2020-10-15 15:15:34'), +(1139,'logwatch','logwatch','2020-10-15 15:15:34'), +(1140,'lohit-assamese-fonts','lohit-assamese-fonts','2020-10-15 15:15:34'), +(1141,'lohit-bengali-fonts','lohit-bengali-fonts','2020-10-15 15:15:34'), +(1142,'lohit-devanagari-fonts','lohit-devanagari-fonts','2020-10-15 15:15:34'), +(1143,'lohit-gujarati-fonts','lohit-gujarati-fonts','2020-10-15 15:15:34'), +(1144,'lohit-gurmukhi-fonts','lohit-gurmukhi-fonts','2020-10-15 15:15:34'), +(1145,'lohit-kannada-fonts','lohit-kannada-fonts','2020-10-15 15:15:34'), +(1146,'lohit-malayalam-fonts','lohit-malayalam-fonts','2020-10-15 15:15:34'), +(1147,'lohit-marathi-fonts','lohit-marathi-fonts','2020-10-15 15:15:34'), +(1148,'lohit-nepali-fonts','lohit-nepali-fonts','2020-10-15 15:15:34'), +(1149,'lohit-odia-fonts','lohit-odia-fonts','2020-10-15 15:15:34'), +(1150,'lohit-oriya-fonts','lohit-oriya-fonts','2020-10-15 15:15:34'), +(1151,'lohit-punjabi-fonts','lohit-punjabi-fonts','2020-10-15 15:15:34'), +(1152,'lohit-tamil-fonts','lohit-tamil-fonts','2020-10-15 15:15:34'), +(1153,'lohit-telugu-fonts','lohit-telugu-fonts','2020-10-15 15:15:34'), +(1154,'lorax','lorax','2020-10-15 15:15:34'), +(1155,'lpsolve','lpsolve','2020-10-15 15:15:34'), +(1156,'lrzsz','lrzsz','2020-10-15 15:15:35'), +(1157,'lshw','lshw','2020-10-15 15:15:35'), +(1158,'lsof','lsof','2020-10-15 15:15:35'), +(1159,'lsscsi','lsscsi','2020-10-15 15:15:35'), +(1160,'ltrace','ltrace','2020-10-15 15:15:35'), +(1161,'ltran','ltran','2020-10-15 15:15:35'), +(1162,'lttng-ust','lttng-ust','2020-10-15 15:15:35'), +(1163,'lua','lua','2020-10-15 15:15:35'), +(1164,'lua-expat','lua-expat','2020-10-15 15:15:35'), +(1165,'lua-filesystem','lua-filesystem','2020-10-15 15:15:35'), +(1166,'lua-json','lua-json','2020-10-15 15:15:35'), +(1167,'lua-lpeg','lua-lpeg','2020-10-15 15:15:35'), +(1168,'lua-lunit','lua-lunit','2020-10-15 15:15:35'), +(1169,'lua-posix','lua-posix','2020-10-15 15:15:35'), +(1170,'lua-socket','lua-socket','2020-10-15 15:15:35'), +(1171,'luksmeta','luksmeta','2020-10-15 15:15:35'), +(1172,'lutok','lutok','2020-10-15 15:15:35'), +(1173,'lvm2','lvm2','2020-10-15 15:15:35'), +(1174,'lvscli','lvscli','2020-10-15 15:15:35'), +(1175,'lwip','lwip','2020-10-15 15:15:35'), +(1176,'lxc','lxc','2020-10-15 15:15:35'), +(1177,'lxcfs','lxcfs','2020-10-15 15:15:35'), +(1178,'lxcfs-tools','lxcfs-tools','2020-10-15 15:15:35'), +(1179,'lxml','lxml','2020-10-15 15:15:35'), +(1180,'lxsession','lxsession','2020-10-15 15:15:35'), +(1181,'lynx','lynx','2020-10-15 15:15:35'), +(1182,'lz4','lz4','2020-10-15 15:15:35'), +(1183,'lzo','lzo','2020-10-15 15:15:35'), +(1184,'lzop','lzop','2020-10-15 15:15:35'), +(1185,'m17n-contrib','m17n-contrib','2020-10-15 15:15:35'), +(1186,'m17n-db','m17n-db','2020-10-15 15:15:35'), +(1187,'m17n-lib','m17n-lib','2020-10-15 15:15:35'), +(1188,'m2crypto','m2crypto','2020-10-15 15:15:35'), +(1189,'m4','m4','2020-10-15 15:15:35'), +(1190,'madan-fonts','madan-fonts','2020-10-15 15:15:35'), +(1191,'mailcap','mailcap','2020-10-15 15:15:35'), +(1192,'mailman','mailman','2020-10-15 15:15:35'), +(1193,'mailx','mailx','2020-10-15 15:15:35'), +(1194,'make','make','2020-10-15 15:15:35'), +(1195,'make-arm-dumprd','make-arm-dumprd','2020-10-15 15:15:35'), +(1196,'make-kdump-initrd','make-kdump-initrd','2020-10-15 15:15:35'), +(1197,'mallard-rng','mallard-rng','2020-10-15 15:15:35'), +(1198,'man-db','man-db','2020-10-15 15:15:35'), +(1199,'man-pages','man-pages','2020-10-15 15:15:35'), +(1200,'man-pages-cs','man-pages-cs','2020-10-15 15:15:35'), +(1201,'man-pages-es','man-pages-es','2020-10-15 15:15:35'), +(1202,'man-pages-fr','man-pages-fr','2020-10-15 15:15:35'), +(1203,'man-pages-it','man-pages-it','2020-10-15 15:15:35'), +(1204,'man-pages-ja','man-pages-ja','2020-10-15 15:15:35'), +(1205,'man-pages-ko','man-pages-ko','2020-10-15 15:15:35'), +(1206,'man-pages-overrides','man-pages-overrides','2020-10-15 15:15:35'), +(1207,'man-pages-pl','man-pages-pl','2020-10-15 15:15:35'), +(1208,'man-pages-ru','man-pages-ru','2020-10-15 15:15:35'), +(1209,'man-pages-zh-CN','man-pages-zh-CN','2020-10-15 15:15:35'), +(1210,'mariadb','mariadb','2020-10-15 15:15:35'), +(1211,'mariadb-connector-c','mariadb-connector-c','2020-10-15 15:15:35'), +(1212,'marisa','marisa','2020-10-15 15:15:35'), +(1213,'matchbox-window-manager','matchbox-window-manager','2020-10-15 15:15:35'), +(1214,'mc','mc','2020-10-15 15:15:35'), +(1215,'mcelog','mcelog','2020-10-15 15:15:35'), +(1216,'mcpp','mcpp','2020-10-15 15:15:35'), +(1217,'mcstrans','mcstrans','2020-10-15 15:15:35'), +(1218,'mdadm','mdadm','2020-10-15 15:15:35'), +(1219,'meanwhile','meanwhile','2020-10-15 15:15:35'), +(1220,'media-player-info','media-player-info','2020-10-15 15:15:35'), +(1221,'memcached','memcached','2020-10-15 15:15:35'), +(1222,'memstomp','memstomp','2020-10-15 15:15:35'), +(1223,'mercurial','mercurial','2020-10-15 15:15:35'), +(1224,'mesa','mesa','2020-10-15 15:15:35'), +(1225,'mesa-demos','mesa-demos','2020-10-15 15:15:35'), +(1226,'mesa-libGLU','mesa-libGLU','2020-10-15 15:15:35'), +(1227,'meson','meson','2020-10-15 15:15:35'), +(1228,'metacity','metacity','2020-10-15 15:15:35'), +(1229,'mgetty','mgetty','2020-10-15 15:15:35'), +(1230,'microcode_ctl','microcode_ctl','2020-10-15 15:15:35'), +(1231,'microdnf','microdnf','2020-10-15 15:15:35'), +(1232,'migrationtools','migrationtools','2020-10-15 15:15:35'), +(1233,'mikmod','mikmod','2020-10-15 15:15:35'), +(1234,'minicom','minicom','2020-10-15 15:15:35'), +(1235,'mipv6-daemon','mipv6-daemon','2020-10-15 15:15:35'), +(1236,'mirror-yum','mirror-yum','2020-10-15 15:15:35'), +(1237,'mirror-yum-server','mirror-yum-server','2020-10-15 15:15:35'), +(1238,'mistake-proof','mistake-proof','2020-10-15 15:15:35'), +(1239,'mkbootdisk','mkbootdisk','2020-10-15 15:15:35'), +(1240,'mkeuleros','mkeuleros','2020-10-15 15:15:35'), +(1241,'mkrepo','mkrepo','2020-10-15 15:15:35'), +(1242,'mksh','mksh','2020-10-15 15:15:35'), +(1243,'mlocate','mlocate','2020-10-15 15:15:35'), +(1244,'mmfs_sync','mmfs_sync','2020-10-15 15:15:35'), +(1245,'mmfs_utils','mmfs_utils','2020-10-15 15:15:35'), +(1246,'mobile-broadband-provider-info','mobile-broadband-provider-info','2020-10-15 15:15:35'), +(1247,'mod_auth_gssapi','mod_auth_gssapi','2020-10-15 15:15:35'), +(1248,'mod_auth_kerb','mod_auth_kerb','2020-10-15 15:15:35'), +(1249,'mod_auth_mellon','mod_auth_mellon','2020-10-15 15:15:35'), +(1250,'mod_authnz_pam','mod_authnz_pam','2020-10-15 15:15:35'), +(1251,'mod_fcgid','mod_fcgid','2020-10-15 15:15:35'), +(1252,'mod_http2','mod_http2','2020-10-15 15:15:35'), +(1253,'mod_intercept_form_submit','mod_intercept_form_submit','2020-10-15 15:15:35'), +(1254,'mod_lookup_identity','mod_lookup_identity','2020-10-15 15:15:35'), +(1255,'mod_nss','mod_nss','2020-10-15 15:15:35'), +(1256,'mod_revocator','mod_revocator','2020-10-15 15:15:35'), +(1257,'mod_security','mod_security','2020-10-15 15:15:35'), +(1258,'mod_security_crs','mod_security_crs','2020-10-15 15:15:35'), +(1259,'mod_wsgi','mod_wsgi','2020-10-15 15:15:35'), +(1260,'mokutil','mokutil','2020-10-15 15:15:35'), +(1261,'mongo-c-driver','mongo-c-driver','2020-10-15 15:15:35'), +(1262,'mongodb','mongodb','2020-10-15 15:15:35'), +(1263,'motif','motif','2020-10-15 15:15:35'), +(1264,'mousetweaks','mousetweaks','2020-10-15 15:15:35'), +(1265,'mozilla-filesystem','mozilla-filesystem','2020-10-15 15:15:35'), +(1266,'mozjs17','mozjs17','2020-10-15 15:15:35'), +(1267,'mozjs24','mozjs24','2020-10-15 15:15:35'), +(1268,'mozjs52','mozjs52','2020-10-15 15:15:35'), +(1269,'mozjs60','mozjs60','2020-10-15 15:15:35'), +(1270,'mpfr','mpfr','2020-10-15 15:15:35'), +(1271,'mpg123','mpg123','2020-10-15 15:15:35'), +(1272,'mpich','mpich','2020-10-15 15:15:35'), +(1273,'mpitests','mpitests','2020-10-15 15:15:35'), +(1274,'mrtg','mrtg','2020-10-15 15:15:35'), +(1275,'mstflint','mstflint','2020-10-15 15:15:35'), +(1276,'msv','msv','2020-10-15 15:15:36'), +(1277,'mt-st','mt-st','2020-10-15 15:15:36'), +(1278,'mtdev','mtdev','2020-10-15 15:15:36'), +(1279,'mtools','mtools','2020-10-15 15:15:36'), +(1280,'mtr','mtr','2020-10-15 15:15:36'), +(1281,'mtx','mtx','2020-10-15 15:15:36'), +(1282,'multipath-tools','multipath-tools','2020-10-15 15:15:36'), +(1283,'munge','munge','2020-10-15 15:15:36'), +(1284,'mutt','mutt','2020-10-15 15:15:36'), +(1285,'mutter','mutter','2020-10-15 15:15:36'), +(1286,'mvapich2','mvapich2','2020-10-15 15:15:36'), +(1287,'mysql-connector-java','mysql-connector-java','2020-10-15 15:15:36'), +(1288,'mysql-connector-odbc','mysql-connector-odbc','2020-10-15 15:15:36'), +(1289,'mythes','mythes','2020-10-15 15:15:36'), +(1290,'mythes-en','mythes-en','2020-10-15 15:15:36'), +(1291,'nafees-web-naskh-fonts','nafees-web-naskh-fonts','2020-10-15 15:15:36'), +(1292,'nano','nano','2020-10-15 15:15:36'), +(1293,'nasm','nasm,netwide_assembler,NASM','2020-10-15 15:15:36'), +(1294,'nautilus','nautilus','2020-10-15 15:15:36'), +(1295,'nautilus-sendto','nautilus-sendto','2020-10-15 15:15:36'), +(1296,'navilu-fonts','navilu-fonts','2020-10-15 15:15:36'), +(1297,'ncompress','ncompress','2020-10-15 15:15:36'), +(1298,'ncurses','ncurses','2020-10-15 15:15:36'), +(1299,'ndctl','ndctl','2020-10-15 15:15:36'), +(1300,'ndisc6','ndisc6','2020-10-15 15:15:36'), +(1301,'ndsend','ndsend','2020-10-15 15:15:36'), +(1302,'neon','neon','2020-10-15 15:15:36'), +(1303,'net-snmp','net-snmp','2020-10-15 15:15:36'), +(1304,'net-tools','net-tools','2020-10-15 15:15:36'), +(1305,'netcf','netcf','2020-10-15 15:15:36'), +(1306,'netcheck','netcheck','2020-10-15 15:15:36'), +(1307,'netlabel_tools','netlabel_tools','2020-10-15 15:15:36'), +(1308,'netpbm','netpbm','2020-10-15 15:15:36'), +(1309,'netsniff-ng','netsniff-ng','2020-10-15 15:15:36'), +(1310,'nettle','nettle','2020-10-15 15:15:36'), +(1311,'network-manager-applet','network-manager-applet','2020-10-15 15:15:36'), +(1312,'newt','newt','2020-10-15 15:15:36'), +(1313,'nfs-utils','nfs-utils','2020-10-15 15:15:36'), +(1314,'nfs4-acl-tools','nfs4-acl-tools','2020-10-15 15:15:36'), +(1315,'nfsometer','nfsometer','2020-10-15 15:15:36'), +(1316,'nftables','nftables','2020-10-15 15:15:36'), +(1317,'nghttp2','nghttp2','2020-10-15 15:15:36'), +(1318,'nginx','nginx','2020-10-15 15:15:36'), +(1319,'nhn-nanum-fonts','nhn-nanum-fonts','2020-10-15 15:15:36'), +(1320,'nim-srpm-macros','nim-srpm-macros','2020-10-15 15:15:36'), +(1321,'ninja-build','ninja-build','2020-10-15 15:15:36'), +(1322,'nmap','nmap','2020-10-15 15:15:36'), +(1323,'notification-daemon','notification-daemon','2020-10-15 15:15:36'), +(1324,'nototools','nototools','2020-10-15 15:15:36'), +(1325,'npth','npth','2020-10-15 15:15:36'), +(1326,'nspr','nspr','2020-10-15 15:15:36'), +(1327,'nss','nss','2020-10-15 15:15:36'), +(1328,'nss-pam-ldapd','nss-pam-ldapd','2020-10-15 15:15:36'), +(1329,'nss-pem','nss-pem','2020-10-15 15:15:36'), +(1330,'nss-softokn','nss-softokn','2020-10-15 15:15:36'), +(1331,'nss-util','nss-util','2020-10-15 15:15:36'), +(1332,'nss_compat_ossl','nss_compat_ossl','2020-10-15 15:15:36'), +(1333,'nss_nis','nss_nis','2020-10-15 15:15:36'), +(1334,'nss_wrapper','nss_wrapper','2020-10-15 15:15:36'), +(1335,'ntfs-3g','ntfs-3g','2020-10-15 15:15:36'), +(1336,'ntp','ntp,data_ontap','2020-10-15 15:15:36'), +(1337,'ntpstat','ntpstat','2020-10-15 15:15:36'), +(1338,'numactl','numactl','2020-10-15 15:15:36'), +(1339,'numad','numad','2020-10-15 15:15:36'), +(1340,'numpy','numpy','2020-10-15 15:15:36'), +(1341,'nuxwdog','nuxwdog','2020-10-15 15:15:36'), +(1342,'nvme-cli','nvme-cli','2020-10-15 15:15:36'), +(1343,'nvmetcli','nvmetcli','2020-10-15 15:15:36'), +(1344,'nvram_sysinfo','nvram_sysinfo','2020-10-15 15:15:36'), +(1345,'obex-data-server','obex-data-server','2020-10-15 15:15:36'), +(1346,'obexd','obexd','2020-10-15 15:15:36'), +(1347,'objectweb-asm','objectweb-asm','2020-10-15 15:15:36'), +(1348,'obs-env','obs-env','2020-10-15 15:15:36'), +(1349,'ocaml','ocaml','2020-10-15 15:15:36'), +(1350,'ocaml-srpm-macros','ocaml-srpm-macros','2020-10-15 15:15:36'), +(1351,'oci-systemd-hook','oci-systemd-hook','2020-10-15 15:15:36'), +(1352,'oddjob','oddjob','2020-10-15 15:15:36'), +(1353,'ongres-scram','ongres-scram','2020-10-15 15:15:36'), +(1354,'oniguruma','oniguruma','2020-10-15 15:15:36'), +(1355,'open-iscsi','open-iscsi','2020-10-15 15:15:36'), +(1356,'open-isns','open-isns','2020-10-15 15:15:36'), +(1357,'open-sans-fonts','open-sans-fonts','2020-10-15 15:15:36'), +(1358,'openEuler-rpm-config','openEuler-rpm-config','2020-10-15 15:15:36'), +(1359,'openblas','openblas','2020-10-15 15:15:36'), +(1360,'openblas-srpm-macros','openblas-srpm-macros','2020-10-15 15:15:36'), +(1361,'opencc','opencc','2020-10-15 15:15:36'), +(1362,'opencryptoki','opencryptoki','2020-10-15 15:15:36'), +(1363,'opendnssec','opendnssec','2020-10-15 15:15:36'), +(1364,'openhpi','openhpi','2020-10-15 15:15:36'), +(1365,'openjade','openjade','2020-10-15 15:15:36'), +(1366,'openjpeg','openjpeg','2020-10-15 15:15:36'), +(1367,'openjpeg2','openjpeg2','2020-10-15 15:15:36'), +(1368,'openldap','openldap','2020-10-15 15:15:36'), +(1369,'openlmi-networking','openlmi-networking','2020-10-15 15:15:36'), +(1370,'openlmi-providers','openlmi-providers','2020-10-15 15:15:36'), +(1371,'openlmi-storage','openlmi-storage','2020-10-15 15:15:36'), +(1372,'openlmi-tools','openlmi-tools','2020-10-15 15:15:36'), +(1373,'openmpi','openmpi','2020-10-15 15:15:36'), +(1374,'openobex','openobex','2020-10-15 15:15:36'), +(1375,'opensc','opensc','2020-10-15 15:15:36'), +(1376,'openscap','openscap','2020-10-15 15:15:36'), +(1377,'openslp','openslp','2020-10-15 15:15:36'), +(1378,'opensm','opensm','2020-10-15 15:15:36'), +(1379,'opensp','opensp','2020-10-15 15:15:36'), +(1380,'openssh','openssh','2020-10-15 15:15:36'), +(1381,'openssl','openssl,OpenSSL','2020-10-15 15:15:36'), +(1382,'openssl-SMx','openssl-SMx','2020-10-15 15:15:36'), +(1383,'openssl-pkcs11','openssl-pkcs11','2020-10-15 15:15:36'), +(1384,'openvswitch','openvswitch','2020-10-15 15:15:36'), +(1385,'openwsman','openwsman','2020-10-15 15:15:36'), +(1386,'oprofile','oprofile','2020-10-15 15:15:37'), +(1387,'opus','opus','2020-10-15 15:15:37'), +(1388,'orc','orc','2020-10-15 15:15:37'), +(1389,'orca','orca','2020-10-15 15:15:37'), +(1390,'ortp','ortp','2020-10-15 15:15:37'), +(1391,'os-health-check','os-health-check','2020-10-15 15:15:37'), +(1392,'os-prober','os-prober','2020-10-15 15:15:37'), +(1393,'os_die_handler','os_die_handler','2020-10-15 15:15:37'), +(1394,'os_feeddog','os_feeddog','2020-10-15 15:15:37'), +(1395,'os_panic_handler','os_panic_handler','2020-10-15 15:15:37'), +(1396,'oscap-anaconda-addon','oscap-anaconda-addon','2020-10-15 15:15:37'), +(1397,'osinfo-db','osinfo-db','2020-10-15 15:15:37'), +(1398,'osinfo-db-tools','osinfo-db-tools','2020-10-15 15:15:37'), +(1399,'osp_bsp_reboot','osp_bsp_reboot','2020-10-15 15:15:37'), +(1400,'ostree','ostree','2020-10-15 15:15:37'), +(1401,'overpass-fonts','overpass-fonts','2020-10-15 15:15:37'), +(1402,'oxygen-gtk2','oxygen-gtk2','2020-10-15 15:15:37'), +(1403,'oxygen-gtk3','oxygen-gtk3','2020-10-15 15:15:37'), +(1404,'oxygen-icon-theme','oxygen-icon-theme','2020-10-15 15:15:37'), +(1405,'p11-kit','p11-kit','2020-10-15 15:15:37'), +(1406,'pakchois','pakchois','2020-10-15 15:15:37'), +(1407,'paktype-naqsh-fonts','paktype-naqsh-fonts','2020-10-15 15:15:37'), +(1408,'paktype-naskh-basic-fonts','paktype-naskh-basic-fonts','2020-10-15 15:15:37'), +(1409,'paktype-tehreer-fonts','paktype-tehreer-fonts','2020-10-15 15:15:37'), +(1410,'pam','pam','2020-10-15 15:15:37'), +(1411,'pam_krb5','pam_krb5','2020-10-15 15:15:37'), +(1412,'pam_pkcs11','pam_pkcs11','2020-10-15 15:15:37'), +(1413,'pango','pango','2020-10-15 15:15:37'), +(1414,'pangomm','pangomm','2020-10-15 15:15:37'), +(1415,'papi','papi','2020-10-15 15:15:37'), +(1416,'paps','paps','2020-10-15 15:15:37'), +(1417,'paratype-pt-sans-fonts','paratype-pt-sans-fonts','2020-10-15 15:15:37'), +(1418,'parted','parted','2020-10-15 15:15:37'), +(1419,'passivetex','passivetex','2020-10-15 15:15:37'), +(1420,'passwd','passwd','2020-10-15 15:15:37'), +(1421,'patch','patch','2020-10-15 15:15:37'), +(1422,'patchutils','patchutils','2020-10-15 15:15:37'), +(1423,'pax','pax','2020-10-15 15:15:37'), +(1424,'pciutils','pciutils','2020-10-15 15:15:37'), +(1425,'pcp','pcp','2020-10-15 15:15:37'), +(1426,'pcre','pcre','2020-10-15 15:15:37'), +(1427,'pcre2','pcre2','2020-10-15 15:15:37'), +(1428,'pcsc-lite','pcsc-lite','2020-10-15 15:15:37'), +(1429,'pcsc-lite-ccid','pcsc-lite-ccid','2020-10-15 15:15:37'), +(1430,'perftest','perftest','2020-10-15 15:15:37'), +(1431,'perl','perl','2020-10-15 15:15:37'), +(1432,'perl-Algorithm-Diff','perl-Algorithm-Diff','2020-10-15 15:15:37'), +(1433,'perl-Archive-Extract','perl-Archive-Extract','2020-10-15 15:15:37'), +(1434,'perl-Archive-Tar','perl-Archive-Tar','2020-10-15 15:15:37'), +(1435,'perl-Archive-Zip','perl-Archive-Zip','2020-10-15 15:15:37'), +(1436,'perl-Authen-SASL','perl-Authen-SASL','2020-10-15 15:15:37'), +(1437,'perl-B-Debug','perl-B-Debug','2020-10-15 15:15:37'), +(1438,'perl-B-Lint','perl-B-Lint','2020-10-15 15:15:37'), +(1439,'perl-Bit-Vector','perl-Bit-Vector','2020-10-15 15:15:37'), +(1440,'perl-Business-ISBN','perl-Business-ISBN','2020-10-15 15:15:37'), +(1441,'perl-Business-ISBN-Data','perl-Business-ISBN-Data','2020-10-15 15:15:37'), +(1442,'perl-CGI','perl-CGI','2020-10-15 15:15:37'), +(1443,'perl-CPAN','perl-CPAN','2020-10-15 15:15:37'), +(1444,'perl-CPAN-Meta','perl-CPAN-Meta','2020-10-15 15:15:37'), +(1445,'perl-CPAN-Meta-Check','perl-CPAN-Meta-Check','2020-10-15 15:15:37'), +(1446,'perl-CPAN-Meta-Requirements','perl-CPAN-Meta-Requirements','2020-10-15 15:15:37'), +(1447,'perl-CPAN-Meta-YAML','perl-CPAN-Meta-YAML','2020-10-15 15:15:37'), +(1448,'perl-Capture-Tiny','perl-Capture-Tiny','2020-10-15 15:15:37'), +(1449,'perl-Carp','perl-Carp','2020-10-15 15:15:37'), +(1450,'perl-Carp-Clan','perl-Carp-Clan','2020-10-15 15:15:37'), +(1451,'perl-Class-ISA','perl-Class-ISA','2020-10-15 15:15:37'), +(1452,'perl-Class-Inspector','perl-Class-Inspector','2020-10-15 15:15:37'), +(1453,'perl-Class-Method-Modifiers','perl-Class-Method-Modifiers','2020-10-15 15:15:37'), +(1454,'perl-Class-Singleton','perl-Class-Singleton','2020-10-15 15:15:37'), +(1455,'perl-Class-XSAccessor','perl-Class-XSAccessor','2020-10-15 15:15:37'), +(1456,'perl-Compress-Bzip2','perl-Compress-Bzip2','2020-10-15 15:15:37'), +(1457,'perl-Compress-Raw-Bzip2','perl-Compress-Raw-Bzip2','2020-10-15 15:15:37'), +(1458,'perl-Compress-Raw-Zlib','perl-Compress-Raw-Zlib','2020-10-15 15:15:37'), +(1459,'perl-Config-AutoConf','perl-Config-AutoConf','2020-10-15 15:15:37'), +(1460,'perl-Config-IniFiles','perl-Config-IniFiles','2020-10-15 15:15:37'), +(1461,'perl-Config-Perl-V','perl-Config-Perl-V','2020-10-15 15:15:37'), +(1462,'perl-Convert-ASN1','perl-Convert-ASN1','2020-10-15 15:15:37'), +(1463,'perl-Crypt-OpenSSL-Bignum','perl-Crypt-OpenSSL-Bignum','2020-10-15 15:15:37'), +(1464,'perl-Crypt-OpenSSL-Random','perl-Crypt-OpenSSL-Random','2020-10-15 15:15:37'), +(1465,'perl-DBD-MySQL','perl-DBD-MySQL','2020-10-15 15:15:37'), +(1466,'perl-DBD-SQLite','perl-DBD-SQLite','2020-10-15 15:15:37'), +(1467,'perl-DBI','perl-DBI,dbi','2020-10-15 15:15:37'), +(1468,'perl-DB_File','perl-DB_File','2020-10-15 15:15:37'), +(1469,'perl-Data-Dump','perl-Data-Dump','2020-10-15 15:15:37'), +(1470,'perl-Data-Dumper','perl-Data-Dumper','2020-10-15 15:15:37'), +(1471,'perl-Data-OptList','perl-Data-OptList','2020-10-15 15:15:37'), +(1472,'perl-Data-Section','perl-Data-Section','2020-10-15 15:15:37'), +(1473,'perl-Data-UUID','perl-Data-UUID','2020-10-15 15:15:37'), +(1474,'perl-Date-Calc','perl-Date-Calc','2020-10-15 15:15:37'), +(1475,'perl-Date-Manip','perl-Date-Manip','2020-10-15 15:15:37'), +(1476,'perl-Devel-CheckLib','perl-Devel-CheckLib','2020-10-15 15:15:37'), +(1477,'perl-Devel-GlobalDestruction','perl-Devel-GlobalDestruction','2020-10-15 15:15:37'), +(1478,'perl-Devel-PPPort','perl-Devel-PPPort','2020-10-15 15:15:37'), +(1479,'perl-Devel-Size','perl-Devel-Size','2020-10-15 15:15:37'), +(1480,'perl-Devel-Symdump','perl-Devel-Symdump','2020-10-15 15:15:37'), +(1481,'perl-Digest','perl-Digest','2020-10-15 15:15:37'), +(1482,'perl-Digest-HMAC','perl-Digest-HMAC','2020-10-15 15:15:37'), +(1483,'perl-Digest-MD5','perl-Digest-MD5','2020-10-15 15:15:37'), +(1484,'perl-Digest-SHA','perl-Digest-SHA','2020-10-15 15:15:37'), +(1485,'perl-Digest-SHA1','perl-Digest-SHA1','2020-10-15 15:15:37'), +(1486,'perl-Encode','perl-Encode','2020-10-15 15:15:37'), +(1487,'perl-Encode-Detect','perl-Encode-Detect','2020-10-15 15:15:37'), +(1488,'perl-Encode-Locale','perl-Encode-Locale','2020-10-15 15:15:37'), +(1489,'perl-Env','perl-Env','2020-10-15 15:15:37'), +(1490,'perl-Error','perl-Error','2020-10-15 15:15:37'), +(1491,'perl-Exporter','perl-Exporter','2020-10-15 15:15:37'), +(1492,'perl-Exporter-Tiny','perl-Exporter-Tiny','2020-10-15 15:15:37'), +(1493,'perl-ExtUtils-CBuilder','perl-ExtUtils-CBuilder','2020-10-15 15:15:37'), +(1494,'perl-ExtUtils-Install','perl-ExtUtils-Install','2020-10-15 15:15:38'), +(1495,'perl-ExtUtils-MakeMaker','perl-ExtUtils-MakeMaker','2020-10-15 15:15:38'), +(1496,'perl-ExtUtils-Manifest','perl-ExtUtils-Manifest','2020-10-15 15:15:38'), +(1497,'perl-ExtUtils-ParseXS','perl-ExtUtils-ParseXS','2020-10-15 15:15:38'), +(1498,'perl-FCGI','perl-FCGI','2020-10-15 15:15:38'), +(1499,'perl-Fedora-VSP','perl-Fedora-VSP','2020-10-15 15:15:38'), +(1500,'perl-File-BaseDir','perl-File-BaseDir','2020-10-15 15:15:38'), +(1501,'perl-File-CheckTree','perl-File-CheckTree','2020-10-15 15:15:38'), +(1502,'perl-File-Copy-Recursive','perl-File-Copy-Recursive','2020-10-15 15:15:38'), +(1503,'perl-File-DesktopEntry','perl-File-DesktopEntry','2020-10-15 15:15:38'), +(1504,'perl-File-Fetch','perl-File-Fetch','2020-10-15 15:15:38'), +(1505,'perl-File-HomeDir','perl-File-HomeDir','2020-10-15 15:15:38'), +(1506,'perl-File-Listing','perl-File-Listing','2020-10-15 15:15:38'), +(1507,'perl-File-MimeInfo','perl-File-MimeInfo','2020-10-15 15:15:38'), +(1508,'perl-File-Path','perl-File-Path','2020-10-15 15:15:38'), +(1509,'perl-File-ReadBackwards','perl-File-ReadBackwards','2020-10-15 15:15:38'), +(1510,'perl-File-Remove','perl-File-Remove','2020-10-15 15:15:38'), +(1511,'perl-File-ShareDir','perl-File-ShareDir','2020-10-15 15:15:38'), +(1512,'perl-File-ShareDir-Install','perl-File-ShareDir-Install','2020-10-15 15:15:38'), +(1513,'perl-File-Slurp','perl-File-Slurp','2020-10-15 15:15:38'), +(1514,'perl-File-Temp','perl-File-Temp','2020-10-15 15:15:38'), +(1515,'perl-File-Which','perl-File-Which','2020-10-15 15:15:38'), +(1516,'perl-File-pushd','perl-File-pushd','2020-10-15 15:15:38'), +(1517,'perl-Filter','perl-Filter','2020-10-15 15:15:38'), +(1518,'perl-Filter-Simple','perl-Filter-Simple','2020-10-15 15:15:38'), +(1519,'perl-Font-TTF','perl-Font-TTF','2020-10-15 15:15:38'), +(1520,'perl-FreezeThaw','perl-FreezeThaw','2020-10-15 15:15:38'), +(1521,'perl-GD','perl-GD','2020-10-15 15:15:38'), +(1522,'perl-GD-Barcode','perl-GD-Barcode','2020-10-15 15:15:38'), +(1523,'perl-GSSAPI','perl-GSSAPI','2020-10-15 15:15:38'), +(1524,'perl-Getopt-Long','perl-Getopt-Long','2020-10-15 15:15:38'), +(1525,'perl-HTML-Parser','perl-HTML-Parser','2020-10-15 15:15:38'), +(1526,'perl-HTML-Tagset','perl-HTML-Tagset','2020-10-15 15:15:38'), +(1527,'perl-HTML-Tree','perl-HTML-Tree','2020-10-15 15:15:38'), +(1528,'perl-HTTP-Cookies','perl-HTTP-Cookies','2020-10-15 15:15:38'), +(1529,'perl-HTTP-Daemon','perl-HTTP-Daemon','2020-10-15 15:15:38'), +(1530,'perl-HTTP-Date','perl-HTTP-Date','2020-10-15 15:15:38'), +(1531,'perl-HTTP-Message','perl-HTTP-Message','2020-10-15 15:15:38'), +(1532,'perl-HTTP-Negotiate','perl-HTTP-Negotiate','2020-10-15 15:15:38'), +(1533,'perl-HTTP-Tiny','perl-HTTP-Tiny','2020-10-15 15:15:38'), +(1534,'perl-IO-All','perl-IO-All','2020-10-15 15:15:38'), +(1535,'perl-IO-Compress','perl-IO-Compress','2020-10-15 15:15:38'), +(1536,'perl-IO-HTML','perl-IO-HTML','2020-10-15 15:15:38'), +(1537,'perl-IO-Socket-INET6','perl-IO-Socket-INET6','2020-10-15 15:15:38'), +(1538,'perl-IO-Socket-IP','perl-IO-Socket-IP','2020-10-15 15:15:38'), +(1539,'perl-IO-Socket-SSL','perl-IO-Socket-SSL','2020-10-15 15:15:38'), +(1540,'perl-IO-String','perl-IO-String','2020-10-15 15:15:38'), +(1541,'perl-IO-stringy','perl-IO-stringy','2020-10-15 15:15:38'), +(1542,'perl-IPC-Cmd','perl-IPC-Cmd','2020-10-15 15:15:38'), +(1543,'perl-IPC-SysV','perl-IPC-SysV','2020-10-15 15:15:38'), +(1544,'perl-IPC-System-Simple','perl-IPC-System-Simple','2020-10-15 15:15:38'), +(1545,'perl-Import-Into','perl-Import-Into','2020-10-15 15:15:38'), +(1546,'perl-JSON','perl-JSON','2020-10-15 15:15:38'), +(1547,'perl-JSON-PP','perl-JSON-PP','2020-10-15 15:15:38'), +(1548,'perl-LDAP','perl-LDAP','2020-10-15 15:15:38'), +(1549,'perl-LWP-MediaTypes','perl-LWP-MediaTypes','2020-10-15 15:15:38'), +(1550,'perl-List-MoreUtils','perl-List-MoreUtils','2020-10-15 15:15:38'), +(1551,'perl-List-MoreUtils-XS','perl-List-MoreUtils-XS','2020-10-15 15:15:38'), +(1552,'perl-Locale-Codes','perl-Locale-Codes','2020-10-15 15:15:38'), +(1553,'perl-Locale-Maketext','perl-Locale-Maketext','2020-10-15 15:15:38'), +(1554,'perl-MIME-Base64','perl-MIME-Base64','2020-10-15 15:15:38'), +(1555,'perl-MRO-Compat','perl-MRO-Compat','2020-10-15 15:15:38'), +(1556,'perl-Mail-DKIM','perl-Mail-DKIM','2020-10-15 15:15:38'), +(1557,'perl-Mail-SPF','perl-Mail-SPF','2020-10-15 15:15:38'), +(1558,'perl-MailTools','perl-MailTools','2020-10-15 15:15:38'), +(1559,'perl-Math-BigInt','perl-Math-BigInt','2020-10-15 15:15:38'), +(1560,'perl-Math-BigInt-FastCalc','perl-Math-BigInt-FastCalc','2020-10-15 15:15:38'), +(1561,'perl-Math-BigRat','perl-Math-BigRat','2020-10-15 15:15:38'), +(1562,'perl-Module-Build','perl-Module-Build','2020-10-15 15:15:38'), +(1563,'perl-Module-CPANfile','perl-Module-CPANfile','2020-10-15 15:15:38'), +(1564,'perl-Module-CoreList','perl-Module-CoreList','2020-10-15 15:15:38'), +(1565,'perl-Module-Install','perl-Module-Install','2020-10-15 15:15:38'), +(1566,'perl-Module-Install-AuthorRequires','perl-Module-Install-AuthorRequires','2020-10-15 15:15:38'), +(1567,'perl-Module-Install-AuthorTests','perl-Module-Install-AuthorTests','2020-10-15 15:15:38'), +(1568,'perl-Module-Install-AutoLicense','perl-Module-Install-AutoLicense','2020-10-15 15:15:38'), +(1569,'perl-Module-Install-GithubMeta','perl-Module-Install-GithubMeta','2020-10-15 15:15:38'), +(1570,'perl-Module-Install-ManifestSkip','perl-Module-Install-ManifestSkip','2020-10-15 15:15:38'), +(1571,'perl-Module-Install-ReadmeFromPod','perl-Module-Install-ReadmeFromPod','2020-10-15 15:15:38'), +(1572,'perl-Module-Install-ReadmeMarkdownFromPod','perl-Module-Install-ReadmeMarkdownFromPod','2020-10-15 15:15:38'), +(1573,'perl-Module-Install-Repository','perl-Module-Install-Repository','2020-10-15 15:15:38'), +(1574,'perl-Module-Load','perl-Module-Load','2020-10-15 15:15:38'), +(1575,'perl-Module-Load-Conditional','perl-Module-Load-Conditional','2020-10-15 15:15:38'), +(1576,'perl-Module-Manifest-Skip','perl-Module-Manifest-Skip','2020-10-15 15:15:38'), +(1577,'perl-Module-Metadata','perl-Module-Metadata','2020-10-15 15:15:38'), +(1578,'perl-Module-Package','perl-Module-Package','2020-10-15 15:15:38'), +(1579,'perl-Module-Runtime','perl-Module-Runtime','2020-10-15 15:15:38'), +(1580,'perl-Module-ScanDeps','perl-Module-ScanDeps','2020-10-15 15:15:38'), +(1581,'perl-Moo','perl-Moo','2020-10-15 15:15:38'), +(1582,'perl-Mozilla-CA','perl-Mozilla-CA','2020-10-15 15:15:38'), +(1583,'perl-NTLM','perl-NTLM','2020-10-15 15:15:38'), +(1584,'perl-Net-DNS','perl-Net-DNS','2020-10-15 15:15:38'), +(1585,'perl-Net-Daemon','perl-Net-Daemon','2020-10-15 15:15:38'), +(1586,'perl-Net-HTTP','perl-Net-HTTP','2020-10-15 15:15:38'), +(1587,'perl-Net-LibIDN','perl-Net-LibIDN','2020-10-15 15:15:38'), +(1588,'perl-Net-SMTP-SSL','perl-Net-SMTP-SSL','2020-10-15 15:15:38'), +(1589,'perl-Net-SSLeay','perl-Net-SSLeay','2020-10-15 15:15:38'), +(1590,'perl-NetAddr-IP','perl-NetAddr-IP','2020-10-15 15:15:38'), +(1591,'perl-Newt','perl-Newt','2020-10-15 15:15:38'), +(1592,'perl-Object-Accessor','perl-Object-Accessor','2020-10-15 15:15:38'), +(1593,'perl-Package-Generator','perl-Package-Generator','2020-10-15 15:15:38'), +(1594,'perl-Package-Stash-XS','perl-Package-Stash-XS','2020-10-15 15:15:38'), +(1595,'perl-Params-Check','perl-Params-Check','2020-10-15 15:15:38'), +(1596,'perl-Params-Util','perl-Params-Util','2020-10-15 15:15:38'), +(1597,'perl-Params-Validate','perl-Params-Validate','2020-10-15 15:15:38'), +(1598,'perl-Parse-Yapp','perl-Parse-Yapp','2020-10-15 15:15:38'), +(1599,'perl-Path-Class','perl-Path-Class','2020-10-15 15:15:38'), +(1600,'perl-Path-Tiny','perl-Path-Tiny','2020-10-15 15:15:38'), +(1601,'perl-PathTools','perl-PathTools','2020-10-15 15:15:38'), +(1602,'perl-Perl-OSType','perl-Perl-OSType','2020-10-15 15:15:38'), +(1603,'perl-PerlIO-via-QuotedPrint','perl-PerlIO-via-QuotedPrint','2020-10-15 15:15:38'), +(1604,'perl-Pod-Checker','perl-Pod-Checker','2020-10-15 15:15:38'), +(1605,'perl-Pod-Coverage','perl-Pod-Coverage','2020-10-15 15:15:38'), +(1606,'perl-Pod-Escapes','perl-Pod-Escapes','2020-10-15 15:15:39'), +(1607,'perl-Pod-Markdown','perl-Pod-Markdown','2020-10-15 15:15:39'), +(1608,'perl-Pod-Parser','perl-Pod-Parser','2020-10-15 15:15:39'), +(1609,'perl-Pod-Perldoc','perl-Pod-Perldoc','2020-10-15 15:15:39'), +(1610,'perl-Pod-Plainer','perl-Pod-Plainer','2020-10-15 15:15:39'), +(1611,'perl-Pod-Simple','perl-Pod-Simple','2020-10-15 15:15:39'), +(1612,'perl-Pod-Usage','perl-Pod-Usage','2020-10-15 15:15:39'), +(1613,'perl-Readonly','perl-Readonly','2020-10-15 15:15:39'), +(1614,'perl-Readonly-XS','perl-Readonly-XS','2020-10-15 15:15:39'), +(1615,'perl-Role-Tiny','perl-Role-Tiny','2020-10-15 15:15:39'), +(1616,'perl-SGMLSpm','perl-SGMLSpm','2020-10-15 15:15:39'), +(1617,'perl-SNMP_Session','perl-SNMP_Session','2020-10-15 15:15:39'), +(1618,'perl-Scalar-List-Utils','perl-Scalar-List-Utils','2020-10-15 15:15:39'), +(1619,'perl-Socket','perl-Socket','2020-10-15 15:15:39'), +(1620,'perl-Socket6','perl-Socket6','2020-10-15 15:15:39'), +(1621,'perl-Software-License','perl-Software-License','2020-10-15 15:15:39'), +(1622,'perl-Storable','perl-Storable','2020-10-15 15:15:39'), +(1623,'perl-String-ShellQuote','perl-String-ShellQuote','2020-10-15 15:15:39'), +(1624,'perl-Sub-Exporter','perl-Sub-Exporter','2020-10-15 15:15:39'), +(1625,'perl-Sub-Exporter-Progressive','perl-Sub-Exporter-Progressive','2020-10-15 15:15:39'), +(1626,'perl-Sub-Install','perl-Sub-Install','2020-10-15 15:15:39'), +(1627,'perl-Sub-Name','perl-Sub-Name','2020-10-15 15:15:39'), +(1628,'perl-Sub-Quote','perl-Sub-Quote','2020-10-15 15:15:39'), +(1629,'perl-Switch','perl-Switch','2020-10-15 15:15:39'), +(1630,'perl-Sys-CPU','perl-Sys-CPU','2020-10-15 15:15:39'), +(1631,'perl-Sys-MemInfo','perl-Sys-MemInfo','2020-10-15 15:15:39'), +(1632,'perl-Sys-Syslog','perl-Sys-Syslog','2020-10-15 15:15:39'), +(1633,'perl-Term-ANSIColor','perl-Term-ANSIColor','2020-10-15 15:15:39'), +(1634,'perl-Term-Cap','perl-Term-Cap','2020-10-15 15:15:39'), +(1635,'perl-Term-UI','perl-Term-UI','2020-10-15 15:15:39'), +(1636,'perl-TermReadKey','perl-TermReadKey','2020-10-15 15:15:39'), +(1637,'perl-Test-Deep','perl-Test-Deep','2020-10-15 15:15:39'), +(1638,'perl-Test-FailWarnings','perl-Test-FailWarnings','2020-10-15 15:15:39'), +(1639,'perl-Test-Fatal','perl-Test-Fatal','2020-10-15 15:15:39'), +(1640,'perl-Test-File','perl-Test-File','2020-10-15 15:15:39'), +(1641,'perl-Test-Harness','perl-Test-Harness','2020-10-15 15:15:39'), +(1642,'perl-Test-Harness-3.43_01-3','perl-Test-Harness-3.43_01-3','2020-10-15 15:15:39'), +(1643,'perl-Test-InDistDir','perl-Test-InDistDir','2020-10-15 15:15:39'), +(1644,'perl-Test-LeakTrace','perl-Test-LeakTrace','2020-10-15 15:15:39'), +(1645,'perl-Test-Needs','perl-Test-Needs','2020-10-15 15:15:39'), +(1646,'perl-Test-NoWarnings','perl-Test-NoWarnings','2020-10-15 15:15:39'), +(1647,'perl-Test-Pod','perl-Test-Pod','2020-10-15 15:15:39'), +(1648,'perl-Test-Pod-Coverage','perl-Test-Pod-Coverage','2020-10-15 15:15:39'), +(1649,'perl-Test-Requires','perl-Test-Requires','2020-10-15 15:15:39'), +(1650,'perl-Test-Simple','perl-Test-Simple','2020-10-15 15:15:39'), +(1651,'perl-Test-Warnings','perl-Test-Warnings','2020-10-15 15:15:39'), +(1652,'perl-Text-Balanced','perl-Text-Balanced','2020-10-15 15:15:39'), +(1653,'perl-Text-CharWidth','perl-Text-CharWidth','2020-10-15 15:15:39'), +(1654,'perl-Text-Diff','perl-Text-Diff','2020-10-15 15:15:39'), +(1655,'perl-Text-Glob','perl-Text-Glob','2020-10-15 15:15:39'), +(1656,'perl-Text-ParseWords','perl-Text-ParseWords','2020-10-15 15:15:39'), +(1657,'perl-Text-Soundex','perl-Text-Soundex','2020-10-15 15:15:39'), +(1658,'perl-Text-Tabs+Wrap','perl-Text-Tabs+Wrap','2020-10-15 15:15:39'), +(1659,'perl-Text-Template','perl-Text-Template','2020-10-15 15:15:39'), +(1660,'perl-Text-Unidecode','perl-Text-Unidecode','2020-10-15 15:15:39'), +(1661,'perl-Text-WrapI18N','perl-Text-WrapI18N','2020-10-15 15:15:39'), +(1662,'perl-Thread-Queue','perl-Thread-Queue','2020-10-15 15:15:39'), +(1663,'perl-Time-HiRes','perl-Time-HiRes','2020-10-15 15:15:39'), +(1664,'perl-Time-Local','perl-Time-Local','2020-10-15 15:15:39'), +(1665,'perl-TimeDate','perl-TimeDate','2020-10-15 15:15:39'), +(1666,'perl-Try-Tiny','perl-Try-Tiny','2020-10-15 15:15:39'), +(1667,'perl-URI','perl-URI','2020-10-15 15:15:39'), +(1668,'perl-Unicode-Collate','perl-Unicode-Collate','2020-10-15 15:15:39'), +(1669,'perl-Unicode-EastAsianWidth','perl-Unicode-EastAsianWidth','2020-10-15 15:15:39'), +(1670,'perl-Unicode-LineBreak','perl-Unicode-LineBreak','2020-10-15 15:15:39'), +(1671,'perl-Unicode-Normalize','perl-Unicode-Normalize','2020-10-15 15:15:39'), +(1672,'perl-Unicode-UTF8','perl-Unicode-UTF8','2020-10-15 15:15:39'), +(1673,'perl-Version-Requirements','perl-Version-Requirements','2020-10-15 15:15:39'), +(1674,'perl-WWW-Curl','perl-WWW-Curl','2020-10-15 15:15:39'), +(1675,'perl-WWW-RobotRules','perl-WWW-RobotRules','2020-10-15 15:15:39'), +(1676,'perl-XML-Grove','perl-XML-Grove','2020-10-15 15:15:39'), +(1677,'perl-XML-LibXML','perl-XML-LibXML','2020-10-15 15:15:39'), +(1678,'perl-XML-NamespaceSupport','perl-XML-NamespaceSupport','2020-10-15 15:15:39'), +(1679,'perl-XML-Parser','perl-XML-Parser','2020-10-15 15:15:39'), +(1680,'perl-XML-SAX','perl-XML-SAX','2020-10-15 15:15:39'), +(1681,'perl-XML-SAX-Base','perl-XML-SAX-Base','2020-10-15 15:15:39'), +(1682,'perl-XML-SAX-Writer','perl-XML-SAX-Writer','2020-10-15 15:15:39'), +(1683,'perl-XML-Twig','perl-XML-Twig','2020-10-15 15:15:39'), +(1684,'perl-XML-Writer','perl-XML-Writer','2020-10-15 15:15:39'), +(1685,'perl-XML-XPath','perl-XML-XPath','2020-10-15 15:15:39'), +(1686,'perl-YAML','perl-YAML','2020-10-15 15:15:39'), +(1687,'perl-YAML-Tiny','perl-YAML-Tiny','2020-10-15 15:15:39'), +(1688,'perl-autodie','perl-autodie','2020-10-15 15:15:39'), +(1689,'perl-bignum','perl-bignum','2020-10-15 15:15:39'), +(1690,'perl-constant','perl-constant','2020-10-15 15:15:39'), +(1691,'perl-experimental','perl-experimental','2020-10-15 15:15:39'), +(1692,'perl-generators','perl-generators','2020-10-15 15:15:39'), +(1693,'perl-gettext','perl-gettext','2020-10-15 15:15:39'), +(1694,'perl-inc-latest','perl-inc-latest','2020-10-15 15:15:39'), +(1695,'perl-libintl','perl-libintl','2020-10-15 15:15:39'), +(1696,'perl-libintl-perl','perl-libintl-perl','2020-10-15 15:15:39'), +(1697,'perl-libnet','perl-libnet','2020-10-15 15:15:39'), +(1698,'perl-libwww-perl','perl-libwww-perl','2020-10-15 15:15:39'), +(1699,'perl-libxml-perl','perl-libxml-perl','2020-10-15 15:15:39'), +(1700,'perl-local-lib','perl-local-lib','2020-10-15 15:15:39'), +(1701,'perl-parent','perl-parent','2020-10-15 15:15:39'), +(1702,'perl-perlfaq','perl-perlfaq','2020-10-15 15:15:39'), +(1703,'perl-podlators','perl-podlators','2020-10-15 15:15:39'), +(1704,'perl-srpm-macros','perl-srpm-macros','2020-10-15 15:15:39'), +(1705,'perl-strictures','perl-strictures','2020-10-15 15:15:39'), +(1706,'perl-threads','perl-threads','2020-10-15 15:15:39'), +(1707,'perl-threads-shared','perl-threads-shared','2020-10-15 15:15:39'), +(1708,'perl-version','perl-version','2020-10-15 15:15:39'), +(1709,'perltidy','perltidy','2020-10-15 15:15:39'), +(1710,'pesign','pesign','2020-10-15 15:15:39'), +(1711,'pexpect','pexpect','2020-10-15 15:15:39'), +(1712,'phodav','phodav','2020-10-15 15:15:39'), +(1713,'php','php','2020-10-15 15:15:39'), +(1714,'pidgin','pidgin','2020-10-15 15:15:39'), +(1715,'pigz','pigz','2020-10-15 15:15:39'), +(1716,'pinentry','pinentry','2020-10-15 15:15:39'), +(1717,'pinfo','pinfo','2020-10-15 15:15:39'), +(1718,'pipewire','pipewire','2020-10-15 15:15:39'), +(1719,'pixman','pixman','2020-10-15 15:15:39'), +(1720,'pkgconf','pkgconf','2020-10-15 15:15:40'), +(1721,'pkgconfig','pkgconfig','2020-10-15 15:15:40'), +(1722,'pki-core','pki-core','2020-10-15 15:15:40'), +(1723,'plymouth','plymouth','2020-10-15 15:15:40'), +(1724,'pm-utils','pm-utils','2020-10-15 15:15:40'), +(1725,'pngquant','pngquant','2020-10-15 15:15:40'), +(1726,'pnm2ppa','pnm2ppa','2020-10-15 15:15:40'), +(1727,'po4a','po4a','2020-10-15 15:15:40'), +(1728,'policycoreutils','policycoreutils','2020-10-15 15:15:40'), +(1729,'polkit','polkit','2020-10-15 15:15:40'), +(1730,'polkit-gnome','polkit-gnome','2020-10-15 15:15:40'), +(1731,'polkit-pkla-compat','polkit-pkla-compat','2020-10-15 15:15:40'), +(1732,'polkit-qt','polkit-qt','2020-10-15 15:15:40'), +(1733,'poppler','poppler','2020-10-15 15:15:40'), +(1734,'poppler-data','poppler-data','2020-10-15 15:15:40'), +(1735,'popt','popt','2020-10-15 15:15:40'), +(1736,'portreserve','portreserve','2020-10-15 15:15:40'), +(1737,'postfix','postfix','2020-10-15 15:15:40'), +(1738,'postgresql','postgresql','2020-10-15 15:15:40'), +(1739,'postgresql-jdbc','postgresql-jdbc','2020-10-15 15:15:40'), +(1740,'postgresql-odbc','postgresql-odbc','2020-10-15 15:15:40'), +(1741,'pothana2000-fonts','pothana2000-fonts','2020-10-15 15:15:40'), +(1742,'powertop','powertop','2020-10-15 15:15:40'), +(1743,'ppp','ppp,point-to-point_protocol','2020-10-15 15:15:40'), +(1744,'pps-tools','pps-tools','2020-10-15 15:15:40'), +(1745,'pptp','pptp','2020-10-15 15:15:40'), +(1746,'prelink','prelink','2020-10-15 15:15:40'), +(1747,'printk_buf_dev','printk_buf_dev','2020-10-15 15:15:40'), +(1748,'printk_buf_dev-kmod','printk_buf_dev-kmod','2020-10-15 15:15:40'), +(1749,'procinfo','procinfo','2020-10-15 15:15:40'), +(1750,'procmail','procmail','2020-10-15 15:15:40'), +(1751,'procps-ng','procps-ng','2020-10-15 15:15:40'), +(1752,'protobuf','protobuf','2020-10-15 15:15:40'), +(1753,'protobuf-c','protobuf-c','2020-10-15 15:15:40'), +(1754,'ps_mem','ps_mem','2020-10-15 15:15:40'), +(1755,'psacct','psacct','2020-10-15 15:15:40'), +(1756,'psmisc','psmisc','2020-10-15 15:15:40'), +(1757,'psutils','psutils','2020-10-15 15:15:40'), +(1758,'pth','pth','2020-10-15 15:15:40'), +(1759,'publicsuffix-list','publicsuffix-list','2020-10-15 15:15:40'), +(1760,'pulseaudio','pulseaudio','2020-10-15 15:15:40'), +(1761,'pyOpenSSL','pyOpenSSL','2020-10-15 15:15:40'), +(1762,'pyatspi','pyatspi','2020-10-15 15:15:40'), +(1763,'pycairo','pycairo','2020-10-15 15:15:40'), +(1764,'pyelftools','pyelftools','2020-10-15 15:15:40'), +(1765,'pyflakes','pyflakes','2020-10-15 15:15:40'), +(1766,'pygobject2','pygobject2','2020-10-15 15:15:40'), +(1767,'pygobject3','pygobject3','2020-10-15 15:15:40'), +(1768,'pygpgme','pygpgme','2020-10-15 15:15:40'), +(1769,'pygtk2','pygtk2','2020-10-15 15:15:40'), +(1770,'pykickstart','pykickstart','2020-10-15 15:15:40'), +(1771,'pyliblzma','pyliblzma','2020-10-15 15:15:40'), +(1772,'pyorbit','pyorbit','2020-10-15 15:15:40'), +(1773,'pyparsing','pyparsing','2020-10-15 15:15:40'), +(1774,'pyparted','pyparted','2020-10-15 15:15:40'), +(1775,'pyserial','pyserial','2020-10-15 15:15:40'), +(1776,'pytest','pytest','2020-10-15 15:15:40'), +(1777,'python','python','2020-10-15 15:15:40'), +(1778,'python-IPy','python-IPy','2020-10-15 15:15:40'), +(1779,'python-PyMySQL','python-PyMySQL','2020-10-15 15:15:40'), +(1780,'python-SecretStorage','python-SecretStorage','2020-10-15 15:15:40'), +(1781,'python-aniso8601','python-aniso8601','2020-10-15 15:15:40'), +(1782,'python-asn1crypto','python-asn1crypto','2020-10-15 15:15:40'), +(1783,'python-atomicwrites','python-atomicwrites','2020-10-15 15:15:40'), +(1784,'python-attrs','python-attrs','2020-10-15 15:15:40'), +(1785,'python-augeas','python-augeas','2020-10-15 15:15:40'), +(1786,'python-backports','python-backports','2020-10-15 15:15:40'), +(1787,'python-backports-ssl_match_hostname','python-backports-ssl_match_hostname','2020-10-15 15:15:40'), +(1788,'python-backports-unittest_mock','python-backports-unittest_mock','2020-10-15 15:15:40'), +(1789,'python-backports_abc','python-backports_abc','2020-10-15 15:15:40'), +(1790,'python-bcrypt','python-bcrypt','2020-10-15 15:15:40'), +(1791,'python-beaker','python-beaker','2020-10-15 15:15:40'), +(1792,'python-beautifulsoup4','python-beautifulsoup4','2020-10-15 15:15:40'), +(1793,'python-blinker','python-blinker','2020-10-15 15:15:40'), +(1794,'python-blivet','python-blivet','2020-10-15 15:15:40'), +(1795,'python-boto','python-boto','2020-10-15 15:15:40'), +(1796,'python-bottle','python-bottle','2020-10-15 15:15:40'), +(1797,'python-cffi','python-cffi','2020-10-15 15:15:40'), +(1798,'python-chardet','python-chardet','2020-10-15 15:15:40'), +(1799,'python-cheetah','python-cheetah','2020-10-15 15:15:40'), +(1800,'python-cherrypy','python-cherrypy','2020-10-15 15:15:40'), +(1801,'python-click','python-click','2020-10-15 15:15:40'), +(1802,'python-configobj','python-configobj','2020-10-15 15:15:40'), +(1803,'python-configparser','python-configparser','2020-10-15 15:15:40'), +(1804,'python-configshell','python-configshell','2020-10-15 15:15:40'), +(1805,'python-construct','python-construct','2020-10-15 15:15:40'), +(1806,'python-coverage','python-coverage','2020-10-15 15:15:40'), +(1807,'python-cpio','python-cpio','2020-10-15 15:15:40'), +(1808,'python-crypto','python-crypto','2020-10-15 15:15:40'), +(1809,'python-cryptography','python-cryptography','2020-10-15 15:15:40'), +(1810,'python-cryptography-vectors','python-cryptography-vectors','2020-10-15 15:15:40'), +(1811,'python-cups','python-cups','2020-10-15 15:15:40'), +(1812,'python-dateutil','python-dateutil','2020-10-15 15:15:40'), +(1813,'python-decorator','python-decorator','2020-10-15 15:15:40'), +(1814,'python-di','python-di','2020-10-15 15:15:40'), +(1815,'python-dict2xml','python-dict2xml','2020-10-15 15:15:40'), +(1816,'python-distro','python-distro','2020-10-15 15:15:40'), +(1817,'python-dmidecode','python-dmidecode','2020-10-15 15:15:40'), +(1818,'python-dns','python-dns','2020-10-15 15:15:40'), +(1819,'python-docker','python-docker','2020-10-15 15:15:40'), +(1820,'python-docker-pycreds','python-docker-pycreds','2020-10-15 15:15:40'), +(1821,'python-dockerpty','python-dockerpty','2020-10-15 15:15:40'), +(1822,'python-docopt','python-docopt','2020-10-15 15:15:40'), +(1823,'python-docs','python-docs','2020-10-15 15:15:40'), +(1824,'python-docutils','python-docutils','2020-10-15 15:15:40'), +(1825,'python-ecdsa','python-ecdsa','2020-10-15 15:15:40'), +(1826,'python-enchant','python-enchant','2020-10-15 15:15:40'), +(1827,'python-entrypoints','python-entrypoints','2020-10-15 15:15:40'), +(1828,'python-enum34','python-enum34','2020-10-15 15:15:40'), +(1829,'python-ethtool','python-ethtool','2020-10-15 15:15:40'), +(1830,'python-extras','python-extras','2020-10-15 15:15:40'), +(1831,'python-fixtures','python-fixtures','2020-10-15 15:15:40'), +(1832,'python-flake8','python-flake8','2020-10-15 15:15:40'), +(1833,'python-flask','python-flask','2020-10-15 15:15:40'), +(1834,'python-flit','python-flit','2020-10-15 15:15:41'), +(1835,'python-freezegun','python-freezegun','2020-10-15 15:15:41'), +(1836,'python-funcsigs','python-funcsigs','2020-10-15 15:15:41'), +(1837,'python-futures','python-futures','2020-10-15 15:15:41'), +(1838,'python-genshi','python-genshi','2020-10-15 15:15:41'), +(1839,'python-gevent','python-gevent','2020-10-15 15:15:41'), +(1840,'python-gflags','python-gflags','2020-10-15 15:15:41'), +(1841,'python-google-apputils','python-google-apputils','2020-10-15 15:15:41'), +(1842,'python-greenlet','python-greenlet','2020-10-15 15:15:41'), +(1843,'python-gssapi','python-gssapi','2020-10-15 15:15:41'), +(1844,'python-gudev','python-gudev','2020-10-15 15:15:41'), +(1845,'python-html5lib','python-html5lib','2020-10-15 15:15:41'), +(1846,'python-httplib2','python-httplib2','2020-10-15 15:15:41'), +(1847,'python-httpretty','python-httpretty','2020-10-15 15:15:41'), +(1848,'python-humanize','python-humanize','2020-10-15 15:15:41'), +(1849,'python-hwdata','python-hwdata','2020-10-15 15:15:41'), +(1850,'python-hypothesis','python-hypothesis','2020-10-15 15:15:41'), +(1851,'python-idna','python-idna','2020-10-15 15:15:41'), +(1852,'python-imagesize','python-imagesize','2020-10-15 15:15:41'), +(1853,'python-iniparse','python-iniparse','2020-10-15 15:15:41'), +(1854,'python-inotify','python-inotify','2020-10-15 15:15:41'), +(1855,'python-ipaddr','python-ipaddr','2020-10-15 15:15:41'), +(1856,'python-ipaddress','python-ipaddress','2020-10-15 15:15:41'), +(1857,'python-iso8601','python-iso8601','2020-10-15 15:15:41'), +(1858,'python-itsdangerous','python-itsdangerous','2020-10-15 15:15:41'), +(1859,'python-jinja2','python-jinja2','2020-10-15 15:15:41'), +(1860,'python-joblib','python-joblib','2020-10-15 15:15:41'), +(1861,'python-jsonpatch','python-jsonpatch','2020-10-15 15:15:41'), +(1862,'python-jsonpointer','python-jsonpointer','2020-10-15 15:15:41'), +(1863,'python-jsonschema','python-jsonschema','2020-10-15 15:15:41'), +(1864,'python-jwcrypto','python-jwcrypto','2020-10-15 15:15:41'), +(1865,'python-jwt','python-jwt','2020-10-15 15:15:41'), +(1866,'python-kdcproxy','python-kdcproxy','2020-10-15 15:15:41'), +(1867,'python-kerberos','python-kerberos','2020-10-15 15:15:41'), +(1868,'python-keyring','python-keyring','2020-10-15 15:15:41'), +(1869,'python-kitchen','python-kitchen','2020-10-15 15:15:41'), +(1870,'python-kmod','python-kmod','2020-10-15 15:15:41'), +(1871,'python-ldap','python-ldap','2020-10-15 15:15:41'), +(1872,'python-linecache2','python-linecache2','2020-10-15 15:15:41'), +(1873,'python-linux-procfs','python-linux-procfs','2020-10-15 15:15:41'), +(1874,'python-lit','python-lit','2020-10-15 15:15:41'), +(1875,'python-lxml','python-lxml','2020-10-15 15:15:41'), +(1876,'python-mako','python-mako','2020-10-15 15:15:41'), +(1877,'python-markdown','python-markdown','2020-10-15 15:15:41'), +(1878,'python-markupsafe','python-markupsafe','2020-10-15 15:15:41'), +(1879,'python-matplotlib','python-matplotlib','2020-10-15 15:15:41'), +(1880,'python-mccabe','python-mccabe','2020-10-15 15:15:41'), +(1881,'python-meh','python-meh','2020-10-15 15:15:41'), +(1882,'python-memcached','python-memcached','2020-10-15 15:15:41'), +(1883,'python-mimeparse','python-mimeparse','2020-10-15 15:15:41'), +(1884,'python-mock','python-mock','2020-10-15 15:15:41'), +(1885,'python-more-itertools','python-more-itertools','2020-10-15 15:15:41'), +(1886,'python-mox','python-mox','2020-10-15 15:15:41'), +(1887,'python-netaddr','python-netaddr','2020-10-15 15:15:41'), +(1888,'python-netifaces','python-netifaces','2020-10-15 15:15:41'), +(1889,'python-nose','python-nose','2020-10-15 15:15:41'), +(1890,'python-nss','python-nss','2020-10-15 15:15:41'), +(1891,'python-ntplib','python-ntplib','2020-10-15 15:15:41'), +(1892,'python-oauthlib','python-oauthlib','2020-10-15 15:15:41'), +(1893,'python-olefile','python-olefile','2020-10-15 15:15:41'), +(1894,'python-ordered-set','python-ordered-set','2020-10-15 15:15:41'), +(1895,'python-packaging','python-packaging','2020-10-15 15:15:41'), +(1896,'python-pandas','python-pandas','2020-10-15 15:15:41'), +(1897,'python-paramiko','python-paramiko','2020-10-15 15:15:41'), +(1898,'python-paste','python-paste','2020-10-15 15:15:41'), +(1899,'python-pbr','python-pbr','2020-10-15 15:15:41'), +(1900,'python-pep8','python-pep8','2020-10-15 15:15:41'), +(1901,'python-pexpect','python-pexpect','2020-10-15 15:15:41'), +(1902,'python-pid','python-pid','2020-10-15 15:15:41'), +(1903,'python-pillow','python-pillow','2020-10-15 15:15:41'), +(1904,'python-pip','python-pip','2020-10-15 15:15:41'), +(1905,'python-pluggy','python-pluggy','2020-10-15 15:15:41'), +(1906,'python-ply','python-ply','2020-10-15 15:15:41'), +(1907,'python-pocketlint','python-pocketlint','2020-10-15 15:15:41'), +(1908,'python-polib','python-polib','2020-10-15 15:15:41'), +(1909,'python-pretend','python-pretend','2020-10-15 15:15:41'), +(1910,'python-prettytable','python-prettytable','2020-10-15 15:15:41'), +(1911,'python-productmd','python-productmd','2020-10-15 15:15:41'), +(1912,'python-progressbar','python-progressbar','2020-10-15 15:15:41'), +(1913,'python-psutil','python-psutil','2020-10-15 15:15:41'), +(1914,'python-psycopg2','python-psycopg2','2020-10-15 15:15:41'), +(1915,'python-ptyprocess','python-ptyprocess','2020-10-15 15:15:41'), +(1916,'python-py','python-py','2020-10-15 15:15:41'), +(1917,'python-pyasn1','python-pyasn1','2020-10-15 15:15:41'), +(1918,'python-pyblock','python-pyblock','2020-10-15 15:15:41'), +(1919,'python-pycparser','python-pycparser','2020-10-15 15:15:41'), +(1920,'python-pycurl','python-pycurl','2020-10-15 15:15:41'), +(1921,'python-pydbus','python-pydbus','2020-10-15 15:15:41'), +(1922,'python-pygments','python-pygments','2020-10-15 15:15:41'), +(1923,'python-pymongo','python-pymongo','2020-10-15 15:15:41'), +(1924,'python-pynacl','python-pynacl','2020-10-15 15:15:41'), +(1925,'python-pysocks','python-pysocks','2020-10-15 15:15:41'), +(1926,'python-pytest-cov','python-pytest-cov','2020-10-15 15:15:41'), +(1927,'python-pytest-expect','python-pytest-expect','2020-10-15 15:15:41'), +(1928,'python-pytest-fixture-config','python-pytest-fixture-config','2020-10-15 15:15:41'), +(1929,'python-pytest-mock','python-pytest-mock','2020-10-15 15:15:41'), +(1930,'python-pytest-virtualenv','python-pytest-virtualenv','2020-10-15 15:15:41'), +(1931,'python-pytoml','python-pytoml','2020-10-15 15:15:41'), +(1932,'python-pyudev','python-pyudev','2020-10-15 15:15:41'), +(1933,'python-qrcode','python-qrcode','2020-10-15 15:15:41'), +(1934,'python-redis','python-redis','2020-10-15 15:15:41'), +(1935,'python-reportlab','python-reportlab','2020-10-15 15:15:41'), +(1936,'python-repoze-lru','python-repoze-lru','2020-10-15 15:15:41'), +(1937,'python-requests','python-requests','2020-10-15 15:15:41'), +(1938,'python-requests-file','python-requests-file','2020-10-15 15:15:41'), +(1939,'python-requests-ftp','python-requests-ftp','2020-10-15 15:15:41'), +(1940,'python-rhsm','python-rhsm','2020-10-15 15:15:41'), +(1941,'python-rpm-generators','python-rpm-generators','2020-10-15 15:15:41'), +(1942,'python-rpm-macros','python-rpm-macros','2020-10-15 15:15:41'), +(1943,'python-rsa','python-rsa','2020-10-15 15:15:41'), +(1944,'python-rtslib','python-rtslib','2020-10-15 15:15:41'), +(1945,'python-schedutils','python-schedutils','2020-10-15 15:15:41'), +(1946,'python-scikit-learn','python-scikit-learn','2020-10-15 15:15:42'), +(1947,'python-scikit-optimize','python-scikit-optimize','2020-10-15 15:15:42'), +(1948,'python-semantic_version','python-semantic_version','2020-10-15 15:15:42'), +(1949,'python-setproctitle','python-setproctitle','2020-10-15 15:15:42'), +(1950,'python-setuptools','python-setuptools','2020-10-15 15:15:42'), +(1951,'python-setuptools_git','python-setuptools_git','2020-10-15 15:15:42'), +(1952,'python-setuptools_scm','python-setuptools_scm','2020-10-15 15:15:42'), +(1953,'python-simpleline','python-simpleline','2020-10-15 15:15:42'), +(1954,'python-singledispatch','python-singledispatch','2020-10-15 15:15:42'), +(1955,'python-six','python-six','2020-10-15 15:15:42'), +(1956,'python-slip','python-slip','2020-10-15 15:15:42'), +(1957,'python-smbc','python-smbc','2020-10-15 15:15:42'), +(1958,'python-snowballstemmer','python-snowballstemmer','2020-10-15 15:15:42'), +(1959,'python-sphinx','python-sphinx','2020-10-15 15:15:42'), +(1960,'python-sphinx-theme-alabaster','python-sphinx-theme-alabaster','2020-10-15 15:15:42'), +(1961,'python-sphinx_rtd_theme','python-sphinx_rtd_theme','2020-10-15 15:15:42'), +(1962,'python-sphinxcontrib-spelling','python-sphinxcontrib-spelling','2020-10-15 15:15:42'), +(1963,'python-sphinxcontrib-websupport','python-sphinxcontrib-websupport','2020-10-15 15:15:42'), +(1964,'python-sqlalchemy','python-sqlalchemy','2020-10-15 15:15:42'), +(1965,'python-suds','python-suds','2020-10-15 15:15:42'), +(1966,'python-sure','python-sure','2020-10-15 15:15:42'), +(1967,'python-systemd','python-systemd','2020-10-15 15:15:42'), +(1968,'python-tempita','python-tempita','2020-10-15 15:15:42'), +(1969,'python-testscenarios','python-testscenarios','2020-10-15 15:15:42'), +(1970,'python-testtools','python-testtools','2020-10-15 15:15:42'), +(1971,'python-threadpoolctl','python-threadpoolctl','2020-10-15 15:15:42'), +(1972,'python-tornado','python-tornado','2020-10-15 15:15:42'), +(1973,'python-traceback2','python-traceback2','2020-10-15 15:15:42'), +(1974,'python-u-msgpack-python','python-u-msgpack-python','2020-10-15 15:15:42'), +(1975,'python-unittest2','python-unittest2','2020-10-15 15:15:42'), +(1976,'python-urlgrabber','python-urlgrabber','2020-10-15 15:15:42'), +(1977,'python-urllib3','python-urllib3','2020-10-15 15:15:42'), +(1978,'python-urwid','python-urwid','2020-10-15 15:15:42'), +(1979,'python-virtualenv','python-virtualenv','2020-10-15 15:15:42'), +(1980,'python-waitress','python-waitress','2020-10-15 15:15:42'), +(1981,'python-webencodings','python-webencodings','2020-10-15 15:15:42'), +(1982,'python-websocket-client','python-websocket-client','2020-10-15 15:15:42'), +(1983,'python-webtest','python-webtest','2020-10-15 15:15:42'), +(1984,'python-werkzeug','python-werkzeug','2020-10-15 15:15:42'), +(1985,'python-wheel','python-wheel','2020-10-15 15:15:42'), +(1986,'python-which','python-which','2020-10-15 15:15:42'), +(1987,'python-whoosh','python-whoosh','2020-10-15 15:15:42'), +(1988,'python-xgboost','python-xgboost','2020-10-15 15:15:42'), +(1989,'python-yubico','python-yubico','2020-10-15 15:15:42'), +(1990,'python-zope-interface','python-zope-interface','2020-10-15 15:15:42'), +(1991,'python2','python2,Python / CPython,python','2020-10-15 15:15:42'), +(1992,'python2-typing','python2-typing','2020-10-15 15:15:42'), +(1993,'python3','python3,CPython,python','2020-10-15 15:15:42'), +(1994,'python3-mallard-ducktype','python3-mallard-ducktype','2020-10-15 15:15:42'), +(1995,'pytz','pytz','2020-10-15 15:15:42'), +(1996,'pyusb','pyusb','2020-10-15 15:15:42'), +(1997,'pywbem','pywbem','2020-10-15 15:15:42'), +(1998,'pyxattr','pyxattr','2020-10-15 15:15:42'), +(1999,'pyxdg','pyxdg','2020-10-15 15:15:42'), +(2000,'qat-engine','qat-engine','2020-10-15 15:15:42'), +(2001,'qca-ossl','qca-ossl','2020-10-15 15:15:42'), +(2002,'qca2','qca2','2020-10-15 15:15:42'), +(2003,'qdox','qdox','2020-10-15 15:15:42'), +(2004,'qemu','qemu','2020-10-15 15:15:42'), +(2005,'qemu-guest-agent','qemu-guest-agent','2020-10-15 15:15:42'), +(2006,'qemu-kvm','qemu-kvm','2020-10-15 15:15:42'), +(2007,'qimageblitz','qimageblitz','2020-10-15 15:15:42'), +(2008,'qjson','qjson','2020-10-15 15:15:42'), +(2009,'qpdf','qpdf','2020-10-15 15:15:42'), +(2010,'qperf','qperf','2020-10-15 15:15:42'), +(2011,'qpid-proton','qpid-proton','2020-10-15 15:15:42'), +(2012,'qrencode','qrencode','2020-10-15 15:15:42'), +(2013,'qt','qt','2020-10-15 15:15:42'), +(2014,'qt3','qt3','2020-10-15 15:15:42'), +(2015,'qt5','qt5','2020-10-15 15:15:42'), +(2016,'qt5-qtbase','qt5-qtbase','2020-10-15 15:15:42'), +(2017,'qt5-qtdeclarative','qt5-qtdeclarative','2020-10-15 15:15:42'), +(2018,'qt5-qtmultimedia','qt5-qtmultimedia','2020-10-15 15:15:42'), +(2019,'qt5-qtsvg','qt5-qtsvg','2020-10-15 15:15:42'), +(2020,'qt5-qttools','qt5-qttools','2020-10-15 15:15:42'), +(2021,'qt5-qtxmlpatterns','qt5-qtxmlpatterns','2020-10-15 15:15:42'), +(2022,'quagga','quagga','2020-10-15 15:15:42'), +(2023,'quota','quota','2020-10-15 15:15:42'), +(2024,'radvd','radvd','2020-10-15 15:15:42'), +(2025,'ramdisk-root','ramdisk-root','2020-10-15 15:15:42'), +(2026,'raptor2','raptor2','2020-10-15 15:15:42'), +(2027,'rarian','rarian','2020-10-15 15:15:42'), +(2028,'rasdaemon','rasdaemon','2020-10-15 15:15:42'), +(2029,'rasqal','rasqal','2020-10-15 15:15:42'), +(2030,'rcs','rcs','2020-10-15 15:15:42'), +(2031,'rdate','rdate','2020-10-15 15:15:42'), +(2032,'rdist','rdist','2020-10-15 15:15:42'), +(2033,'rdma-core','rdma-core','2020-10-15 15:15:42'), +(2034,'readline','readline','2020-10-15 15:15:42'), +(2035,'realmd','realmd','2020-10-15 15:15:42'), +(2036,'rear','rear','2020-10-15 15:15:42'), +(2037,'recode','recode','2020-10-15 15:15:42'), +(2038,'redhat-lsb','redhat-lsb','2020-10-15 15:15:42'), +(2039,'redhat-menus','redhat-menus','2020-10-15 15:15:42'), +(2040,'redhat-rpm-config','redhat-rpm-config','2020-10-15 15:15:42'), +(2041,'redhat-upgrade-dracut','redhat-upgrade-dracut','2020-10-15 15:15:42'), +(2042,'redis','redis','2020-10-15 15:15:42'), +(2043,'redland','redland','2020-10-15 15:15:42'), +(2044,'reg_feeddog','reg_feeddog','2020-10-15 15:15:42'), +(2045,'regexp','regexp','2020-10-15 15:15:42'), +(2046,'reiserfs-utils','reiserfs-utils','2020-10-15 15:15:42'), +(2047,'rest','rest','2020-10-15 15:15:42'), +(2048,'resteasy-base','resteasy-base','2020-10-15 15:15:42'), +(2049,'rfkill','rfkill','2020-10-15 15:15:42'), +(2050,'rhash','rhash','2020-10-15 15:15:42'), +(2051,'rhdb-utils','rhdb-utils','2020-10-15 15:15:42'), +(2052,'rhino','rhino','2020-10-15 15:15:42'), +(2053,'rng-tools','rng-tools','2020-10-15 15:15:42'), +(2054,'rngom','rngom','2020-10-15 15:15:42'), +(2055,'rootfiles','rootfiles','2020-10-15 15:15:42'), +(2056,'rootsh','rootsh','2020-10-15 15:15:42'), +(2057,'rp-pppoe','rp-pppoe','2020-10-15 15:15:42'), +(2058,'rpcbind','rpcbind','2020-10-15 15:15:43'), +(2059,'rpcsvc-proto','rpcsvc-proto','2020-10-15 15:15:43'), +(2060,'rpm','rpm','2020-10-15 15:15:43'), +(2061,'rpm-mpi-hooks','rpm-mpi-hooks','2020-10-15 15:15:43'), +(2062,'rpm-ostree','rpm-ostree','2020-10-15 15:15:43'), +(2063,'rpmdevtools','rpmdevtools','2020-10-15 15:15:43'), +(2064,'rpmlint','rpmlint','2020-10-15 15:15:43'), +(2065,'rpmrebuild','rpmrebuild','2020-10-15 15:15:43'), +(2066,'rrdtool','rrdtool','2020-10-15 15:15:43'), +(2067,'rsh','rsh','2020-10-15 15:15:43'), +(2068,'rsync','rsync','2020-10-15 15:15:43'), +(2069,'rsyslog','rsyslog','2020-10-15 15:15:43'), +(2070,'rtkit','rtkit','2020-10-15 15:15:43'), +(2071,'ruby','ruby,Ruby','2020-10-15 15:15:43'), +(2072,'rubygem-abrt','rubygem-abrt','2020-10-15 15:15:43'), +(2073,'rubygem-asciidoctor','rubygem-asciidoctor','2020-10-15 15:15:43'), +(2074,'rubygem-bundler','rubygem-bundler','2020-10-15 15:15:43'), +(2075,'rubygem-net-http-persistent','rubygem-net-http-persistent','2020-10-15 15:15:43'), +(2076,'rubygem-thor','rubygem-thor','2020-10-15 15:15:43'), +(2077,'rusers','rusers','2020-10-15 15:15:43'), +(2078,'rust','rust','2020-10-15 15:15:43'), +(2079,'rust-srpm-macros','rust-srpm-macros','2020-10-15 15:15:43'), +(2080,'rwho','rwho','2020-10-15 15:15:43'), +(2081,'s3fs-fuse','s3fs-fuse','2020-10-15 15:15:43'), +(2082,'saab-fonts','saab-fonts','2020-10-15 15:15:43'), +(2083,'samba','samba,Samba','2020-10-15 15:15:43'), +(2084,'samyak-fonts','samyak-fonts','2020-10-15 15:15:43'), +(2085,'sane-backends','sane-backends','2020-10-15 15:15:43'), +(2086,'sane-frontends','sane-frontends','2020-10-15 15:15:43'), +(2087,'sanlock','sanlock','2020-10-15 15:15:43'), +(2088,'sassc','sassc','2020-10-15 15:15:43'), +(2089,'satyr','satyr','2020-10-15 15:15:43'), +(2090,'sbc','sbc','2020-10-15 15:15:43'), +(2091,'sblim-cim-client2','sblim-cim-client2','2020-10-15 15:15:43'), +(2092,'sblim-cmpi-base','sblim-cmpi-base','2020-10-15 15:15:43'), +(2093,'sblim-cmpi-devel','sblim-cmpi-devel','2020-10-15 15:15:43'), +(2094,'sblim-cmpi-fsvol','sblim-cmpi-fsvol','2020-10-15 15:15:43'), +(2095,'sblim-cmpi-network','sblim-cmpi-network','2020-10-15 15:15:43'), +(2096,'sblim-cmpi-nfsv3','sblim-cmpi-nfsv3','2020-10-15 15:15:43'), +(2097,'sblim-cmpi-nfsv4','sblim-cmpi-nfsv4','2020-10-15 15:15:43'), +(2098,'sblim-cmpi-params','sblim-cmpi-params','2020-10-15 15:15:43'), +(2099,'sblim-cmpi-sysfs','sblim-cmpi-sysfs','2020-10-15 15:15:43'), +(2100,'sblim-cmpi-syslog','sblim-cmpi-syslog','2020-10-15 15:15:43'), +(2101,'sblim-gather','sblim-gather','2020-10-15 15:15:43'), +(2102,'sblim-indication_helper','sblim-indication_helper','2020-10-15 15:15:43'), +(2103,'sblim-sfcCommon','sblim-sfcCommon','2020-10-15 15:15:43'), +(2104,'sblim-sfcb','sblim-sfcb','2020-10-15 15:15:43'), +(2105,'sblim-sfcc','sblim-sfcc','2020-10-15 15:15:43'), +(2106,'sblim-smis-hba','sblim-smis-hba','2020-10-15 15:15:43'), +(2107,'sblim-wbemcli','sblim-wbemcli','2020-10-15 15:15:43'), +(2108,'scannotation','scannotation','2020-10-15 15:15:43'), +(2109,'scap-security-guide','scap-security-guide','2020-10-15 15:15:43'), +(2110,'scap-workbench','scap-workbench','2020-10-15 15:15:43'), +(2111,'scipy','scipy','2020-10-15 15:15:43'), +(2112,'scl-utils','scl-utils','2020-10-15 15:15:43'), +(2113,'screen','screen','2020-10-15 15:15:43'), +(2114,'scrub','scrub','2020-10-15 15:15:43'), +(2115,'sdparm','sdparm','2020-10-15 15:15:43'), +(2116,'seabios','seabios','2020-10-15 15:15:43'), +(2117,'seahorse','seahorse','2020-10-15 15:15:43'), +(2118,'seahorse-nautilus','seahorse-nautilus','2020-10-15 15:15:43'), +(2119,'seahorse-sharing','seahorse-sharing','2020-10-15 15:15:43'), +(2120,'securec','securec','2020-10-15 15:15:43'), +(2121,'security-tool','security-tool','2020-10-15 15:15:43'), +(2122,'sed','sed','2020-10-15 15:15:43'), +(2123,'selinux-policy','selinux-policy','2020-10-15 15:15:43'), +(2124,'sendmail','sendmail','2020-10-15 15:15:43'), +(2125,'setools','setools','2020-10-15 15:15:43'), +(2126,'setroubleshoot','setroubleshoot','2020-10-15 15:15:43'), +(2127,'setroubleshoot-plugins','setroubleshoot-plugins','2020-10-15 15:15:43'), +(2128,'setserial','setserial','2020-10-15 15:15:43'), +(2129,'setup','setup','2020-10-15 15:15:43'), +(2130,'setuptool','setuptool','2020-10-15 15:15:43'), +(2131,'sg3_utils','sg3_utils','2020-10-15 15:15:43'), +(2132,'sgml-common','sgml-common','2020-10-15 15:15:43'), +(2133,'sgpio','sgpio','2020-10-15 15:15:43'), +(2134,'shadow','shadow','2020-10-15 15:15:43'), +(2135,'shadow-utils','shadow-utils','2020-10-15 15:15:43'), +(2136,'shared-desktop-ontologies','shared-desktop-ontologies','2020-10-15 15:15:43'), +(2137,'shared-mime-info','shared-mime-info','2020-10-15 15:15:43'), +(2138,'sharutils','sharutils','2020-10-15 15:15:43'), +(2139,'shim','shim','2020-10-15 15:15:43'), +(2140,'shim-signed','shim-signed','2020-10-15 15:15:43'), +(2141,'sign-euleros','sign-euleros','2020-10-15 15:15:43'), +(2142,'sil-abyssinica-fonts','sil-abyssinica-fonts','2020-10-15 15:15:43'), +(2143,'sil-nuosu-fonts','sil-nuosu-fonts','2020-10-15 15:15:43'), +(2144,'sil-padauk-fonts','sil-padauk-fonts','2020-10-15 15:15:43'), +(2145,'sil-scheherazade-fonts','sil-scheherazade-fonts','2020-10-15 15:15:43'), +(2146,'sip','sip','2020-10-15 15:15:43'), +(2147,'skkdic','skkdic','2020-10-15 15:15:43'), +(2148,'skopeo','skopeo','2020-10-15 15:15:43'), +(2149,'slang','slang','2020-10-15 15:15:43'), +(2150,'slapi-nis','slapi-nis','2020-10-15 15:15:43'), +(2151,'slf4j','slf4j','2020-10-15 15:15:43'), +(2152,'smartmontools','smartmontools','2020-10-15 15:15:43'), +(2153,'smc-fonts','smc-fonts','2020-10-15 15:15:43'), +(2154,'smc-tools','smc-tools','2020-10-15 15:15:43'), +(2155,'smp_utils','smp_utils','2020-10-15 15:15:43'), +(2156,'snapper','snapper','2020-10-15 15:15:43'), +(2157,'snappy','snappy','2020-10-15 15:15:43'), +(2158,'socat','socat','2020-10-15 15:15:43'), +(2159,'socket_wrapper','socket_wrapper','2020-10-15 15:15:43'), +(2160,'softhsm','softhsm','2020-10-15 15:15:43'), +(2161,'sombok','sombok','2020-10-15 15:15:43'), +(2162,'soprano','soprano','2020-10-15 15:15:43'), +(2163,'sos','sos','2020-10-15 15:15:43'), +(2164,'sound-theme-freedesktop','sound-theme-freedesktop','2020-10-15 15:15:43'), +(2165,'soundtouch','soundtouch','2020-10-15 15:15:43'), +(2166,'source-highlight','source-highlight','2020-10-15 15:15:43'), +(2167,'sox','sox','2020-10-15 15:15:43'), +(2168,'spamassassin','spamassassin','2020-10-15 15:15:44'), +(2169,'speech-dispatcher','speech-dispatcher','2020-10-15 15:15:44'), +(2170,'speex','speex','2020-10-15 15:15:44'), +(2171,'speexdsp','speexdsp','2020-10-15 15:15:44'), +(2172,'spice','spice','2020-10-15 15:15:44'), +(2173,'spice-gtk','spice-gtk','2020-10-15 15:15:44'), +(2174,'spice-protocol','spice-protocol','2020-10-15 15:15:44'), +(2175,'spice-vdagent','spice-vdagent','2020-10-15 15:15:44'), +(2176,'spice-xpi','spice-xpi','2020-10-15 15:15:44'), +(2177,'sqlite','sqlite','2020-10-15 15:15:44'), +(2178,'squashfs-tools','squashfs-tools','2020-10-15 15:15:44'), +(2179,'squid','squid','2020-10-15 15:15:44'), +(2180,'srt','srt','2020-10-15 15:15:44'), +(2181,'sscg','sscg','2020-10-15 15:15:44'), +(2182,'sssd','sssd','2020-10-15 15:15:44'), +(2183,'star','star','2020-10-15 15:15:44'), +(2184,'startup-notification','startup-notification','2020-10-15 15:15:44'), +(2185,'stax-ex','stax-ex','2020-10-15 15:15:44'), +(2186,'stax2-api','stax2-api','2020-10-15 15:15:44'), +(2187,'stix-fonts','stix-fonts','2020-10-15 15:15:44'), +(2188,'storage-kdump-tools','storage-kdump-tools','2020-10-15 15:15:44'), +(2189,'strace','strace','2020-10-15 15:15:44'), +(2190,'strigi','strigi','2020-10-15 15:15:44'), +(2191,'strongimcv','strongimcv','2020-10-15 15:15:44'), +(2192,'stunnel','stunnel','2020-10-15 15:15:44'), +(2193,'subscription-manager','subscription-manager','2020-10-15 15:15:44'), +(2194,'subunit','subunit','2020-10-15 15:15:44'), +(2195,'subversion','subversion','2020-10-15 15:15:44'), +(2196,'sudo','sudo','2020-10-15 15:15:44'), +(2197,'suitesparse','suitesparse','2020-10-15 15:15:44'), +(2198,'supermin','supermin','2020-10-15 15:15:44'), +(2199,'sushi','sushi','2020-10-15 15:15:44'), +(2200,'svrcore','svrcore','2020-10-15 15:15:44'), +(2201,'swig','swig','2020-10-15 15:15:44'), +(2202,'switcheroo-control','switcheroo-control','2020-10-15 15:15:44'), +(2203,'symlinks','symlinks','2020-10-15 15:15:44'), +(2204,'sys-custom-tool','sys-custom-tool','2020-10-15 15:15:44'), +(2205,'sysalarm','sysalarm','2020-10-15 15:15:44'), +(2206,'sysalarm-agent-pangea','sysalarm-agent-pangea','2020-10-15 15:15:44'), +(2207,'syscontainer-tools','syscontainer-tools','2020-10-15 15:15:44'), +(2208,'sysfsutils','sysfsutils','2020-10-15 15:15:44'), +(2209,'syslinux','syslinux','2020-10-15 15:15:44'), +(2210,'sysmonitor','sysmonitor','2020-10-15 15:15:44'), +(2211,'sysmonitor-kmod','sysmonitor-kmod','2020-10-15 15:15:44'), +(2212,'sysmonitorcpu','sysmonitorcpu','2020-10-15 15:15:44'), +(2213,'sysstat','sysstat','2020-10-15 15:15:44'), +(2214,'system-config-date','system-config-date','2020-10-15 15:15:44'), +(2215,'system-config-date-docs','system-config-date-docs','2020-10-15 15:15:44'), +(2216,'system-config-firewall','system-config-firewall','2020-10-15 15:15:44'), +(2217,'system-config-kdump','system-config-kdump','2020-10-15 15:15:44'), +(2218,'system-config-keyboard','system-config-keyboard','2020-10-15 15:15:44'), +(2219,'system-config-kickstart','system-config-kickstart','2020-10-15 15:15:44'), +(2220,'system-config-language','system-config-language','2020-10-15 15:15:44'), +(2221,'system-config-printer','system-config-printer','2020-10-15 15:15:44'), +(2222,'system-config-users','system-config-users','2020-10-15 15:15:44'), +(2223,'system-config-users-docs','system-config-users-docs','2020-10-15 15:15:44'), +(2224,'system-startup','system-startup','2020-10-15 15:15:44'), +(2225,'system-storage-manager','system-storage-manager','2020-10-15 15:15:44'), +(2226,'system-switch-java','system-switch-java','2020-10-15 15:15:44'), +(2227,'systemd','systemd','2020-10-15 15:15:44'), +(2228,'systemtap','systemtap','2020-10-15 15:15:44'), +(2229,'sysvinit','sysvinit','2020-10-15 15:15:44'), +(2230,'t1lib','t1lib','2020-10-15 15:15:44'), +(2231,'taglib','taglib','2020-10-15 15:15:44'), +(2232,'tagsoup','tagsoup','2020-10-15 15:15:44'), +(2233,'talk','talk','2020-10-15 15:15:44'), +(2234,'tar','tar','2020-10-15 15:15:44'), +(2235,'targetcli','targetcli','2020-10-15 15:15:44'), +(2236,'targetd','targetd','2020-10-15 15:15:44'), +(2237,'tbb','tbb','2020-10-15 15:15:44'), +(2238,'tboot','tboot','2020-10-15 15:15:44'), +(2239,'tcl','tcl','2020-10-15 15:15:44'), +(2240,'tcl-pgtcl','tcl-pgtcl','2020-10-15 15:15:44'), +(2241,'tcllib','tcllib','2020-10-15 15:15:44'), +(2242,'tcp_wrappers','tcp_wrappers','2020-10-15 15:15:44'), +(2243,'tcpdump','tcpdump','2020-10-15 15:15:44'), +(2244,'tcsh','tcsh','2020-10-15 15:15:44'), +(2245,'telepathy-farstream','telepathy-farstream','2020-10-15 15:15:44'), +(2246,'telepathy-filesystem','telepathy-filesystem','2020-10-15 15:15:44'), +(2247,'telepathy-gabble','telepathy-gabble','2020-10-15 15:15:44'), +(2248,'telepathy-glib','telepathy-glib','2020-10-15 15:15:44'), +(2249,'telepathy-haze','telepathy-haze','2020-10-15 15:15:44'), +(2250,'telepathy-logger','telepathy-logger','2020-10-15 15:15:44'), +(2251,'telepathy-mission-control','telepathy-mission-control','2020-10-15 15:15:44'), +(2252,'telepathy-salut','telepathy-salut','2020-10-15 15:15:44'), +(2253,'telnet','telnet','2020-10-15 15:15:44'), +(2254,'tex-fonts-hebrew','tex-fonts-hebrew','2020-10-15 15:15:44'), +(2255,'texi2html','texi2html','2020-10-15 15:15:44'), +(2256,'texinfo','texinfo','2020-10-15 15:15:44'), +(2257,'texlive','texlive','2020-10-15 15:15:44'), +(2258,'texlive-base','texlive-base','2020-10-15 15:15:44'), +(2259,'tftp','tftp','2020-10-15 15:15:44'), +(2260,'thai-scalable-fonts','thai-scalable-fonts','2020-10-15 15:15:44'), +(2261,'thin-provisioning-tools','thin-provisioning-tools','2020-10-15 15:15:44'), +(2262,'tibetan-machine-uni-fonts','tibetan-machine-uni-fonts','2020-10-15 15:15:44'), +(2263,'tigervnc','tigervnc','2020-10-15 15:15:44'), +(2264,'time','time','2020-10-15 15:15:44'), +(2265,'timedatex','timedatex','2020-10-15 15:15:44'), +(2266,'tiny-firewall','tiny-firewall','2020-10-15 15:15:44'), +(2267,'tinycdb','tinycdb','2020-10-15 15:15:44'), +(2268,'tinyxml2','tinyxml2','2020-10-15 15:15:44'), +(2269,'tipcutils','tipcutils','2020-10-15 15:15:44'), +(2270,'tix','tix','2020-10-15 15:15:44'), +(2271,'tk','tk','2020-10-15 15:15:44'), +(2272,'tmpwatch','tmpwatch','2020-10-15 15:15:44'), +(2273,'tmux','tmux','2020-10-15 15:15:44'), +(2274,'tn5250','tn5250','2020-10-15 15:15:44'), +(2275,'tog-pegasus','tog-pegasus','2020-10-15 15:15:44'), +(2276,'tokyocabinet','tokyocabinet','2020-10-15 15:15:44'), +(2277,'tomcat','tomcat','2020-10-15 15:15:44'), +(2278,'tomcatjss','tomcatjss','2020-10-15 15:15:44'), +(2279,'totem','totem','2020-10-15 15:15:44'), +(2280,'totem-pl-parser','totem-pl-parser','2020-10-15 15:15:44'), +(2281,'tpm-quote-tools','tpm-quote-tools','2020-10-15 15:15:44'), +(2282,'tpm-tools','tpm-tools','2020-10-15 15:15:45'), +(2283,'tpm2-abrmd','tpm2-abrmd','2020-10-15 15:15:45'), +(2284,'tpm2-abrmd-selinux','tpm2-abrmd-selinux','2020-10-15 15:15:45'), +(2285,'tpm2-tools','tpm2-tools','2020-10-15 15:15:45'), +(2286,'tpm2-tss','tpm2-tss','2020-10-15 15:15:45'), +(2287,'trace-cmd','trace-cmd','2020-10-15 15:15:45'), +(2288,'traceroute','traceroute','2020-10-15 15:15:45'), +(2289,'tracker','tracker','2020-10-15 15:15:45'), +(2290,'tracker-miners','tracker-miners','2020-10-15 15:15:45'), +(2291,'tree','tree','2020-10-15 15:15:45'), +(2292,'trousers','trousers','2020-10-15 15:15:45'), +(2293,'ttembed','ttembed','2020-10-15 15:15:45'), +(2294,'ttmkfdir','ttmkfdir','2020-10-15 15:15:45'), +(2295,'tuna','tuna','2020-10-15 15:15:45'), +(2296,'tuned','tuned','2020-10-15 15:15:45'), +(2297,'twolame','twolame','2020-10-15 15:15:45'), +(2298,'txw2','txw2','2020-10-15 15:15:45'), +(2299,'tzdata','tzdata','2020-10-15 15:15:45'), +(2300,'ublock','ublock','2020-10-15 15:15:45'), +(2301,'uboot-tools','uboot-tools','2020-10-15 15:15:45'), +(2302,'ucs-miscfixed-fonts','ucs-miscfixed-fonts','2020-10-15 15:15:45'), +(2303,'udftools','udftools','2020-10-15 15:15:45'), +(2304,'udisks2','udisks2','2020-10-15 15:15:45'), +(2305,'uid_wrapper','uid_wrapper','2020-10-15 15:15:45'), +(2306,'umockdev','umockdev','2020-10-15 15:15:45'), +(2307,'uname-build-checks','uname-build-checks','2020-10-15 15:15:45'), +(2308,'unbound','unbound','2020-10-15 15:15:45'), +(2309,'unicode-emoji','unicode-emoji','2020-10-15 15:15:45'), +(2310,'unicode-ucd','unicode-ucd','2020-10-15 15:15:45'), +(2311,'unique','unique','2020-10-15 15:15:45'), +(2312,'unique3','unique3','2020-10-15 15:15:45'), +(2313,'units','units','2020-10-15 15:15:45'), +(2314,'unixODBC','unixODBC','2020-10-15 15:15:45'), +(2315,'unzip','unzip','2020-10-15 15:15:45'), +(2316,'update-motd','update-motd','2020-10-15 15:15:45'), +(2317,'upower','upower','2020-10-15 15:15:45'), +(2318,'urlview','urlview','2020-10-15 15:15:45'), +(2319,'urw-base35-fonts','urw-base35-fonts','2020-10-15 15:15:45'), +(2320,'urw-fonts','urw-fonts','2020-10-15 15:15:45'), +(2321,'usb_modeswitch','usb_modeswitch','2020-10-15 15:15:45'), +(2322,'usb_modeswitch-data','usb_modeswitch-data','2020-10-15 15:15:45'), +(2323,'usbmuxd','usbmuxd','2020-10-15 15:15:45'), +(2324,'usbredir','usbredir','2020-10-15 15:15:45'), +(2325,'usbutils','usbutils','2020-10-15 15:15:45'), +(2326,'usermode','usermode','2020-10-15 15:15:45'), +(2327,'userspace-rcu','userspace-rcu','2020-10-15 15:15:45'), +(2328,'ustr','ustr','2020-10-15 15:15:45'), +(2329,'utf8proc','utf8proc','2020-10-15 15:15:45'), +(2330,'uthash','uthash','2020-10-15 15:15:45'), +(2331,'util-linux','util-linux','2020-10-15 15:15:45'), +(2332,'uuid','uuid','2020-10-15 15:15:45'), +(2333,'v4l-utils','v4l-utils','2020-10-15 15:15:45'), +(2334,'vala','vala','2020-10-15 15:15:45'), +(2335,'valgrind','valgrind','2020-10-15 15:15:45'), +(2336,'vboot-utils','vboot-utils','2020-10-15 15:15:45'), +(2337,'vconfig','vconfig','2020-10-15 15:15:45'), +(2338,'velocity','velocity','2020-10-15 15:15:45'), +(2339,'vemana2000-fonts','vemana2000-fonts','2020-10-15 15:15:45'), +(2340,'vhostmd','vhostmd','2020-10-15 15:15:45'), +(2341,'viewSec','viewSec','2020-10-15 15:15:45'), +(2342,'vim','vim','2020-10-15 15:15:45'), +(2343,'vinagre','vinagre','2020-10-15 15:15:45'), +(2344,'vino','vino','2020-10-15 15:15:45'), +(2345,'virglrenderer','virglrenderer','2020-10-15 15:15:45'), +(2346,'virt-viewer','virt-viewer','2020-10-15 15:15:45'), +(2347,'virt-what','virt-what','2020-10-15 15:15:45'), +(2348,'virtuoso-opensource','virtuoso-opensource','2020-10-15 15:15:45'), +(2349,'vlgothic-fonts','vlgothic-fonts','2020-10-15 15:15:45'), +(2350,'vmdrivers','vmdrivers','2020-10-15 15:15:45'), +(2351,'volume_key','volume_key','2020-10-15 15:15:45'), +(2352,'vsftpd','vsftpd','2020-10-15 15:15:45'), +(2353,'vte291','vte291','2020-10-15 15:15:45'), +(2354,'vte3','vte3','2020-10-15 15:15:45'), +(2355,'vulkan-headers','vulkan-headers','2020-10-15 15:15:45'), +(2356,'vulkan-loader','vulkan-loader','2020-10-15 15:15:45'), +(2357,'watchdog','watchdog','2020-10-15 15:15:45'), +(2358,'wavpack','wavpack','2020-10-15 15:15:45'), +(2359,'wayland','wayland','2020-10-15 15:15:45'), +(2360,'wayland-protocols','wayland-protocols','2020-10-15 15:15:45'), +(2361,'webkit2gtk3','webkit2gtk3','2020-10-15 15:15:45'), +(2362,'webkitgtk3','webkitgtk3','2020-10-15 15:15:45'), +(2363,'webkitgtk4','webkitgtk4','2020-10-15 15:15:45'), +(2364,'webrtc-audio-processing','webrtc-audio-processing','2020-10-15 15:15:45'), +(2365,'wget','wget','2020-10-15 15:15:45'), +(2366,'which','which','2020-10-15 15:15:45'), +(2367,'whois','whois','2020-10-15 15:15:45'), +(2368,'wireshark','wireshark','2020-10-15 15:15:45'), +(2369,'wisdom','wisdom','2020-10-15 15:15:45'), +(2370,'woff2','woff2','2020-10-15 15:15:45'), +(2371,'words','words','2020-10-15 15:15:45'), +(2372,'wpa_supplicant','wpa_supplicant','2020-10-15 15:15:45'), +(2373,'wqy-microhei-fonts','wqy-microhei-fonts','2020-10-15 15:15:45'), +(2374,'wqy-zenhei-fonts','wqy-zenhei-fonts','2020-10-15 15:15:45'), +(2375,'ws-jaxme','ws-jaxme','2020-10-15 15:15:45'), +(2376,'wsmancli','wsmancli','2020-10-15 15:15:45'), +(2377,'wvdial','wvdial','2020-10-15 15:15:45'), +(2378,'x3270','x3270','2020-10-15 15:15:45'), +(2379,'x86info','x86info','2020-10-15 15:15:45'), +(2380,'xalan-j2','xalan-j2','2020-10-15 15:15:45'), +(2381,'xcb-proto','xcb-proto','2020-10-15 15:15:45'), +(2382,'xcb-util','xcb-util','2020-10-15 15:15:45'), +(2383,'xcb-util-image','xcb-util-image','2020-10-15 15:15:45'), +(2384,'xcb-util-keysyms','xcb-util-keysyms','2020-10-15 15:15:45'), +(2385,'xcb-util-renderutil','xcb-util-renderutil','2020-10-15 15:15:45'), +(2386,'xcb-util-wm','xcb-util-wm','2020-10-15 15:15:45'), +(2387,'xdelta','xdelta','2020-10-15 15:15:45'), +(2388,'xdg-desktop-portal-gtk','xdg-desktop-portal-gtk','2020-10-15 15:15:45'), +(2389,'xdg-user-dirs','xdg-user-dirs','2020-10-15 15:15:45'), +(2390,'xdg-user-dirs-gtk','xdg-user-dirs-gtk','2020-10-15 15:15:45'), +(2391,'xdg-utils','xdg-utils','2020-10-15 15:15:45'), +(2392,'xerces-j2','xerces-j2','2020-10-15 15:15:45'), +(2393,'xferstats','xferstats','2020-10-15 15:15:45'), +(2394,'xfsdump','xfsdump','2020-10-15 15:15:45'), +(2395,'xfsprogs','xfsprogs','2020-10-15 15:15:45'), +(2396,'xguest','xguest','2020-10-15 15:15:45'), +(2397,'xinetd','xinetd','2020-10-15 15:15:45'), +(2398,'xkeyboard-config','xkeyboard-config','2020-10-15 15:15:45'), +(2399,'xml-commons-apis','xml-commons-apis','2020-10-15 15:15:45'), +(2400,'xml-commons-resolver','xml-commons-resolver','2020-10-15 15:15:45'), +(2401,'xmlrpc','xmlrpc','2020-10-15 15:15:45'), +(2402,'xmlrpc-c','xmlrpc-c','2020-10-15 15:15:45'), +(2403,'xmlsec1','xmlsec1','2020-10-15 15:15:45'), +(2404,'xmlstarlet','xmlstarlet','2020-10-15 15:15:46'), +(2405,'xmlto','xmlto','2020-10-15 15:15:46'), +(2406,'xmltoman','xmltoman','2020-10-15 15:15:46'), +(2407,'xmms','xmms','2020-10-15 15:15:46'), +(2408,'xorg-x11-apps','xorg-x11-apps','2020-10-15 15:15:46'), +(2409,'xorg-x11-docs','xorg-x11-docs','2020-10-15 15:15:46'), +(2410,'xorg-x11-drivers','xorg-x11-drivers','2020-10-15 15:15:46'), +(2411,'xorg-x11-drv-ati','xorg-x11-drv-ati','2020-10-15 15:15:46'), +(2412,'xorg-x11-drv-dummy','xorg-x11-drv-dummy','2020-10-15 15:15:46'), +(2413,'xorg-x11-drv-evdev','xorg-x11-drv-evdev','2020-10-15 15:15:46'), +(2414,'xorg-x11-drv-fbdev','xorg-x11-drv-fbdev','2020-10-15 15:15:46'), +(2415,'xorg-x11-drv-intel','xorg-x11-drv-intel','2020-10-15 15:15:46'), +(2416,'xorg-x11-drv-keyboard','xorg-x11-drv-keyboard','2020-10-15 15:15:46'), +(2417,'xorg-x11-drv-libinput','xorg-x11-drv-libinput','2020-10-15 15:15:46'), +(2418,'xorg-x11-drv-mouse','xorg-x11-drv-mouse','2020-10-15 15:15:46'), +(2419,'xorg-x11-drv-nouveau','xorg-x11-drv-nouveau','2020-10-15 15:15:46'), +(2420,'xorg-x11-drv-openchrome','xorg-x11-drv-openchrome','2020-10-15 15:15:46'), +(2421,'xorg-x11-drv-qxl','xorg-x11-drv-qxl','2020-10-15 15:15:46'), +(2422,'xorg-x11-drv-synaptics','xorg-x11-drv-synaptics','2020-10-15 15:15:46'), +(2423,'xorg-x11-drv-v4l','xorg-x11-drv-v4l','2020-10-15 15:15:46'), +(2424,'xorg-x11-drv-vesa','xorg-x11-drv-vesa','2020-10-15 15:15:46'), +(2425,'xorg-x11-drv-vmmouse','xorg-x11-drv-vmmouse','2020-10-15 15:15:46'), +(2426,'xorg-x11-drv-vmware','xorg-x11-drv-vmware','2020-10-15 15:15:46'), +(2427,'xorg-x11-drv-void','xorg-x11-drv-void','2020-10-15 15:15:46'), +(2428,'xorg-x11-drv-wacom','xorg-x11-drv-wacom','2020-10-15 15:15:46'), +(2429,'xorg-x11-font-utils','xorg-x11-font-utils','2020-10-15 15:15:46'), +(2430,'xorg-x11-fonts','xorg-x11-fonts','2020-10-15 15:15:46'), +(2431,'xorg-x11-proto-devel','xorg-x11-proto-devel','2020-10-15 15:15:46'), +(2432,'xorg-x11-server','xorg-x11-server,xorg-server','2020-10-15 15:15:46'), +(2433,'xorg-x11-server-utils','xorg-x11-server-utils','2020-10-15 15:15:46'), +(2434,'xorg-x11-util-macros','xorg-x11-util-macros','2020-10-15 15:15:46'), +(2435,'xorg-x11-utils','xorg-x11-utils','2020-10-15 15:15:46'), +(2436,'xorg-x11-xauth','xorg-x11-xauth','2020-10-15 15:15:46'), +(2437,'xorg-x11-xbitmaps','xorg-x11-xbitmaps','2020-10-15 15:15:46'), +(2438,'xorg-x11-xinit','xorg-x11-xinit','2020-10-15 15:15:46'), +(2439,'xorg-x11-xkb-utils','xorg-x11-xkb-utils','2020-10-15 15:15:46'), +(2440,'xorg-x11-xtrans-devel','xorg-x11-xtrans-devel','2020-10-15 15:15:46'), +(2441,'xpp3','xpp3','2020-10-15 15:15:46'), +(2442,'xrestop','xrestop','2020-10-15 15:15:46'), +(2443,'xsane','xsane','2020-10-15 15:15:46'), +(2444,'xsettings-kde','xsettings-kde','2020-10-15 15:15:46'), +(2445,'xsom','xsom','2020-10-15 15:15:46'), +(2446,'xterm','xterm','2020-10-15 15:15:46'), +(2447,'xulrunner','xulrunner','2020-10-15 15:15:46'), +(2448,'xvattr','xvattr','2020-10-15 15:15:46'), +(2449,'xz','xz','2020-10-15 15:15:46'), +(2450,'yajl','yajl','2020-10-15 15:15:46'), +(2451,'yaml-cpp','yaml-cpp','2020-10-15 15:15:46'), +(2452,'yasm','yasm','2020-10-15 15:15:46'), +(2453,'yelp','yelp','2020-10-15 15:15:46'), +(2454,'yelp-tools','yelp-tools','2020-10-15 15:15:46'), +(2455,'yelp-xsl','yelp-xsl','2020-10-15 15:15:46'), +(2456,'yp-tools','yp-tools','2020-10-15 15:15:46'), +(2457,'ypbind','ypbind','2020-10-15 15:15:46'), +(2458,'ypserv','ypserv','2020-10-15 15:15:46'), +(2459,'yum','yum','2020-10-15 15:15:46'), +(2460,'yum-langpacks','yum-langpacks','2020-10-15 15:15:46'), +(2461,'yum-metadata-parser','yum-metadata-parser','2020-10-15 15:15:46'), +(2462,'yum-utils','yum-utils','2020-10-15 15:15:46'), +(2463,'zd1211-firmware','zd1211-firmware','2020-10-15 15:15:46'), +(2464,'zenity','zenity','2020-10-15 15:15:46'), +(2465,'zerofree','zerofree','2020-10-15 15:15:46'), +(2466,'zip','zip','2020-10-15 15:15:46'), +(2467,'zlib','zlib','2020-10-15 15:15:46'), +(2468,'zopfli','zopfli','2020-10-15 15:15:46'), +(2469,'zsh','zsh','2020-10-15 15:15:46'), +(2470,'zstd','zstd','2020-10-15 15:15:46'), +(2471,'zziplib','zziplib','2020-10-15 15:15:46'); + /*Table structure for table `cve_security_reviewer` */ DROP TABLE IF EXISTS `cve_security_reviewer`; @@ -68,6 +2579,15 @@ CREATE TABLE `cve_security_reviewer` ( UNIQUE KEY `name_space` (`name_space`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; +/*Data for the table `cve_security_reviewer` */ + +insert into `cve_security_reviewer`(`id`,`name_space`) values +(1,'liujingang09'), +(5,'xieweizhi'), +(2,'yangli69393'), +(3,'yanxiaobing2020'), +(4,'zhujianwei001'); + /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; diff --git a/doc/sql/db_struct.sql b/doc/sql/db_struct.sql index 37ccd60..f4984fd 100644 --- a/doc/sql/db_struct.sql +++ b/doc/sql/db_struct.sql @@ -38,7 +38,7 @@ CREATE TABLE `cve_email_list` ( `email_type` tinyint NOT NULL DEFAULT '1', PRIMARY KEY (`id`), KEY `cve_email_list_email_type` (`email_type`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; /*Table structure for table `cve_export_record` */ @@ -61,7 +61,6 @@ CREATE TABLE `cve_git_open_euler` ( `package_id` bigint NOT NULL DEFAULT '0', `package_name` varchar(256) NOT NULL DEFAULT '', `version` varchar(64) NOT NULL DEFAULT '', - `release` varchar(128) NOT NULL DEFAULT '', `origin_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `license` varchar(4096) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `feature` varchar(128) NOT NULL DEFAULT '', @@ -78,12 +77,14 @@ CREATE TABLE `cve_git_open_euler` ( `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `delete_time` datetime DEFAULT NULL, + `cpe_packname` varchar(512) DEFAULT NULL, + `releases` varchar(128) NOT NULL DEFAULT '', PRIMARY KEY (`git_id`), UNIQUE KEY `cve_git_open_euler_package_version` (`package_name`,`version`), KEY `cve_git_open_euler_package_id` (`package_id`), KEY `cve_git_open_euler_version` (`version`), KEY `cve_git_open_euler_table_id` (`table_id`) -) ENGINE=InnoDB AUTO_INCREMENT=10460 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `cve_git_open_euler_table_relate` */ @@ -97,7 +98,7 @@ CREATE TABLE `cve_git_open_euler_table_relate` ( PRIMARY KEY (`relate_id`), UNIQUE KEY `cve_git_open_euler_table_gitid_tab_un` (`git_id`,`table_name`), KEY `cve_git_open_euler_table_relate_git_id` (`git_id`) -) ENGINE=InnoDB AUTO_INCREMENT=4748 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `cve_git_package_info` */ @@ -128,7 +129,7 @@ CREATE TABLE `cve_git_package_info` ( KEY `cve_git_package_info_git_id` (`git_id`), KEY `cve_git_package_info_git_ids` (`git_ids`), KEY `cve_git_package_info_version` (`version`) -) ENGINE=InnoDB AUTO_INCREMENT=1244 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `cve_git_package_table` */ @@ -164,7 +165,7 @@ CREATE TABLE `cve_git_sub_pack` ( PRIMARY KEY (`sub_id`), KEY `cve_git_sub_pack_detail_id` (`detail_id`), KEY `cve_git_sub_pack_ids` (`ids`) -) ENGINE=InnoDB AUTO_INCREMENT=3408 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `cve_git_sub_pack_provides` */ @@ -179,7 +180,7 @@ CREATE TABLE `cve_git_sub_pack_provides` ( PRIMARY KEY (`provide_id`), KEY `cve_git_sub_pack_provides_sub_id` (`sub_id`), KEY `cve_git_sub_pack_provides_ids` (`ids`) -) ENGINE=InnoDB AUTO_INCREMENT=18830 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `cve_git_sub_pack_require` */ @@ -194,7 +195,7 @@ CREATE TABLE `cve_git_sub_pack_require` ( PRIMARY KEY (`require_id`), KEY `cve_git_sub_pack_require_sub_id` (`sub_id`), KEY `cve_git_sub_pack_require_ids` (`ids`) -) ENGINE=InnoDB AUTO_INCREMENT=19139 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `cve_git_sub_pack_requiredby` */ @@ -206,7 +207,7 @@ CREATE TABLE `cve_git_sub_pack_requiredby` ( `requiredb` varchar(256) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `cve_git_sub_pack_requiredby_provide_id` (`provide_id`) -) ENGINE=InnoDB AUTO_INCREMENT=3428 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `cve_gite_origin_issue` */ @@ -734,7 +735,7 @@ CREATE TABLE `cve_package_cpe` ( `create_time` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`), KEY `cve_package_cpe_packname` (`packname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=2472 DEFAULT CHARSET=utf8; /*Table structure for table `cve_score` */ diff --git a/main.go b/main.go index be8a6b5..6a1e7d1 100644 --- a/main.go +++ b/main.go @@ -2,25 +2,21 @@ package main import ( "cvevulner/common" - _"cvevulner/models" + _ "cvevulner/models" _ "cvevulner/routers" "cvevulner/task" "github.com/astaxie/beego" ) - func init() { - // 初始化全局变量 + // Initialize global variables common.InitGlobal() - // 初始化日志 + // Initialization log common.LogInit() - // 初始化数据库 + // Initialize the database //models.Initdb() - // 初始化定时任务 + // Initialize a scheduled task task.InitTask() - // test 后续删除 - //tests.Init() - } func main() { diff --git a/models/cve.go b/models/cve.go index 1919d0d..ab28d4e 100644 --- a/models/cve.go +++ b/models/cve.go @@ -640,8 +640,6 @@ func GetCanExportVulnCenterCount() (count int64) { }{} o := orm.NewOrm() err := o.Raw(sql).QueryRow(&res) - //qs := o.QueryTable("cve_vuln_center") - //cot, err := qs.Filter("is_export", 3).Count() //.Filter("cve_status", 2) if err != nil { logs.Error(err) return 0 diff --git a/models/cvedetail.go b/models/cvedetail.go index d9535e6..930fcd4 100644 --- a/models/cvedetail.go +++ b/models/cvedetail.go @@ -147,4 +147,4 @@ func GetOriginFixSuggestRefTag(fixRefId int64, oufrt *[]OriginUpstreamFixSuggest logs.Error("cve_origin_upstream_fix_suggest_ref_tag fix_ref_id: ", fixRefId, " 不存在") } return 0, err -} \ No newline at end of file +} diff --git a/models/excel.go b/models/excel.go index e0c8831..3b5cb3d 100644 --- a/models/excel.go +++ b/models/excel.go @@ -22,7 +22,7 @@ type ExcelExport struct { } //Insert Insert a generated excel file record -func (er ExportRecord) Insert() error { +func (er ExportRecord) Insert() error { o := orm.NewOrm() _, err := o.Insert(&er) return err diff --git a/models/giteeissue.go b/models/giteeissue.go index 369ab62..0c2d0c6 100644 --- a/models/giteeissue.go +++ b/models/giteeissue.go @@ -204,17 +204,14 @@ func parseOldTplToLoopHole(lp *Loophole, body string) { } sm = util.RegexpCveBriefDesc.FindAllStringSubmatch(body, -1) if len(sm) > 0 && len(sm[0]) > 0 { - //lp.BriefIntroduction = util.TrimString(sm[0][1]) lp.BriefIntroduction = sm[0][1] } sm = util.RegexpCveInfluencesDesc.FindAllStringSubmatch(body, -1) if len(sm) > 0 && len(sm[0]) > 0 { - //lp.Influences = util.TrimString(sm[0][1]) lp.Influences = sm[0][1] } sm = util.RegexpCvePrincipleDesc.FindAllStringSubmatch(body, -1) if len(sm) > 0 && len(sm[0]) > 0 { - //lp.Principle = util.TrimString(sm[0][1]) lp.Principle = sm[0][1] } sm = util.RegexpCveOpScore.FindAllStringSubmatch(body, -1) @@ -234,14 +231,12 @@ func parseOldTplToLoopHole(lp *Loophole, body string) { sm = util.RegexpCvePlannedMeasures.FindAllStringSubmatch(body, -1) if len(sm) > 0 { if len(sm[0]) > 0 { - //lp.AvoidScheme = util.TrimString(sm[0][1]) lp.AvoidScheme = sm[0][1] } } else { sm = util.RegexpCvePlannedMeasures1.FindAllStringSubmatch(body, -1) if len(sm) > 0 && len(sm[0]) > 0 { - //lp.AvoidScheme = util.TrimString(sm[0][1]) lp.AvoidScheme = sm[0][1] } } @@ -288,10 +283,9 @@ func parseNewTplToLoopHole(lp *Loophole, body string) { lp.CvsVector = v } } - sm = util.RegexpCveBriefDesc.FindAllStringSubmatch(body, -1) + sm = util.RegexpCveBriefDescNew.FindAllStringSubmatch(body, -1) if len(sm) > 0 && len(sm[0]) > 0 { lp.BriefIntroduction = strings.Replace(sm[0][1], "二、漏洞分析结构反馈", "", -1) - //lp.BriefIntroduction = sm[0][1] } sm = util.RegexpCveInfluencesDescNew.FindAllStringSubmatch(body, -1) if len(sm) > 0 && len(sm[0]) > 0 { diff --git a/models/hookevent.go b/models/hookevent.go index 6b8f4d1..6bd774a 100644 --- a/models/hookevent.go +++ b/models/hookevent.go @@ -1,15 +1,21 @@ package models -import "time" + +import ( + "strings" + "time" +) + + //HookUser gitee user model type HookUser struct { Id int64 - Login string //同下username - Name string //用户的昵称 - Email string //用户的邮箱 - UserName string `json:"username"` //用户的码云个人空间地址 - AvatarUrl string `json:"avatar_url"` //用户头像 - SiteAdmin bool `json:"site_admin"` //是不是管理员 + Login string //Same as username + Name string //User's nickname + Email string //User's mailbox + UserName string `json:"username"` //User's code cloud personal space address + AvatarUrl string `json:"avatar_url"` //profile picture + SiteAdmin bool `json:"site_admin"` //Is it an administrator } @@ -18,8 +24,9 @@ type HookIssue struct { Id int64 Number string Title string + Labels []IssueLabel `json:"labels"` State string - HtmlUrl string `json:"html_url"` //评论在码云上的url + HtmlUrl string `json:"html_url"` //Comment on the url on the code cloud Body string StateName string `json:"state_name"` User HookUser @@ -32,6 +39,13 @@ type HookIssue struct { SecurityHole bool `json:"security_hole"` } +//IssueLabel issue label +type IssueLabel struct { + Id string `json:"id"` + Name string `json:"name"` + Color string `json:"color"` +} + //HookRepository gitee repository model type HookRepository struct { Id int64 @@ -46,47 +60,74 @@ type HookRepository struct { //HookComment gitee comment model type HookComment struct { - User *HookUser //评论的作者信息 - HtmlUrl string `json:"html_url"` //评论在码云上的url + User *HookUser //Comment author information + HtmlUrl string `json:"html_url"` //Comment on the url on the code cloud Id int64 - Body string //评论的内容 + Body string //Comment content CreateAt time.Time `json:"create_at"` UpdateAt time.Time `json:"update_at"` } //CommentPayload hook data triggered by a comment task operation type CommentPayload struct { - Action string // 动作 comment + Action string // Action comment HookName string `json:"hook_name"` - Password string //钩子的密码 - HookId int64 `json:"hook_id"` //钩子ID - HookUrl string `json:"hook_url"` //钩子的路由 + Password string //The password of the hook + HookId int64 `json:"hook_id"` //Hook ID + HookUrl string `json:"hook_url"` //Hook routing Timestamp string - Sign string //钩子根据密钥计算的签名 - Comment *HookComment //评论数据 - Note string //被评论目标的评论数据 - NoteableType string `json:"noteable_type"` //被评论的目标类型 - NoteableId int64 `json:"noteable_id"` //被评论的目标ID - Title string //被评论的目标标题 - PerId string `json:"per_iid"` //被评论的目标标识 - ShortCommitId string `json:"short_commit_id"` //被评论的commit提交中的简短sha + Sign string //The signature calculated by the hook based on the key + Comment *HookComment //Comment data + Note string //Comment data of the commented target + NoteableType string `json:"noteable_type"` //Target type being reviewed + NoteableId int64 `json:"noteable_id"` //ID of the target being reviewed + Title string //Target title being commented + PerId string `json:"per_iid"` //Target ID being reviewed + ShortCommitId string `json:"short_commit_id"` //The short sha in the commented commit submission Issue *HookIssue } type IssuePayload struct { - HookId int64 `json:"hook_id"` // 钩子 id。 - HookUrl string `json:"hook_url"` // 钩子路由。 - HookName string `json:"hook_name"` // 钩子名,固定为 issue_hooks。 - Password string `json:"password"` // 钩子密码 - Action string //issue 状态 - Issue HookIssue //issue 信息 - Sender HookUser //触发 hook 的用户信息。 - TargetUser HookUser `json:"target_user"` //被委托处理 issue 的用户信息 - User HookUser //issue 的创建者 - Assignee HookUser //issue 的负责人 - Iid string //issue 的标识 - Title string //issue 的标题 - Description string //issue 的描述 - State string //issue 的状态 - Url string //issue 在码云上的url + HookId int64 `json:"hook_id"` // Hook id. + HookUrl string `json:"hook_url"` // route + HookName string `json:"hook_name"` // issue_hooks。 + Password string `json:"password"` // Hook code + Action string //issue status + Issue HookIssue //issue information + Sender HookUser //The user information that triggered the hook. + TargetUser HookUser `json:"target_user"` //User information entrusted to handle the issue + User HookUser //issue creator + Assignee HookUser //issue principal + Iid string //issue Logo + Title string //issue title + Description string //issue description + State string //issue status + Url string //issue URL on code cloud +} + +//GetLabelsStr labels slice to string +func (ih *HookIssue) GetLabelsStr() (labels string) { + var lb []string + for _, v := range ih.Labels { + lb = append(lb, v.Name) + } + return strings.Join(lb, ",") +} + +//ReplaceLabelToStr delete old label and add new label and return label string +func (ih HookIssue) ReplaceLabelToStr(oLabel, nLabel string) (labels string) { + var lb []string + es := false + for _, v := range ih.Labels { + if v.Name == nLabel { + es = true + } + if v.Name != oLabel { + lb = append(lb, v.Name) + } + } + if !es { + lb = append(lb, nLabel) + } + return strings.Join(lb, ",") } diff --git a/models/initdb.go b/models/initdb.go index 6c40301..c51bde5 100644 --- a/models/initdb.go +++ b/models/initdb.go @@ -13,10 +13,11 @@ import ( func init() { Initdb() } + //InitDb init database func Initdb() { BConfig, err := config.NewConfig("ini", "conf/app.conf") - if err != nil{ + if err != nil { logs.Error("config init error:", err) return } @@ -26,7 +27,6 @@ func Initdb() { dbuser := BConfig.String("mysql::dbuser") dbname := BConfig.String("mysql::dbname") dbpwd := BConfig.String("mysql::dbpwd") - //dbpwd := os.Getenv("dbpwd") key := beego.AppConfig.String("key") key1 := []byte(key) bytes, _ := common.DePwdCode(dbpwd, key1) @@ -59,9 +59,9 @@ func Initdb() { } } -func ConnDb() (*sql.DB, error){ +func ConnDb() (*sql.DB, error) { BConfig, err := config.NewConfig("ini", "conf/app.conf") - if err != nil{ + if err != nil { logs.Error("config init error:", err) return nil, err } @@ -70,14 +70,13 @@ func ConnDb() (*sql.DB, error){ dbuser := BConfig.String("mysql::dbuser") dbname := BConfig.String("mysql::dbname") dbpwd := BConfig.String("mysql::dbpwd") - //dbpwd := os.Getenv("dbpwd") key := beego.AppConfig.String("key") key1 := []byte(key) bytes, _ := common.DePwdCode(dbpwd, key1) dns := dbuser + ":" + string(bytes) + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8" db, err := sql.Open("mysql", dns) if err != nil { - logs.Error("连接数据库出错", err, "@tcp(" + dbhost + ":" + dbport + ")/" + dbname) + logs.Error("连接数据库出错", err, "@tcp("+dbhost+":"+dbport+")/"+dbname) return nil, err } logs.Info("数据库连接成功, db: ", db) diff --git a/models/issue.go b/models/issue.go index 3e9a4eb..663a857 100644 --- a/models/issue.go +++ b/models/issue.go @@ -30,7 +30,7 @@ func QueryIssueCveByNum(cvenum, repoPath string) (GiteOriginIssue, bool) { func QueryIssue(days string, prcnum int) ([]VulnCenter, error) { o := orm.NewOrm() var vc []VulnCenter - num, err := o.Raw("select cve_id,cve_num,cve_desc,cve_version,repair_time," + + num, err := o.Raw("select cve_id,cve_num,cve_desc,cve_version,repair_time,"+ "pack_name,cve_url,cve_level,data_source,update_time,is_export,cve_detail_url"+ " from cve_vuln_center where update_time >= ? and cve_status in (?, ?) "+ "order by cve_id asc limit ?", days, 0, 1, prcnum).QueryRows(&vc) @@ -54,6 +54,7 @@ func GetVulnCenterByCVEID(vc *VulnCenter, cveId int64, fields ...string) error { err := o.Raw(sqlStr, cveId).QueryRow(vc) return err } + //QueryIssueSecurity 查找安全公告 func QueryIssueSecurity(cveId int64) (SecurityNotice, error) { o := orm.NewOrm() @@ -172,32 +173,6 @@ func UpdatePackageByCveId(pkgStr string, cveId int64) error { } } return nil - //===== 先删除 再修改 ===== - /*delPkgSql := `DELETE FROM cve_package WHERE sec_id = ?` - err = o.Begin() - if err != nil { - return err - } - _, err = o.Raw(delPkgSql, sec.SecID).Exec() - if err != nil { - err = o.Rollback() - return err - } - pkgVals := make([]Package, 0) - for _, v := range ps { - pkgUrl := fmt.Sprintf(`https://repo.openeuler.org/openEuler-20.03-LTS/update/aarch64/Packages/%s`, v) - pv := Package{SecID: sec.SecID, PackName: v, PackUrl: pkgUrl} - pkgVals = append(pkgVals, pv) - } - _, err = o.InsertMulti(1, pkgVals) - if err != nil { - _ = o.Rollback() - return err - } - err = o.Commit() - if err != nil { - return err - }*/ } return nil } @@ -216,7 +191,6 @@ func CreateIssueTemplate(it *IssueTemplate) (issTempId int64, err error) { errx := o.Raw("select *"+ " from cve_issue_template where cve_id = ? ", it.CveId).QueryRow(&localIt) if errx != nil { - // 创建 var issTempId int64 if issTempId, err = o.Insert(it); err == nil { logs.Info("insert cve_issue_template success, issTempId: ", issTempId, "cveNum: ", it.CveNum) @@ -226,7 +200,6 @@ func CreateIssueTemplate(it *IssueTemplate) (issTempId int64, err error) { } return issTempId, nil } else { - // 更新 it.TemplateId = localIt.TemplateId if num, err := o.Update(it); err == nil { logs.Info("update cve_issue_template success, num: ", num, "cveNum: ", it.CveNum) @@ -360,8 +333,8 @@ func GetIssueTplByCveNum(num string) (list []IssueTemplate, err error) { return } -func GetIssueTplGroupByRepo()(list []IssueTemplate ,err error) { +func GetIssueTplGroupByRepo() (list []IssueTemplate, err error) { o := orm.NewOrm() - _,err = o.QueryTable("cve_issue_template").GroupBy("repo").All(&list) + _, err = o.QueryTable("cve_issue_template").GroupBy("repo").All(&list) return } diff --git a/models/login.go b/models/login.go index 6e391ee..b179c67 100644 --- a/models/login.go +++ b/models/login.go @@ -15,15 +15,14 @@ func GetCveUserByUser(username, pwd string) (maps []orm.Params, err error) { return nil, err } -func UpdateToken(Userid interface{} ,token string, newTime time.Time) bool{ - o:=orm.NewOrm() +func UpdateToken(Userid interface{}, token string, newTime time.Time) bool { + o := orm.NewOrm() _ = o.Raw("update cve_other_user set aes_key=?,expiration_time=? where user_id=?", token, newTime, Userid).QueryRow() return true } -func GetUserByToken(token string, ou * OtherUser) (err error) { +func GetUserByToken(token string, ou *OtherUser) (err error) { o := orm.NewOrm() err = o.Raw("select * FROM cve_other_user WHERE aes_key=?", token).QueryRow(ou) return err } - diff --git a/models/modeldb.go b/models/modeldb.go index f1c1375..ac15aa4 100644 --- a/models/modeldb.go +++ b/models/modeldb.go @@ -9,14 +9,14 @@ import ( ) type IpWhite struct { - IPId int `orm:"pk;auto;column(ip_id)"` // 自增的值 + IPId int `orm:"pk;auto;column(ip_id)"` MachineName string `orm:"size(128);column(machine_name)" description:"机器名称"` MachineIp string `orm:"size(128);column(machine_ip);index" description:"机器ip"` AccessCount int64 `orm:"default(0);column(access_count)" description:"0: 不受限制; 10000:可以连续访问次数"` } type OtherUser struct { - UerId int `orm:"pk;auto;column(user_id)"` // 自增的值 + UerId int `orm:"pk;auto;column(user_id)"` UserName string `orm:"size(64);column(user_name)"` PassWord string `orm:"size(256);column(pass_word)"` AesKey string `orm:"size(512);colnum(aes_key)"` @@ -201,7 +201,7 @@ type GitOpenEuler struct { PackageId int64 `orm:"index;column(package_id)" description:"获取到的包id"` PackageName string `orm:"column(package_name);size(256)" description:"包名称"` Version string `orm:"size(64);column(version);index" description:"版本号"` - Release string `orm:"size(128);column(release)" description:"release 版本号"` + Release string `orm:"size(128);column(releases)" description:"releases 版本号"` OriginUrl string `orm:"size(512);column(origin_url)" description:"gitee上的地址"` License string `orm:"size(4096);column(license)" description:"license"` Feature string `orm:"size(128);column(feature)" description:"特性"` @@ -450,7 +450,7 @@ type OriginUpstreamFixSuggestRefTag struct { Name string `orm:"size(512);column(name);null" description:"名称"` } -//GiteOriginIssue 码云上已经存在的issue +//GiteOriginIssue Issues that already exist on Code Cloud type GiteOriginIssue struct { Id int64 `orm:"pk;auto"` IssueId int64 `json:"issue_id" orm:"unique"` @@ -510,7 +510,7 @@ type GitRepoGroups struct { GroupName string `orm:"index"` } -//GiteRepo 码云仓库 +//GiteRepo Code Cloud repo type GiteRepo struct { RepoId int64 `orm:"pk;auto;column(repo_id)"` GroupId int64 `orm:"index;column(group_id)" description:"GitRepoGroups 外键"` @@ -526,7 +526,7 @@ type GiteRepo struct { DeleteTime string `orm:"type(datetime);column(delete_time);null"` } -//GiteMember 码云仓库成员 +//GiteMember Members of Code Cloud repo type GiteRepoMember struct { MemBerId int64 `orm:"pk;auto;column(repo_id)"` GroupId int64 `orm:"index;column(group_id)" description:"GitRepoGroups 外键"` @@ -537,7 +537,7 @@ type GiteRepoMember struct { DeleteTime string `orm:"type(datetime);column(delete_time);null"` } -//GiteRepoBranch 码云仓库分支 +//GiteRepoBranch Code Cloud repo Branch type GiteRepoBranch struct { Id int64 `orm:"pk;auto"` RepoId int64 `orm:"index;column(repo_id)" description:"GiteRepo 外键"` @@ -553,16 +553,16 @@ type ExportRecord struct { } type PackageCpe struct { - Id int64 `orm:"pk;auto"` - PackName string `orm:"size(512);column(packname);index;null" description:"Cve对应的openEuler包名称(或者影响的包名)"` - CpePackName string `orm:"size(512);column(cpe_packname);null" description:"openEuler对应的cpe包名称(或者影响的包名)"` - CreateTime string `orm:"size(32);column(create_time);null" description:"createtime"` + Id int64 `orm:"pk;auto"` + PackName string `orm:"size(512);column(packname);index;null" description:"Cve对应的openEuler包名称(或者影响的包名)"` + CpePackName string `orm:"size(512);column(cpe_packname);null" description:"openEuler对应的cpe包名称(或者影响的包名)"` + CreateTime string `orm:"size(32);column(create_time);null" description:"createtime"` } type EmailList struct { - Id int64 `orm:"pk;auto"` - EmailName string `orm:"size(512);column(email_name);null" description:"收件人名称"` - EmailType int8 `orm:"index;column(email_type);default(1)" description:"1: excel导出列表"` + Id int64 `orm:"pk;auto"` + EmailName string `orm:"size(512);column(email_name);null" description:"收件人名称"` + EmailType int8 `orm:"index;column(email_type);default(1)" description:"1: excel导出列表"` } func CreateDb() bool { @@ -586,7 +586,7 @@ func CreateDb() bool { new(OriginUpstreamPoc), new(OriginUpstreamEvent), new(OriginUpstreamReference), new(OriginUpstreamVulType), new(OriginUpstreamFixSuggest), new(OriginUpstreamFixSuggestRefTag), new(OriginUpstreamFixSuggestRef), new(GiteOriginIssue), new(OriginExcel), new(ExportRecord), new(GitRepoGroups), - new(GiteRepo), new(GiteRepoMember), new(GiteRepoBranch),new(PackageCpe),new(EmailList), + new(GiteRepo), new(GiteRepoMember), new(GiteRepoBranch), new(PackageCpe), new(EmailList), ) logs.Info("table create success!") errosyn := orm.RunSyncdb("default", false, true) diff --git a/models/oricvecheck.go b/models/oricvecheck.go index 4cc773a..be8f0b0 100644 --- a/models/oricvecheck.go +++ b/models/oricvecheck.go @@ -9,7 +9,7 @@ import ( func QueryOriginCveE(prcnum int) ([]OriginUpstream, int64, error) { o := orm.NewOrm() var os []OriginUpstream - num, err := o.Raw("select cve_id,cve_un_ids,cve_num, update_type,cve_packname," + + num, err := o.Raw("select cve_id,cve_un_ids,cve_num, update_type,cve_packname,"+ "git_packname,cve_title,affect_porduct,cnnvd_id,cnvd_id,published_date,vul_status,cve_status,version"+ " from cve_origin_upstream where cve_status in (?, ?) and is_exit = ? "+ "order by cve_id asc limit ?", 0, 1, 2, prcnum).QueryRows(&os) @@ -21,9 +21,9 @@ func QueryOriginCveE(prcnum int) ([]OriginUpstream, int64, error) { return os, num, err } -func UpdateOriginExist(updatetime, pakName, version string, cveId int64, isExit int) (bool){ +func UpdateOriginExist(updatetime, pakName, version string, cveId int64, isExit int) (bool) { o := orm.NewOrm() - res, err := o.Raw("UPDATE cve_origin_upstream SET " + + res, err := o.Raw("UPDATE cve_origin_upstream SET "+ "is_exit = ?, update_time = ? where cve_id = ? and git_packname = ? and version = ?", isExit, updatetime, cveId, pakName, version).Exec() if err == nil { num, _ := res.RowsAffected() @@ -38,9 +38,9 @@ func UpdateOriginExist(updatetime, pakName, version string, cveId int64, isExit } } -func UpdateOriginExistTemp() (bool){ +func UpdateOriginExistTemp() (bool) { o := orm.NewOrm() - res, err := o.Raw("UPDATE cve_origin_upstream SET " + + res, err := o.Raw("UPDATE cve_origin_upstream SET "+ "is_exit = ? where is_exit = ?", 2, 0).Exec() if err == nil { num, _ := res.RowsAffected() @@ -53,4 +53,4 @@ func UpdateOriginExistTemp() (bool){ logs.Error("更新失败, cve_origin_upstream, err: ", err) return false } -} \ No newline at end of file +} diff --git a/models/packages.go b/models/packages.go index 414b433..a7be4cb 100644 --- a/models/packages.go +++ b/models/packages.go @@ -17,7 +17,6 @@ func GetIpWhite(ip string, iw *IpWhite) (err error) { return err } - func GetPackageInfo(packageName string, gi *GitPackageInfo) (err error) { o := orm.NewOrm() err = o.Raw("select * FROM cve_git_package_info WHERE package_name=?", packageName).QueryRow(gi) @@ -82,12 +81,12 @@ func GetSubPackRequire(subId int64) (gg []GitSubPackRequire, num int64, err erro return gs, 0, err } -func GetPackageList(pagesize int64,pagenum int64, QueryPkgName string) (ge []GitOpenEuler, num int64, err error) { +func GetPackageList(pagesize int64, pagenum int64, QueryPkgName string) (ge []GitOpenEuler, num int64, err error) { o := orm.NewOrm() qs := o.QueryTable("cve_git_open_euler") var us []GitOpenEuler if QueryPkgName != "" { - cnt, err := qs.Filter("package_name__icontains", QueryPkgName).Limit(pagesize, (pagenum-1)*pagesize).All(&us) + cnt, err := qs.Filter("package_name__icontains", QueryPkgName).Limit(pagesize, (pagenum-1)*pagesize).All(&us) if err == nil { logs.Info("cve_git_open_euler, count: ", cnt, "pagesize ", pagesize, ",pagenum ", pagenum, ", QueryPkgName ", QueryPkgName) } else { @@ -95,7 +94,7 @@ func GetPackageList(pagesize int64,pagenum int64, QueryPkgName string) (ge []Git } return us, cnt, err } else { - cnt, err := qs.Limit(pagesize, (pagenum-1)*pagesize).All(&us) + cnt, err := qs.Limit(pagesize, (pagenum-1)*pagesize).All(&us) if err == nil { logs.Info("cve_git_open_euler, count: ", cnt, "pagesize ", pagesize, ",pagenum ", pagenum, ", QueryPkgName ", QueryPkgName) } else { @@ -105,27 +104,24 @@ func GetPackageList(pagesize int64,pagenum int64, QueryPkgName string) (ge []Git } } -//获取package 总数 func GetPackageNum(QueryPkgName string) int64 { o := orm.NewOrm() cg := o.QueryTable("cve_git_open_euler") - var ge []GitOpenEuler if QueryPkgName != "" { num, err := cg.Filter("package_name__icontains", QueryPkgName).All(&ge) if err == nil { return num - }else{ + } else { return 0 } - }else { - num, err := cg.Filter("git_id__gt", 0).All(&ge) + } else { + num, err := cg.Filter("git_id__gt", 0).All(&ge) if err == nil { return num - }else{ + } else { return 0 } } - -} \ No newline at end of file +} diff --git a/models/securitynotice.go b/models/securitynotice.go new file mode 100644 index 0000000..1aff8c2 --- /dev/null +++ b/models/securitynotice.go @@ -0,0 +1,15 @@ +package models + +import "github.com/astaxie/beego/orm" + +//Read get security notice by colName +func (sn *SecurityNotice) Read(colName string) error { + o := orm.NewOrm() + return o.Read(sn, colName) +} +//Update update security notice by column names +func (sn *SecurityNotice)Update(colName ...string) error { + o := orm.NewOrm() + _, err := o.Update(sn, colName...) + return err +} diff --git a/models/uploadcve.go b/models/uploadcve.go index 54e8d77..4ee45a2 100644 --- a/models/uploadcve.go +++ b/models/uploadcve.go @@ -10,16 +10,16 @@ type OpenSaId struct { Id int64 } -func QueryYamlData(pkgName string, version string)(GitOpenEuler, bool){ +func QueryYamlData(pkgName string, version string) (GitOpenEuler, bool) { o := orm.NewOrm() var goe GitOpenEuler err := o.Raw("select * from cve_git_open_euler where package_name = ? and version = ?", pkgName, version).QueryRow(&goe) if err != nil { logs.Info("pkgName", pkgName, "version", version, ", cve_git_open_euler 无对应数据") - return goe,false + return goe, false } else { logs.Info("pkgName", pkgName, "version", version, ", cve_git_open_euler 查询成功") - return goe,true + return goe, true } } @@ -34,27 +34,27 @@ func QueryOriginRepo(pkgName string) (GiteRepo, bool) { err := o.Raw("select * from cve_gite_repo where path = ? and org_path = ? and status = ?", pkgName, repoOrg, 1).QueryRow(&gr) if err != nil { logs.Info("pkgName", pkgName, "repoOrg", repoOrg, ", cve_gite_repo 无对应数据") - return gr,false + return gr, false } else { logs.Info("pkgName", pkgName, "repoOrg", repoOrg, ", cve_gite_repo 查询成功") - return gr,true + return gr, true } } -func QueryRepoMember(groupId int64, memberType string)([]GiteRepoMember, bool){ +func QueryRepoMember(groupId int64, memberType string) ([]GiteRepoMember, bool) { o := orm.NewOrm() var grm []GiteRepoMember num, err := o.Raw("select * from cve_gite_repo_member where group_id = ? and member_type = ?", groupId, memberType).QueryRows(&grm) - if err != nil || num == 0{ + if err != nil || num == 0 { logs.Info("groupId", groupId, ",memberType", memberType, ", cve_gite_repo_member 无对应数据") - return grm,false + return grm, false } else { logs.Info("groupId", groupId, ",memberType", memberType, ", cve_gite_repo_member 查询成功") - return grm,true + return grm, true } } -func QueryCveOpeneulerdata(pkgName string, version string) (GitOpenEuler, bool){ +func QueryCveOpeneulerdata(pkgName string, version string) (GitOpenEuler, bool) { goe, ok := QueryYamlData(pkgName, version) if !ok || goe.GitId == 0 { gr, okrg := QueryOriginRepo(pkgName) @@ -89,7 +89,7 @@ func QueryCveOpeneulerdata(pkgName string, version string) (GitOpenEuler, bool){ return goe, ok } -func QueryCveOpeneulerDetaildata(pkgName string, version string) (GitPackageInfo, bool){ +func QueryCveOpeneulerDetaildata(pkgName string, version string) (GitPackageInfo, bool) { o := orm.NewOrm() var goe GitPackageInfo err := o.Raw("select * from cve_git_package_info where package_name = ? and version = ?", pkgName, version).QueryRow(&goe) @@ -102,32 +102,32 @@ func QueryCveOpeneulerDetaildata(pkgName string, version string) (GitPackageInfo } } -func QueryCveOriginByIds(ids string) (OriginUpstream, bool){ +func QueryCveOriginByIds(ids string) (OriginUpstream, bool) { o := orm.NewOrm() var orcve OriginUpstream err := o.Raw("select * from cve_origin_upstream where cve_un_ids = ?", ids).QueryRow(&orcve) if err != nil { logs.Info("ids", ids, ", cve_origin_upstream 新增数据") - return orcve,false + return orcve, false } else { - return orcve,true + return orcve, true } } func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *OriginUpstreamDesc, ous *OriginUpstreamConfig, osi *OriginUpstreamImpact, osp *OriginUpstreamPoc, ose *OriginUpstreamEvent, - osv *OriginUpstreamVulType, osf *OriginUpstreamFixSuggest) (Id int64, err error){ + osv *OriginUpstreamVulType, osf *OriginUpstreamFixSuggest) (Id int64, err error) { o := orm.NewOrm() errs := o.Begin() if errs == nil { ouse := OriginUpstream{Ids: ou.Ids} err := o.Read(&ouse, "Ids") - if err == orm.ErrNoRows || err == orm.ErrMissPK{ + if err == orm.ErrNoRows || err == orm.ErrMissPK { logs.Info("新增数据: ", ou) var num int64 if num, err = o.Insert(ou); err == nil { logs.Info("insert cve_origin_upstream success, num:, cveNum", num, ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream failed, ou:", ou, ", err: ", err) o.Rollback() return 0, err @@ -137,7 +137,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi o.Delete(&lod, "CveId") if odnum, err := o.Insert(od); err == nil { logs.Info("insert cve_origin_upstream_desc success, num:", odnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_desc failed, ou:", ou, ", err: ", err) o.Rollback() return 0, err @@ -145,7 +145,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ous.CveId = num lous := OriginUpstreamConfig{CveId: num} err := o.Read(&lous, "CveId") - if err == orm.ErrNoRows || err == orm.ErrMissPK{ + if err == orm.ErrNoRows || err == orm.ErrMissPK { logs.Info("cve_origin_upstream_config 不存在, cveId: ", num) } else { var lousc []OriginUpstreamConfigNode @@ -165,7 +165,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi } if ousnum, err := o.Insert(ous); err == nil { logs.Info("insert cve_origin_upstream_config success, ousnum:", ousnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_config failed, ou:", ous, ", err: ", err) o.Rollback() return 0, err @@ -177,7 +177,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi Lnode.ConfId = ous.ConfId if lousnum, err := o.Insert(&Lnode); err == nil { logs.Info("insert cve_origin_upstream_config_node success, lousnum:", lousnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_config_node failed, Lnode:", Lnode, ", err: ", err) o.Rollback() return 0, err @@ -191,7 +191,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ouscnc.Vulnerable = nodCpe.Vulnerable if lousnumc, err := o.Insert(&ouscnc); err == nil { logs.Info("insert cve_origin_upstream_config_node_cpe success, lousnumc:", lousnumc, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_config_node_cpe failed, ouscnc:", ouscnc, ", err: ", err) o.Rollback() return 0, err @@ -203,9 +203,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osi.CveId = num losi := OriginUpstreamImpact{CveId: num} errxx := o.Read(&losi, "CveId") - if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK{ + if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK { logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num) - }else { + } else { var losis []OriginUpstreamImpactScore losisNum, err := o.Raw("select * from cve_origin_upstream_impact_score where impact_id = ?", losi.ImpactId).QueryRows(&losis) if err != nil { @@ -230,7 +230,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi if losinum, err := o.Insert(osi); err == nil { logs.Info("insert cve_origin_upstream_impact success, lousnum:", losinum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact failed, Lnode:", osi, ", err: ", err) o.Rollback() return 0, err @@ -244,7 +244,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi lousist.Status = 1 if lousistnum, err := o.Insert(&lousist); err == nil { logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score failed, lousist:", lousist, ", err: ", err) o.Rollback() return 0, err @@ -276,7 +276,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi } if lousistnumv3, err := o.Insert(&lousisv3); err == nil { logs.Info("insert cve_origin_upstream_impact_score_v3 success, lousistnumv3:", lousistnumv3, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score_v3 failed, lousisv3:", lousisv3, ", err: ", err) o.Rollback() return 0, err @@ -290,7 +290,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi lousistv2.Status = 1 if lousistnum, err := o.Insert(&lousistv2); err == nil { logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score failed, lousistv2:", lousistv2, ", err: ", err) o.Rollback() return 0, err @@ -326,7 +326,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi } if lousistnumv2, err := o.Insert(&lousisv2); err == nil { logs.Info("insert cve_origin_upstream_impact_score_v2 success, lousistnumv2:", lousistnumv2, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score_v2 failed, lousisv2:", lousisv2, ", err: ", err) o.Rollback() return 0, err @@ -335,15 +335,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osp.CveId = num losp := OriginUpstreamPoc{CveId: num} errxxx := o.Read(&losp, "CveId") - if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK{ + if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK { logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num) - }else { + } else { lospd := OriginUpstreamPoc{CveId: num} o.Delete(&lospd, "CveId") } if ospnum, err := o.Insert(osp); err == nil { logs.Info("insert Table: cve_origin_upstream_poc success, ospnum:", ospnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_poc failed, osp:", osp, ", err: ", err) o.Rollback() return 0, err @@ -352,15 +352,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ose.CveId = num lose := OriginUpstreamEvent{CveId: num} errx := o.Read(&lose, "CveId") - if errx == orm.ErrNoRows || errx == orm.ErrMissPK{ + if errx == orm.ErrNoRows || errx == orm.ErrMissPK { logs.Info("cve_origin_upstream_event 不存在, cveId: ", num) - }else { + } else { losed := OriginUpstreamEvent{CveId: num} o.Delete(&losed, "CveId") } if osenum, err := o.Insert(ose); err == nil { logs.Info("insert Table: cve_origin_upstream_event success, osenum:", osenum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_event failed, ose:", ose, ", err: ", err) o.Rollback() return 0, err @@ -380,12 +380,12 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi for _, ta := range ref.Tags { tags = tags + string(ta) + "," } - tags = tags[:len(tags) - 1] + tags = tags[:len(tags)-1] } lousrd.Tags = tags if lousrdnum, err := o.Insert(&lousrd); err == nil { logs.Info("insert Table: cve_origin_upstream_reference success, lousrdnum:", lousrdnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_reference failed, lousrd:", lousrd, ", err: ", err) o.Rollback() return 0, err @@ -397,7 +397,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osv.CveId = num if osvnum, err := o.Insert(osv); err == nil { logs.Info("insert Table: cve_origin_upstream_vul_type success, osvnum:", osvnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_vul_type failed, osv:", osv, ", err: ", err) o.Rollback() return 0, err @@ -405,9 +405,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ose.CveId = num lousfs := OriginUpstreamFixSuggest{CveId: num} errxxsx := o.Read(&lousfs, "CveId") - if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK{ + if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK { logs.Info("cve_origin_upstream_fix_suggest 不存在, cveId: ", num) - }else { + } else { var lousfst []OriginUpstreamFixSuggestRef louscNum, err := o.Raw("select * from cve_origin_upstream_fix_suggest_ref where fix_id = ?", lousfs.FixId).QueryRows(&lousfst) if err != nil { @@ -426,7 +426,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osf.CveId = num if osfnum, err := o.Insert(osf); err == nil { logs.Info("insert Table: cve_origin_upstream_fix_suggest success, osfnum:", osfnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_fix_suggest failed, osf:", osf, ", err: ", err) o.Rollback() return 0, err @@ -440,7 +440,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi lousfstr.Url = refer.Url if osfstrnum, err := o.Insert(&lousfstr); err == nil { logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref success, osfstrnum:", osfstrnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref failed, lousfstr:", lousfstr, ", err: ", err) o.Rollback() return 0, err @@ -452,7 +452,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi loufsrtg.Name = refertag if osfstgrnum, err := o.Insert(&loufsrtg); err == nil { logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref_tag success, osfstgrnum:", osfstgrnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref_tag failed, loufsrtg:", loufsrtg, ", err: ", err) o.Rollback() return 0, err @@ -468,7 +468,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ou.Ids = ouse.Ids if num, err := o.Update(ou); err == nil { logs.Info("Update cve_origin_upstream success, num:, cveNum", num, ou.Ids) - }else { + } else { logs.Error("Update cve_origin_upstream failed, ou:", ou, ", err: ", err) o.Rollback() return 0, err @@ -479,7 +479,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi o.Delete(&lod, "CveId") if odnum, err := o.Insert(od); err == nil { logs.Info("insert cve_origin_upstream_desc success, num:", odnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_desc failed, ou:", ou, ", err: ", err) o.Rollback() return 0, err @@ -487,7 +487,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ous.CveId = num lous := OriginUpstreamConfig{CveId: num} err := o.Read(&lous, "CveId") - if err == orm.ErrNoRows || err == orm.ErrMissPK{ + if err == orm.ErrNoRows || err == orm.ErrMissPK { logs.Info("cve_origin_upstream_config 不存在, cveId: ", num) } else { var lousc []OriginUpstreamConfigNode @@ -507,7 +507,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi } if ousnum, err := o.Insert(ous); err == nil { logs.Info("insert cve_origin_upstream_config success, ousnum:", ousnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_config failed, ou:", ous, ", err: ", err) o.Rollback() return 0, err @@ -519,7 +519,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi Lnode.ConfId = ous.ConfId if lousnum, err := o.Insert(&Lnode); err == nil { logs.Info("insert cve_origin_upstream_config_node success, lousnum:", lousnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_config_node failed, Lnode:", Lnode, ", err: ", err) o.Rollback() return 0, err @@ -533,7 +533,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ouscnc.Vulnerable = nodCpe.Vulnerable if lousnumc, err := o.Insert(&ouscnc); err == nil { logs.Info("insert cve_origin_upstream_config_node_cpe success, lousnumc:", lousnumc, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_config_node_cpe failed, ouscnc:", ouscnc, ", err: ", err) o.Rollback() return 0, err @@ -546,9 +546,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osi.CveId = num losi := OriginUpstreamImpact{CveId: num} errxx := o.Read(&losi, "CveId") - if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK{ + if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK { logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num) - }else { + } else { var losis []OriginUpstreamImpactScore losisNum, err := o.Raw("select * from cve_origin_upstream_impact_score where impact_id = ?", losi.ImpactId).QueryRows(&losis) if err != nil { @@ -573,7 +573,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi if losinum, err := o.Insert(osi); err == nil { logs.Info("insert cve_origin_upstream_impact success, lousnum:", losinum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact failed, Lnode:", osi, ", err: ", err) o.Rollback() return 0, err @@ -587,7 +587,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi lousist.Status = 1 if lousistnum, err := o.Insert(&lousist); err == nil { logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score failed, lousist:", lousist, ", err: ", err) o.Rollback() return 0, err @@ -619,7 +619,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi } if lousistnumv3, err := o.Insert(&lousisv3); err == nil { logs.Info("insert cve_origin_upstream_impact_score_v3 success, lousistnumv3:", lousistnumv3, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score_v3 failed, lousisv3:", lousisv3, ", err: ", err) o.Rollback() return 0, err @@ -633,7 +633,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi lousistv2.Status = 1 if lousistnum, err := o.Insert(&lousistv2); err == nil { logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score failed, lousistv2:", lousistv2, ", err: ", err) o.Rollback() return 0, err @@ -669,7 +669,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi } if lousistnumv2, err := o.Insert(&lousisv2); err == nil { logs.Info("insert cve_origin_upstream_impact_score_v2 success, lousistnumv2:", lousistnumv2, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert cve_origin_upstream_impact_score_v2 failed, lousisv2:", lousisv2, ", err: ", err) o.Rollback() return 0, err @@ -678,15 +678,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osp.CveId = num losp := OriginUpstreamPoc{CveId: num} errxxx := o.Read(&losp, "CveId") - if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK{ + if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK { logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num) - }else { + } else { lospd := OriginUpstreamPoc{CveId: num} o.Delete(&lospd, "CveId") } if ospnum, err := o.Insert(osp); err == nil { logs.Info("insert Table: cve_origin_upstream_poc success, ospnum:", ospnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_poc failed, osp:", osp, ", err: ", err) o.Rollback() return 0, err @@ -695,15 +695,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ose.CveId = num lose := OriginUpstreamEvent{CveId: num} errx := o.Read(&lose, "CveId") - if errx == orm.ErrNoRows || errx == orm.ErrMissPK{ + if errx == orm.ErrNoRows || errx == orm.ErrMissPK { logs.Info("cve_origin_upstream_event 不存在, cveId: ", num) - }else { + } else { losed := OriginUpstreamEvent{CveId: num} o.Delete(&losed, "CveId") } if osenum, err := o.Insert(ose); err == nil { logs.Info("insert Table: cve_origin_upstream_event success, osenum:", osenum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_event failed, ose:", ose, ", err: ", err) o.Rollback() return 0, err @@ -723,12 +723,12 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi for _, ta := range ref.Tags { tags = tags + string(ta) + "," } - tags = tags[:len(tags) - 1] + tags = tags[:len(tags)-1] } lousrd.Tags = tags if lousrdnum, err := o.Insert(&lousrd); err == nil { logs.Info("insert Table: cve_origin_upstream_reference success, lousrdnum:", lousrdnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_reference failed, lousrd:", lousrd, ", err: ", err) o.Rollback() return 0, err @@ -740,7 +740,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osv.CveId = num if osvnum, err := o.Insert(osv); err == nil { logs.Info("insert Table: cve_origin_upstream_vul_type success, osvnum:", osvnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_vul_type failed, osv:", osv, ", err: ", err) o.Rollback() return 0, err @@ -748,9 +748,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi ose.CveId = num lousfs := OriginUpstreamFixSuggest{CveId: num} errxxsx := o.Read(&lousfs, "CveId") - if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK{ + if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK { logs.Info("cve_origin_upstream_fix_suggest 不存在, cveId: ", num) - }else { + } else { var lousfst []OriginUpstreamFixSuggestRef louscNum, err := o.Raw("select * from cve_origin_upstream_fix_suggest_ref where fix_id = ?", lousfs.FixId).QueryRows(&lousfst) if err != nil { @@ -769,7 +769,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi osf.CveId = num if osfnum, err := o.Insert(osf); err == nil { logs.Info("insert Table: cve_origin_upstream_fix_suggest success, osfnum:", osfnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_fix_suggest failed, osf:", osf, ", err: ", err) o.Rollback() return 0, err @@ -783,7 +783,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi lousfstr.Url = refer.Url if osfstrnum, err := o.Insert(&lousfstr); err == nil { logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref success, osfstrnum:", osfstrnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref failed, lousfstr:", lousfstr, ", err: ", err) o.Rollback() return 0, err @@ -795,7 +795,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi loufsrtg.Name = refertag if osfstgrnum, err := o.Insert(&loufsrtg); err == nil { logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref_tag success, osfstgrnum:", osfstgrnum, ", cveNum", ou.Ids) - }else { + } else { logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref_tag failed, loufsrtg:", loufsrtg, ", err: ", err) o.Rollback() return 0, err @@ -813,24 +813,24 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi return 0, nil } -func QueryCveErrorInfo(issueStatus int8, startDate, endDate string)([]IssueTemplate, bool){ +func QueryCveErrorInfo(issueStatus int8, startDate, endDate string) ([]IssueTemplate, bool) { o := orm.NewOrm() var it []IssueTemplate var num int64 var err error if startDate != "" { - num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template " + + num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template "+ "where issue_status = ? and create_time >= ? and create_time <= ?", issueStatus, startDate, endDate).QueryRows(&it) } else { - num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template " + + num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template "+ "where issue_status = ? and create_time <= ?", issueStatus, endDate).QueryRows(&it) } - if err != nil || num == 0{ + if err != nil || num == 0 { logs.Info(issueStatus, startDate, endDate, ", cve_issue_template 无对应数据") - return it,false + return it, false } else { logs.Info(issueStatus, startDate, endDate, ", cve_issue_template 查询成功") - return it,true + return it, true } -} \ No newline at end of file +} diff --git a/models/user.go b/models/user.go index 99dbfc5..3952c04 100644 --- a/models/user.go +++ b/models/user.go @@ -12,7 +12,8 @@ var ( func init() { UserList = make(map[string]*User) - u := User{"user_11111", "astaxie", "11111", Profile{"male", 20, "Singapore", "astaxie@gmail.com"}} + u := User{"user_11111", "astaxie", "11111", + Profile{"male", 20, "Singapore", "astaxie@gmail.com"}} UserList["user_11111"] = &u } diff --git a/models/ymal.go b/models/ymal.go index 6ef2f88..2c3c0f4 100644 --- a/models/ymal.go +++ b/models/ymal.go @@ -7,7 +7,7 @@ import ( func GetYamlTable(gt *[]GitPackageTable) (int64, error) { o := orm.NewOrm() - num, errx := o.Raw("select *"+ + num, errx := o.Raw("select *" + " from cve_git_package_table").QueryRows(gt) if errx != nil { logs.Error("获取数据失败或者不存在, err: ", errx) @@ -34,7 +34,6 @@ func CreateYamlTable(gt *GitPackageTable) (TableId int64, err error) { errx := o.Raw("select *"+ " from cve_git_package_table where table_name = ? ", gt.TableName).QueryRow(&localgt) if errx != nil { - // 创建 var TableId int64 if TableId, err = o.Insert(gt); err == nil { logs.Info("insert cve_git_package_table success, TableId: ", TableId, "tableName: ", gt.TableName) @@ -44,7 +43,6 @@ func CreateYamlTable(gt *GitPackageTable) (TableId int64, err error) { } return TableId, nil } else { - // 更新 gt.TableId = localgt.TableId gt.Brands = localgt.Brands if num, err := o.Update(gt); err == nil { @@ -57,10 +55,10 @@ func CreateYamlTable(gt *GitPackageTable) (TableId int64, err error) { } } -func GetSingleYaml(ge *GitOpenEuler) (bool, error){ +func GetSingleYaml(ge *GitOpenEuler) (bool, error) { o := orm.NewOrm() if ge.Version != "" && ge.Release != "" { - localge := GitOpenEuler{PackageName: ge.PackageName, Version:ge.Version, Release:ge.Release} + localge := GitOpenEuler{PackageName: ge.PackageName, Version: ge.Version, Release: ge.Release} err := o.Read(&localge, "PackageName", "Version", "Release") logs.Info("查询yaml数据是否存在:", ge, ", localge: ", localge, ", err: ", err) if err == orm.ErrNoRows { @@ -91,7 +89,6 @@ func InsertOpenEulerRelate(getr *GitOpenEulerTableRelate) (id int64, typex strin " from cve_git_open_euler_table_relate where git_id = ? and table_name = ?", getr.GitId, getr.TableName).QueryRow(&localge) if errx != nil { - // 创建 var relateId int64 if relateId, err = o.Insert(getr); err == nil { logs.Info("insert cve_git_open_euler_table_relate success, RelateId: ", relateId, "tableName: ", getr.TableName) @@ -101,10 +98,9 @@ func InsertOpenEulerRelate(getr *GitOpenEulerTableRelate) (id int64, typex strin } return relateId, "insert", nil } else { - // 更新 getr.RelateId = localge.RelateId if _, err := o.Update(getr); err == nil { - logs.Info("update cve_git_open_euler_table_relate success, RelateId: ", getr.RelateId, "tableName: ", getr.TableName) + logs.Info("update cve_git_open_euler_table_relate success, RelateId: ", getr.RelateId, "tableName: ", getr.TableName) } else { logs.Error("update cve_git_open_euler_table_relate failed, ", "tableName: ", getr.TableName, "err: ", err) return getr.RelateId, "update", err @@ -120,10 +116,9 @@ func CreateYaml(ge *GitOpenEuler, tableValue GitPackageTable) (id int64, typex s getr.TableName = tableValue.TableName getr.Brands = tableValue.Brands errx := o.Raw("select *"+ - " from cve_git_open_euler where package_name = ? and (version = ? or release = ?)", - ge.PackageName, ge.Version, ge.Release).QueryRow(&localge) + " from cve_git_open_euler where package_name = ? and version = ?", + ge.PackageName, ge.Version).QueryRow(&localge) if errx != nil { - // 创建 logs.Info("createYaml: ", localge) ge.Status = 0 var GitId int64 @@ -137,12 +132,11 @@ func CreateYaml(ge *GitOpenEuler, tableValue GitPackageTable) (id int64, typex s InsertOpenEulerRelate(&getr) return GitId, "insert", nil } else { - // 更新 logs.Info("createYaml: ", localge, "GitOpenEuler: ", ge) ge.Status = 1 ge.GitId = localge.GitId if _, err := o.Update(ge); err == nil { - logs.Info("update cve_git_open_euler success, GitId: ", ge.GitId, "packName: ", ge.PackageName) + logs.Info("update cve_git_open_euler success, GitId: ", ge.GitId, "packName: ", ge.PackageName) } else { logs.Error("update cve_git_open_euler failed, ", "packName: ", ge.PackageName, "err: ", err) return ge.GitId, "update", err @@ -153,7 +147,6 @@ func CreateYaml(ge *GitOpenEuler, tableValue GitPackageTable) (id int64, typex s } } - func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex string, err error) { o := orm.NewOrm() var localgp GitPackageInfo @@ -161,7 +154,6 @@ func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex stri " from cve_git_package_info where git_id = ? and package_name = ? and version = ?", ge.GitId, gp.PackageName, gp.Version).QueryRow(&localgp) if errx != nil { - // 创建 gp.Status = 0 var DetailId int64 if DetailId, err = o.Insert(gp); err == nil { @@ -172,7 +164,6 @@ func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex stri } return DetailId, "insert", nil } else { - // 更新 gp.DetailId = localgp.DetailId if _, err := o.Update(gp); err == nil { logs.Info("update cve_git_package_info success, DetailId: ", gp.DetailId, ",packName: ", gp.PackageName) @@ -184,7 +175,6 @@ func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex stri } } - func CreateYamlSubPack(gb *GitSubPack) (SubId int64, typex string, err error) { o := orm.NewOrm() var localgb GitSubPack @@ -192,7 +182,6 @@ func CreateYamlSubPack(gb *GitSubPack) (SubId int64, typex string, err error) { " from cve_git_sub_pack where detail_id = ? and ids = ? and sub_pack_name = ?", gb.DetailId, gb.Ids, gb.SubPackName).QueryRow(&localgb) if errx != nil { - // 创建 var SubId int64 if SubId, err = o.Insert(gb); err == nil { logs.Info("insert cve_git_sub_pack success, SubId: ", SubId, ",SubPackName: ", gb.SubPackName) @@ -205,7 +194,6 @@ func CreateYamlSubPack(gb *GitSubPack) (SubId int64, typex string, err error) { return localgb.SubId, "update", errx } - func CreateYamlSubPackProvides(gs *GitSubPackProvides) (ProvideId int64, typex string, err error) { o := orm.NewOrm() var localgs GitSubPackProvides @@ -213,7 +201,6 @@ func CreateYamlSubPackProvides(gs *GitSubPackProvides) (ProvideId int64, typex s " from cve_git_sub_pack_provides where sub_id = ? and ids = ? and provide_name = ?", gs.SubId, gs.Ids, gs.ProvideName).QueryRow(&localgs) if errx != nil { - // 创建 var ProvideId int64 if ProvideId, err = o.Insert(gs); err == nil { logs.Info("insert cve_git_sub_pack_provides success, ProvideId: ", ProvideId, "ProvideName: ", gs.ProvideName) @@ -226,7 +213,6 @@ func CreateYamlSubPackProvides(gs *GitSubPackProvides) (ProvideId int64, typex s return localgs.ProvideId, "update", errx } - func CreateYamlSubPackRequiredb(gs *GitSubPackRequiredby) (Id int64, typex string, err error) { o := orm.NewOrm() var localgs GitSubPackRequiredby @@ -234,7 +220,6 @@ func CreateYamlSubPackRequiredb(gs *GitSubPackRequiredby) (Id int64, typex strin " from cve_git_sub_pack_requiredby where provide_id = ? and requiredb = ?", gs.ProvideId, gs.Requiredby).QueryRow(&localgs) if errx != nil { - // 创建 var Id int64 if Id, err = o.Insert(gs); err == nil { logs.Info("insert cve_git_sub_pack_requiredby success, ID: ", Id, "requiredb: ", gs.Requiredby) @@ -247,7 +232,6 @@ func CreateYamlSubPackRequiredb(gs *GitSubPackRequiredby) (Id int64, typex strin return localgs.Id, "update", errx } - func CreateYamlSubPackRequires(gs *GitSubPackRequire) (RequireId int64, typex string, err error) { o := orm.NewOrm() var localgs GitSubPackRequire @@ -255,7 +239,6 @@ func CreateYamlSubPackRequires(gs *GitSubPackRequire) (RequireId int64, typex st " from cve_git_sub_pack_require where sub_id = ? and ids = ? and require_name = ?", gs.SubId, gs.Ids, gs.RequireName).QueryRow(&localgs) if errx != nil { - // 创建 var RequireId int64 if RequireId, err = o.Insert(gs); err == nil { logs.Info("insert cve_git_sub_pack_require success, RequireId: ", RequireId, "RequireName: ", gs.RequireName) @@ -266,4 +249,4 @@ func CreateYamlSubPackRequires(gs *GitSubPackRequire) (RequireId int64, typex st return RequireId, "insert", nil } return localgs.RequireId, "update", errx -} \ No newline at end of file +} diff --git a/routers/router.go b/routers/router.go index 16f1996..568a177 100644 --- a/routers/router.go +++ b/routers/router.go @@ -54,9 +54,9 @@ func init() { beego.NSInclude(&controllers.HookEventControllers{}, ), ), - beego.NSNamespace("/download/excel",beego.NSInclude( + beego.NSNamespace("/download/excel", beego.NSInclude( &controllers.FileController{}, - ), + ), ), beego.NSNamespace("/cve/detail", beego.NSInclude( diff --git a/task/cve.go b/task/cve.go index 3854eaf..e1be20e 100644 --- a/task/cve.go +++ b/task/cve.go @@ -8,19 +8,19 @@ import ( "github.com/astaxie/beego/logs" ) -//ProcCveOriginData 处理api获取的原始数据 -func ProcCveOriginData(prcNum, days , openeulerNum int, cveRef, owner string)(bool, error) { - // 处理api获取的原始数据 +//ProcCveOriginData Process raw data obtained by api +func ProcCveOriginData(prcNum, days, openeulerNum int, cveRef, owner string) (bool, error) { + // Process raw data obtained by api ok, err := taskhandler.GetCveOriginData(prcNum, days, openeulerNum, cveRef) if !ok { logs.Error("接口上的原始数据处理失败(GetCveOriginData), err: ", err) } - // 处理excel的原始数据 + // Processing excel raw data okx, err := taskhandler.GetCveOriginExcelData(prcNum, days, openeulerNum, cveRef) if !okx { logs.Error("excel数据处理失败(GetCveOriginExcelData), errx: ", err) } - // 兼容已创建的issue数据 + // Compatible with created issue data oki, err := taskhandler.GetCveIssueData(prcNum, days, openeulerNum, cveRef, owner) if !oki { logs.Error("issue数据处理失败(GetCveIssueData), erri: ", err) @@ -28,28 +28,28 @@ func ProcCveOriginData(prcNum, days , openeulerNum int, cveRef, owner string)(bo return true, nil } -//ParamsCveOriginData 处理cve原始数据 -func ParamsCveOriginData() error{ +//ParamsCveOriginData Processing cve raw data +func ParamsCveOriginData() error { defer common.Catchs() - // 查询需要处理的cve, 1:新增;2:修改 + // Query the cve to be processed, 1: add; 2: modify BConfig, err := config.NewConfig("ini", "conf/app.conf") - if err != nil{ + if err != nil { logs.Error("config init error:", err) return err } - // 单次处理的数据量 + // The amount of data processed at a time prcnum, err := BConfig.Int("crontab::prcnum") if err != nil { - logs.Error("config crontab::prcnum error: invalid value is ",prcnum) + logs.Error("config crontab::prcnum error: invalid value is ", prcnum) return errors.New("value is nil") } - // 处理多少天到现在的数据 + // How many days have been processed to date data days, ok := BConfig.Int("crontab::days") if ok != nil { logs.Error("config crontab::days error:", err) return ok } - // openeuler 编号开始值 + // openeuler Number start value cveRef := BConfig.String("cve::cveref") openeulernum, ok := BConfig.Int("cve::openeulernum") if ok != nil { @@ -57,7 +57,7 @@ func ParamsCveOriginData() error{ return ok } owner := BConfig.String("gitee::owner") - // 获取表的数据源 + // Get the data source of the table _, errx := ProcCveOriginData(prcnum, days, openeulernum, cveRef, owner) return errx } diff --git a/task/inittask.go b/task/inittask.go index bffe416..8269c65 100644 --- a/task/inittask.go +++ b/task/inittask.go @@ -6,7 +6,7 @@ import ( "github.com/astaxie/beego/toolbox" ) -//CheckOriCveTask 校验原始cve数据 +//CheckOriCveTask Verify the original cve data func CheckOriCveTask(oriCveCheck string, ch *chan bool) { logs.Info("校验原始cve数据 task start") CheckTask := toolbox.NewTask("CheckOriCve", oriCveCheck, CheckOriCve) @@ -17,13 +17,11 @@ func CheckOriCveTask(oriCveCheck string, ch *chan bool) { } toolbox.AddTask("CheckOriCve", CheckTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("校验原始cve数据 task end") *ch <- true - //defer toolbox.StopTask() } -//InitYamlTask 获取yaml数据源 +//InitYamlTask Get yaml data source func InitYamlTask(getYaml string, ch *chan bool) { logs.Info("获取yaml数据源 task start") YamlTask := toolbox.NewTask("GetYamlData", getYaml, GetYamlData) @@ -34,13 +32,11 @@ func InitYamlTask(getYaml string, ch *chan bool) { } toolbox.AddTask("GetYamlData", YamlTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("获取yaml数据源 task end") *ch <- true - //defer toolbox.StopTask() } -//InitCveTask 将cve原始数据生成cve库 +//InitCveTask Generate cve original data into cve library func InitCveTask(getCve string, ch *chan bool) { logs.Info("将cve原始数据生成cve库 task start") CveTask := toolbox.NewTask("ParamsCveOriginData", getCve, ParamsCveOriginData) @@ -51,16 +47,13 @@ func InitCveTask(getCve string, ch *chan bool) { } toolbox.AddTask("ParamsCveOriginData", CveTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("将cve原始数据生成cve库 task end") *ch <- true - //defer toolbox.StopTask() } -//InitIssueTask 获取已经创建的issue数据源 +//InitIssueTask Get the created issue data source func InitIssueTask(getIssue string, ch *chan bool) { logs.Info("获取已经创建的issue数据源 task start") - //taskhandler.GrabIssueByOrg("8457c66db66955376519059b97e33dd1","src-openeuler") issueTask := toolbox.NewTask("GetIssueData", getIssue, GetIssueData) err := issueTask.Run() if err != nil { @@ -69,13 +62,11 @@ func InitIssueTask(getIssue string, ch *chan bool) { } toolbox.AddTask("GetIssueData", issueTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("获取已经创建的issue数据源 task end") *ch <- true - //defer toolbox.StopTask() } -//InitIssueToken 执行获取token任务开始 +//InitIssueToken Execute the token acquisition task to start func InitIssueToken(issueOath string, ch *chan bool) { logs.Info("执行获取token任务开始") TokenTask := toolbox.NewTask("GetGiteeToken", issueOath, GetGiteeToken) @@ -86,13 +77,11 @@ func InitIssueToken(issueOath string, ch *chan bool) { } toolbox.AddTask("GetGiteeToken", TokenTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("执行获取token任务结束") *ch <- true - //defer toolbox.StopTask() } -//CreatTask 执行创建issue任务开始 +//CreatTask Execute the create issue task to start func CreatTask(createIssue string, ch *chan bool) { logs.Info("执行创建issue任务开始") cIssueTask := toolbox.NewTask("CreateIssue", createIssue, CreateIssue) @@ -103,13 +92,11 @@ func CreatTask(createIssue string, ch *chan bool) { } toolbox.AddTask("CreateIssue", cIssueTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("执行创建issue任务结束") *ch <- true - //defer toolbox.StopTask() } -//GenSAExcelTask 执行issue生成excel任务开始 +//GenSAExcelTask Execute issue to generate excel task start func GenSAExcelTask(genExcel string, ch *chan bool) { logs.Info("执行issue生成excel任务开始") genExcelTask := toolbox.NewTask("GenExcelData", genExcel, GenExcelData) @@ -120,13 +107,11 @@ func GenSAExcelTask(genExcel string, ch *chan bool) { } toolbox.AddTask("GenExcelData", genExcelTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("执行issue生成excel任务结束") *ch <- true - //defer toolbox.StopTask() } -//打印日志到控制台上,同时删除多余日志 +// Print logs to the console and delete redundant logs func PrintLogTask(printLog string, ch *chan bool) { logs.Info("创建日志任务 task start") printLogTask := toolbox.NewTask("ProcLogData", printLog, ProcLogData) @@ -137,20 +122,18 @@ func PrintLogTask(printLog string, ch *chan bool) { } toolbox.AddTask("ProcLogData", printLogTask) toolbox.StartTask() - //time.Sleep(time.Minute * 1) logs.Info("创建日志任务 task end") *ch <- true - //defer toolbox.StopTask() } -//InitTask 定时任务初始化 +//InitTask Timing task initialization func InitTask() { BConfig, err := config.NewConfig("ini", "conf/app.conf") if err != nil { logs.Error("config init error: file:conf/app.conf: ", err) return } - // 获取原始的yaml数据 + // Get the original yaml data ymalflag, errxs := BConfig.Int("crontab::ymalflag") if ymalflag == 1 && errxs == nil { getymal := BConfig.String("crontab::getymal") @@ -159,7 +142,7 @@ func InitTask() { <-yamch close(yamch) } - // 校验原始cve数据 + // Verify the original cve data oricveflag, errxs := BConfig.Int("crontab::oricveflag") if oricveflag == 1 && errxs == nil { oricvecheck := BConfig.String("crontab::oricvecheck") @@ -168,22 +151,22 @@ func InitTask() { <-checkch close(checkch) } - // 定时刷新gittoken + // Refresh gittoken regularly gittokenflag, errx := BConfig.Int("crontab::gittokenflag") if gittokenflag == 1 && errx == nil { issueoath := BConfig.String("crontab::issueoath") - // 定时刷新token + // Refresh token regularly //go InitIssueToken(issueoath, &ch) - // 从环境变量获取token + // Get token from environment variable gitToken := BConfig.String("gitee::git_token") if gitToken == "xxx" { var ch = make(chan bool) go InitIssueToken(issueoath, &ch) - <- ch + <-ch close(ch) } } - // 获取已经创建的issue + // Get the created issue getissueflag, errxs := BConfig.Int("crontab::getissueflag") if getissueflag == 1 && errxs == nil { getissue := BConfig.String("crontab::getissue") @@ -192,7 +175,7 @@ func InitTask() { <-issuech close(issuech) } - // 生成cve漏洞库 + // Generate cve vulnerability library cveflag, errxs := BConfig.Int("crontab::cveflag") if cveflag == 1 && errxs == nil { getcve := BConfig.String("crontab::getcve") @@ -201,7 +184,7 @@ func InitTask() { <-cvech close(cvech) } - // 定时输出日志到控制台上 + // Regularly output logs to the console printLogFlag, errxs := BConfig.Int("crontab::printlogflag") if printLogFlag == 1 && errxs == nil { printLog := BConfig.String("crontab::printlog") @@ -210,7 +193,7 @@ func InitTask() { <-logch close(logch) } - // 添加issue + // Add issue taskFlag, errx := BConfig.Int("crontab::issueflag") if taskFlag == 1 && errx == nil { var ch = make(chan bool) @@ -221,7 +204,7 @@ func InitTask() { } else { logs.Info("no task") } - // 将issue生成excel数据 + // Generate excel data from issue genexcelflag, errx := BConfig.Int("crontab::genexcelflag") if genexcelflag == 1 && errx == nil { var ch = make(chan bool) diff --git a/task/issuetask.go b/task/issuetask.go index de3c812..02a9ea7 100644 --- a/task/issuetask.go +++ b/task/issuetask.go @@ -12,10 +12,10 @@ import ( "strings" ) -//GetGiteeToken 获取码云API TOKEN +//GetGiteeToken Get Code Cloud API TOKEN func GetGiteeToken() error { defer common.Catchs() - // 查询需要处理的cve, 1:新增;2:修改 + // Query the cve to be processed, 1: add; 2: modify BConfig, err := config.NewConfig("ini", "conf/app.conf") if err != nil { logs.Error("config init error:", err) @@ -31,13 +31,11 @@ func GetGiteeToken() error { logs.Error("config gitee::clientSecret error: invalid value is ", clientSecret) return errors.New("value is nil") } - Email := BConfig.String("gitee::email") if Email == "" { logs.Error("config gitee::email error: value is nil") return errors.New("value is nil") } - password := BConfig.String("gitee::password") if password == "" { logs.Error("config gitee::password error: value is nil") @@ -60,10 +58,10 @@ func GetGiteeToken() error { return nil } -//CreateIssue 创建issue +//CreateIssue Create issue func CreateIssue() error { defer common.Catchs() - // 查询需要处理的cve, 1:新增;2:修改 + // Query the cve to be processed, 1: add; 2: modify BConfig, err := config.NewConfig("ini", "conf/app.conf") if err != nil { logs.Error("config init error:", err) @@ -96,7 +94,7 @@ func CreateIssue() error { path := BConfig.String("gitee::path") for index, issueValue := range cveData { logs.Info("当前正在处理第:", index, "条cve数据, cveNum: ", issueValue.CveNum) - // 判断issue是否已经处理过 + // Determine whether the issue has been processed goi, oks := models.QueryIssueCveByNum(issueValue.CveNum, issueValue.PackName) if oks { if strings.ToLower(goi.State) == "closed" || strings.ToLower(goi.State) == "rejected" { @@ -105,14 +103,14 @@ func CreateIssue() error { continue } } - // 判断cve是否已经处理过 + // Determine whether cve has been processed issueExist := taskhandler.GetCveSecurityNotice(issueValue.CveNum) if issueExist { models.UpdateIssueStatus(issueValue, 2) logs.Info("cve数据已经在官网上展示过,不需要在git上提交issue, cveData: ", issueValue) continue } - // 处理每一条cve数据 + // Process each piece of cve data if issueValue.Status == 0 { err := ProcIssue(issueValue, accessToken, owner, path) if err != nil { @@ -130,15 +128,15 @@ func CreateIssue() error { return nil } -//ProcUpdateIssue 更新issue +//ProcUpdateIssue Update issue func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path string) error { - // 查询修改评分 + // Query and modify score sr, err := models.QueryIssueScoreRecord(issueValue.CveId, 0) if err != nil { logs.Error("查询 评分记录失败, cveId: ", issueValue.CveId, "err: ", err) return err } - // 查询issue模板 + // Query issue template var it models.IssueTemplate it.CveId = issueValue.CveId lit, bools := models.GetIssueTemplet(&it) @@ -154,9 +152,9 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri logs.Error("更新issue 模板失败, cveId: ", issueValue.CveId, "err: ", err) return err } - // 更新issue状态 + // Update issue status models.UpdateIssueStatus(issueValue, 2) - // 更新分数状态 + // Update score status models.UpdateIssueScore(issueValue, 2) templetID, err := models.CreateIssueTemplate(&lit) if err != nil { @@ -169,7 +167,7 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri return nil } -//ProcIssue 处理issue +//ProcIssue Deal with issue func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) error { assignee := "" brandArry := []string{} @@ -177,7 +175,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er if err == nil && len(sn.CveNum) > 0 { path = issueValue.PackName logs.Info("查询安全信息:sn: ", sn) - // 获取issue处理人 + // Get issue handler gitYaml, ok := models.QueryCveOpeneulerdata(issueValue.PackName, issueValue.CveVersion) if !ok || gitYaml.MainTainer == "" || len(gitYaml.MainTainer) < 1 { assignee, err = taskhandler.GetCollaboratorInfo(accessToken, owner, path) @@ -187,7 +185,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er } } else { assignee = gitYaml.MainTainer - // 查询受影响的分支信息 + // Query the affected branch information gt, errgt := models.QueryCveBrands(gitYaml.GitId) if errgt == nil { for _, t := range gt { @@ -208,7 +206,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er } branchs := "" errBrands := errors.New("") - // 获取分支信息 + // Get branch information if len(brandArry) > 0 { for _, b := range brandArry { if b != "" && len(b) > 1 { @@ -230,7 +228,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er logs.Error("创建issue失败, err: ", err, "resp: ", resp, "cveId: ", issueValue.CveId) return err } - // 存储安全公告相关信息 + // Store security bulletin related information var sec models.SecurityNotice taskhandler.CreateSecNoticeData(&sec, issueValue, path, branchs) secID, err := models.UpdateSecNotice(&sec) diff --git a/task/oricvecheck.go b/task/oricvecheck.go index 4b0cee6..33ceab3 100644 --- a/task/oricvecheck.go +++ b/task/oricvecheck.go @@ -8,22 +8,22 @@ import ( "github.com/astaxie/beego/logs" ) -//CheckOriCve 检查原始数据的CVE +//CheckOriCve Check the CVE of the original data func CheckOriCve() error { defer common.Catchs() - // 查询需要处理的cve, 1:新增;2:修改 + // Query the cve to be processed, 1: add; 2: modify BConfig, err := config.NewConfig("ini", "conf/app.conf") if err != nil { logs.Error("config init error:", err) return err } - // 单次处理的数据量 + // The amount of data processed at a time prcNum, err := BConfig.Int("crontab::prcNum") if err != nil { logs.Error("config crontab::prcNum error: invalid value is ", prcNum) return errors.New("value is nil") } - // 获取表的数据源 + // Get the data source of the table _, err = taskhandler.CheckCveOriginData(prcNum) return err } diff --git a/task/printlog.go b/task/printlog.go index 5c505c2..5641ff6 100644 --- a/task/printlog.go +++ b/task/printlog.go @@ -9,14 +9,14 @@ import ( "os" ) -func DeletLogs() error{ +func DeletLogs() error { BConfig, err := config.NewConfig("ini", "conf/app.conf") - if err != nil{ + if err != nil { logs.Error("config init error:", err) return err } logDir := BConfig.String("log::log_dir") - if logDir == ""{ + if logDir == "" { logs.Error("config excel::log_dir error: invalid value is ", logDir) return errors.New("value is nil") } @@ -36,15 +36,13 @@ func DeletLogs() error{ } return nil } -//ProcCveOriginData 处理api获取的原始数据 -func ProcLogData() error{ + +// ProcLogData Processing log +func ProcLogData() error { // delete logs err := DeletLogs() if err != nil { logs.Error(err) } - - // 打印日志 return err } - diff --git a/task/yaml.go b/task/yaml.go index 57c9c33..14580fc 100644 --- a/task/yaml.go +++ b/task/yaml.go @@ -8,10 +8,10 @@ import ( "github.com/astaxie/beego/logs" ) -//GetYamlData 获取yaml数据源 +// GetYamlData Get yaml data source func GetYamlData() error { defer common.Catchs() - // 查询需要处理的cve, 1:新增;2:修改 + // Query the cve to be processed, 1: add; 2: modify BConfig, err := config.NewConfig("ini", "conf/app.conf") if err != nil { logs.Error("config init error:", err) @@ -22,9 +22,9 @@ func GetYamlData() error { logs.Error("config yaml::apiurl error: invalid value is ", apiUrl) return errors.New("value is nil") } - // 获取表的数据源 + // Get the data source of the table _, err = taskhandler.GetYamlTables(apiUrl) - // 获取yaml + // Get yaml if err == nil { _, err = taskhandler.GetYamlByGit(apiUrl) } diff --git a/taskhandler/assist.go b/taskhandler/assist.go index fc2c72b..dc92987 100644 --- a/taskhandler/assist.go +++ b/taskhandler/assist.go @@ -9,7 +9,6 @@ import ( "strings" ) - func GetOautToken(gt GiteeToken) { url := "https://gitee.com/oauth/token" var req util.RequestInfo @@ -27,7 +26,7 @@ func GetOautToken(gt GiteeToken) { return } var respDict map[string]interface{} - err =json.Unmarshal(resp, &respDict) + err = json.Unmarshal(resp, &respDict) if err != nil { logs.Error(err) return @@ -40,11 +39,10 @@ func GetOautToken(gt GiteeToken) { os.Setenv("GITEE_TOKEN", GitToken) } - -func GetCollaboratorInfo(accessToken string, owner string, path string) (string, error){ - if accessToken != "" && owner != "" && path !="" { +func GetCollaboratorInfo(accessToken string, owner string, path string) (string, error) { + if accessToken != "" && owner != "" && path != "" { url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/collaborators?access_token=" + accessToken - collabor, err:= util.HTTPGet(url) + collabor, err := util.HTTPGet(url) if err == nil && collabor != nil { for _, value := range collabor { if _, ok := value["id"]; !ok { @@ -60,7 +58,7 @@ func GetCollaboratorInfo(accessToken string, owner string, path string) (string, if mapKey == "permissions" { mapValuex := mapValue.(map[string]interface{}) for perKey, perValue := range mapValuex { - if perKey == "admin" && perValue.(bool) == true{ + if perKey == "admin" && perValue.(bool) == true { flag = true } } @@ -78,20 +76,20 @@ func GetCollaboratorInfo(accessToken string, owner string, path string) (string, return "", errors.New("参数错误") } -func GetBranchesInfo(accessToken string, owner string, path string) (string, error){ +func GetBranchesInfo(accessToken string, owner string, path string) (string, error) { branchName := "" if accessToken != "" && owner != "" && path != "" { - url := "https://gitee.com/api/v5/repos/"+ owner +"/"+ path +"/branches?access_token=" + accessToken - branch, err:= util.HTTPGet(url) + url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/branches?access_token=" + accessToken + branch, err := util.HTTPGet(url) if err == nil && branch != nil { - for _, value := range(branch) { + for _, value := range (branch) { if _, ok := value["name"]; !ok { logs.Error("branches, err: ", ok, "url: ", url) continue } mapValue := value["name"].(string) if mapValue != "" && len(mapValue) > 3 { - subStr := mapValue[len(mapValue) - 3:] + subStr := mapValue[len(mapValue)-3:] if strings.ToUpper(subStr) == "LTS" { branchName = mapValue break diff --git a/taskhandler/comment.go b/taskhandler/comment.go index a1e2822..597e2d5 100644 --- a/taskhandler/comment.go +++ b/taskhandler/comment.go @@ -1,29 +1,29 @@ package taskhandler import ( - "cvevulner/util" - "fmt" - "github.com/astaxie/beego/logs" + "cvevulner/util" + "fmt" + "github.com/astaxie/beego/logs" ) //AddCommentToIssue Add a comment to the issue -func AddCommentToIssue(msg,issueNum,owner,repo ,access string) { - url := fmt.Sprintf(`https://gitee.com/api/v5/repos/%v/%v/issues/%v/comments`,owner,repo,issueNum) - param := fmt.Sprintf(`{"access_token": "%s","body":"%s"}`,access,msg) - res, err := util.HTTPPost(url, param) - if err != nil { - logs.Error(err) - } - logs.Info("添加评论返回:",res) +func AddCommentToIssue(msg, issueNum, owner, repo, access string) { + url := fmt.Sprintf(`https://gitee.com/api/v5/repos/%v/%v/issues/%v/comments`, owner, repo, issueNum) + param := fmt.Sprintf(`{"access_token": "%s","body":"%s"}`, access, msg) + res, err := util.HTTPPost(url, param) + if err != nil { + logs.Error(err) + } + logs.Info("添加评论返回:", res) } //SendPrivateLetters Send a private message to a gitee user -func SendPrivateLetters(access,content,useName string) { - url := "https://gitee.com/api/v5/notifications/messages" - param := fmt.Sprintf(`{"access_token":"%s","username":"%s","content":"%s"}`,access,useName,content) - res,err := util.HTTPPost(url,param) - if err != nil { - logs.Error(err) - } - logs.Info("发送私信:",res) +func SendPrivateLetters(access, content, useName string) { + url := "https://gitee.com/api/v5/notifications/messages" + param := fmt.Sprintf(`{"access_token":"%s","username":"%s","content":"%s"}`, access, useName, content) + res, err := util.HTTPPost(url, param) + if err != nil { + logs.Error(err) + } + logs.Info("发送私信:", res) } diff --git a/taskhandler/common.go b/taskhandler/common.go index 78b0598..0da4436 100644 --- a/taskhandler/common.go +++ b/taskhandler/common.go @@ -70,13 +70,6 @@ const bodyUpTpl = `一、漏洞信息 ` func CommentTemplate(assignee, commentCmd, affectedVersion string) string { - //commentTemplate := "" - //commentTemplate := "Hey @" + assignee + "\n" + - // "以下内容需要您填写, 请复制到评论区回复喔" + "\n" + - // "影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n" + - // "openEulerScore: \n" + "openEulerVector: \n\n" + - // "受影响版本排查(受影响/不受影响): \n" + affectedVersion + - // "\n也可以参考: " + commentCmd + "\n" commentTemplate := "Hey @" + assignee + "\n" + "以下内容需要您填写, 请复制到评论区回复喔" + "\n" + "影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n\n" + @@ -327,7 +320,6 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str cveAnalysis := "" if its.CveAnalysis != "" && len(its.CveAnalysis) > 1 { cveAnalysis = strings.Replace(its.CveAnalysis, "\n", "", -1) - //cveAnalysis = strings.Replace(cveAnalysis, "\n", "", 0) } updateTime := cve.UpdateTime.String() if updateTime != "" && len(updateTime) > 19 { @@ -366,16 +358,6 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector, cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd, cveAnalysis, openEulerScore, oVector, affectedVersion) - /*body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "
" + - "
漏洞归属组件: " + path + "
" + - "
漏洞归属的版本: " + cve.CveVersion + "
" + "
CVSS V" + scoreType + "分值:
" + - "
BaseScore: " + score + " " + cve.CveLevel + "
" + - "
Vector: CVSS:" + scoreType + "/" + sc.NvectorVule + "
" + "
漏洞简述:
" + - "
" + cve.Description + "
" + "
二、漏洞分析结构反馈
" + "
影响性分析说明:
" + - "
" + cveAnalysis + "
" + - "
openEuler评分:
" + "
" + openEulerScore + "
" + - "
Vector: CVSS:" + scoreType + "/" + its.OpenEulerVector + "
" + - "
受影响版本排查(受影响/不受影响):
" + affectedVersion + "



"*/ requestBody = fmt.Sprintf(`{ "access_token": "%s", "repo": "%s", @@ -487,7 +469,6 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str "security_hole": "false" }`, accessToken, path, cve.CveNum, StatusName, body, its.Assignee, labels) } - } else { openEulerScore = " " if len(cveAnalysis) > 1 { diff --git a/taskhandler/createissue.go b/taskhandler/createissue.go index e6d926b..1c1df10 100644 --- a/taskhandler/createissue.go +++ b/taskhandler/createissue.go @@ -7,6 +7,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/astaxie/beego" "github.com/astaxie/beego/config" "github.com/astaxie/beego/logs" "strconv" @@ -87,44 +88,34 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st return "", errors.New("创建issue失败") } logs.Info("issue 创建成功,cveNum: ", cve.CveNum, "issueNum: ", resp["number"].(string)) - // 构建数据 + // Structure data var issueTemp models.IssueTemplate CreateIssueData(&issueTemp, cve, sc, resp, path, its.Assignee, issueType, labels, owner) if len(brandArray) > 0 { var brandArryTmp []string for _, brand := range brandArray { - brandArryTmp = append(brandArryTmp, brand + ":") + brandArryTmp = append(brandArryTmp, brand+":") } brandStr := strings.Join(brandArryTmp, ",") issueTemp.AffectedVersion = brandStr } - // 存储issue数据 + // Store issue data issTempID, err := models.CreateIssueTemplate(&issueTemp) if err != nil { logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err) return "", err } logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum) - // 构建回调 - //err = CreateIssueHooks(accessToken, owner, path, cve, resp) - //if err != nil { - // logs.Error("创建hooks 失败, cveNum: ", cve.CveNum, "err: ", err) - // return "", err - //} else { - // logs.Info("创建hooks 成功, cveNum: ", cve.CveNum) - //} - //CreateIssueLabel(accessToken, owner, path, resp["number"].(string)) - // 更新issue状态 + // Update issue status models.UpdateIssueStatus(cve, 2) - // 更新分数状态 + // Update score status models.UpdateIssueScore(cve, 2) - // 更新分数记录状态 + // Update score record status models.UpdateIssueScoreRe(cve, 1) } } else { issueType := "CVE和安全问题" - //labels := "CVE/Bug,CVE/Undisclosed,CVE/Disclosed" - labels := "CVE/Undisclosed" + labels := beego.AppConfig.String("labelUnFix") if accessToken != "" && owner != "" && path != "" { url := "https://gitee.com/api/v5/repos/" + owner + "/issues" score := strconv.FormatFloat(sc.NVDScore, 'f', 1, 64) @@ -140,15 +131,14 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st logs.Error("创建issue 失败, err: ", ok, "url: ", url) return "", errors.New("创建issue失败") } - // 构建数据 var issueTemp models.IssueTemplate CreateIssueData(&issueTemp, cve, sc, resp, path, assignee, issueType, labels, owner) - // 存储issue数据 + // Store issue data issTempID, err := models.CreateIssueTemplate(&issueTemp) if len(brandArray) > 0 { var brandArrayTmp []string for _, brand := range brandArray { - brandArrayTmp = append(brandArrayTmp, brand + ":") + brandArrayTmp = append(brandArrayTmp, brand+":") } brandStr := strings.Join(brandArrayTmp, ",") issueTemp.AffectedVersion = brandStr @@ -158,7 +148,7 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st return "", err } logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum) - // 创建issue评论 + // Create issue comment affectedVersion := "" if len(brandArray) > 0 { for i, brand := range brandArray { @@ -172,7 +162,6 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st } errx := CreateIssueComment(accessToken, owner, path, assignee, cve, resp, affectedVersion) logs.Info("issue评论创建结果, err: ", errx) - // 构建回调 issueNum := resp["number"].(string) issueID := int64(resp["id"].(float64)) err = CreateDepositHooks(accessToken, owner, path, cve, issueNum, issueID) @@ -181,13 +170,11 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st return "", err } logs.Info("创建hooks 成功, cveNum: ", cve.CveNum) - // 创建issue标签 - //CreateIssueLabel(accessToken, owner, path, resp["number"].(string)) - // 更新issue状态 + // Update issue status models.UpdateIssueStatus(cve, 2) - // 更新分数状态 + // Update score status models.UpdateIssueScore(cve, 2) - // 更新分数记录状态 + // Update score record status models.UpdateIssueScoreRe(cve, 1) } } @@ -196,7 +183,6 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st func UpdateIssueToGit(accessToken string, owner string, path string, cve models.VulnCenter, its models.IssueTemplate) (string, error) { - //issueType := its.IssueType logs.Info("更新模板请求参数: cve: ", cve, ",its: ", its, ", owner: ", owner, ",path: ", path) labels := its.IssueLabel pkgList, err := models.QueryPackageByCveId(its.CveId) @@ -228,7 +214,7 @@ func UpdateIssueToGit(accessToken string, owner string, path string, logs.Error("创建issue 失败, err: ", ok, "url: ", url) return "", errors.New("创建issue失败") } - // 存储安全公告相关信息 + // Store security bulletin related information var sec models.SecurityNotice CreateSecNoticeData(&sec, cve, path, its.AffectedVersion) secId, err := models.UpdateSecNotice(&sec) @@ -242,11 +228,6 @@ func UpdateIssueToGit(accessToken string, owner string, path string, return "", nil } -//func UpdateCommentInfo(owner, path, issueNumber string) { -// issueUrl := "https://gitee.com/" + owner + "/" + path + "/issues/" + issueNumber -// util.HTTPGet(issueUrl) -//} - func CreateIssueHookData(issHook *models.IssueHooks, cve models.VulnCenter, resp map[string]interface{}, path, owner string, issueNum string, issueId int64) *models.IssueHooks { issHook.CveId = cve.CveId @@ -300,7 +281,6 @@ func CreateDepositHooks(accessToken string, owner string, path string, logs.Error("config init error:", err) return err } - //pwd := os.Getenv("hookpwd") pwd := BConfig.String("hook::hookpwd") hookurl := BConfig.String("hook::hookurl") ihs, errh := models.GetIssueHook(&ih) @@ -336,12 +316,10 @@ func CreateDepositHooks(accessToken string, owner string, path string, logs.Error("创建仓库 hook失败, err: ", ok, "url: ", url) return errors.New("创建仓库 hook失败") } - // 构建数据 if resp["password"].(string) == pwd { var issHook models.IssueHooks CreateIssueHookData(&issHook, cve, resp, path, owner, issueNum, issueId) - // 存储issue数据 hookId, err := models.CreateDepositHooks(&issHook) if err != nil { logs.Error("创建仓库 hook数据失败, cveNum: ", cve.CveNum, "err: ", err) @@ -381,12 +359,11 @@ func CreateDepositHooks(accessToken string, owner string, path string, logs.Error("创建仓库hook失败, err: ", ok, "url: ", url) return errors.New("创建仓库hook失败") } - // 构建数据 if resp["password"].(string) == pwd { var issHook models.IssueHooks CreateIssueHookData(&issHook, cve, resp, path, owner, issueNum, issueId) - // 存储issue数据 + // Store issue data hookId, err := models.CreateDepositHooks(&issHook) if err != nil { logs.Error("创建仓库hook失败, cveNum: ", cve.CveNum, "err: ", err) @@ -425,12 +402,11 @@ func CreateDepositHooks(accessToken string, owner string, path string, logs.Error("创建仓库hook失败, err: ", ok, "url: ", url) return errors.New("创建仓库hook失败") } - // 构建数据 if resp["password"].(string) == pwd { var issHook models.IssueHooks CreateIssueHookData(&issHook, cve, resp, path, owner, issueNum, issueId) - // 存储issue数据 + // Store issue data hookID, err := models.CreateDepositHooks(&issHook) if err != nil { logs.Error("创建仓库hook失败, cveNum: ", cve.CveNum, "err: ", err) @@ -454,8 +430,6 @@ func CreateIssueComment(accessToken, owner, path, Assignee string, return err } commentCmd := BConfig.String("reflink::comment_cmd") - //commentBody := "Hey @" + Assignee + " , Please complete the content of the issue template in the issue comment. Please refer to the format:" + - // commentCmd commentBody := CommentTemplate(Assignee, commentCmd, affectedVersion) requestBody := fmt.Sprintf(`{ "access_token": "%s", @@ -510,7 +484,6 @@ func CreateSecNoticeData(sec *models.SecurityNotice, iss models.VulnCenter, path sec.CveId = iss.CveId sec.CveNum = iss.CveNum sec.Introduction = "An update for " + path + " is now available for " + branchs - //sec.Summary = "An update for " + path + " is now available for " + branchs sec.Theme = sec.Introduction + ";\n\n" + "openEuler Security has rated this" + " update as having a security impact of medium. A Common Vunlnerability" + " Scoring System(CVSS)base score,which gives a detailed severity rating," + @@ -522,18 +495,9 @@ func CreateIssueLabel(accessToken string, owner string, path string, issNum string) error { if accessToken != "" && owner != "" && path != "" { url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/issues/" + issNum + "/labels" - //label := []string{"CVE/Undisclosed","CVE/Disclosed"} - //reqs ,err:= json.Marshal(&requestBody) - //if err != nil { - // return err - //} - //requestBody := fmt.Sprintf(`{ - // "access_token": "%s", - // "body": ["CVE/Undisclosed","CVE/Disclosed"] - // }`, accessToken) body := make(map[string]interface{}) body["access_token"] = accessToken - body["body"] = "[\"CVE/Undisclosed\",\"CVE/Disclosed\"]" + body["body"] = fmt.Sprintf(`[%s,%s]`,beego.AppConfig.String("labelUnFix"),beego.AppConfig.String("labelFixed")) requestBody, _ := json.Marshal(body) logs.Info("create issue label: ", string(requestBody)) resp, err := util.HTTPPost1(url, string(requestBody)) diff --git a/taskhandler/cve.go b/taskhandler/cve.go index e9b09a4..1824156 100644 --- a/taskhandler/cve.go +++ b/taskhandler/cve.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/astaxie/beego" "github.com/astaxie/beego/logs" "io/ioutil" "net/http" @@ -675,11 +676,8 @@ func GenCveVuler(cveData models.OriginUpstream, cveRef string, openeulernum int) cveScV3, ok := models.QueryCveCvssV3(cveScore.ScoreId) if !ok { scopeType = "v2" - //logs.Error("cveScore, data: ", cveData, ",cveScore: ", cveScore) - //models.UpdateOriginStatus(common.GetCurTime(), cveData.PackName, cveData.Version, cveData.CveId, 3) - //return false, errors.New("数据错误,暂时不处理") } - if cveScV3.VectorString == "" || len(cveScV3.VectorString) == 0 || cveScV3.BaseScore == 0.0{ + if cveScV3.VectorString == "" || len(cveScV3.VectorString) == 0 || cveScV3.BaseScore == 0.0 { scopeType = "v2" } cveScoreV2, ok2 := models.QueryCveScore(cveImpact.ImpactId, "v2") @@ -791,8 +789,6 @@ func SyncCveVuler(cveData models.OriginExcel, cveRef string, openeulerNum int) ( goe, ok := models.QueryCveOpeneulerDetaildata(cveData.PackName, cveData.CveVersion) if !ok { logs.Error("仓库存在,yaml数据源不存在,god: ", god, ", cveData: ", cveData) - //models.UpdateOriginExcelStatus(common.GetCurTime(), cveData.CveId, 4) - //return false, errors.New("仓库不存在,暂时不处理") } CveRes, err := models.QueryCveByNum(cveData.CveNum, cveData.PackName, cveData.CveVersion) if err { @@ -920,7 +916,6 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + RemoveSubstring(lop.BriefIntroduction, "

") sec.ReferenceLink = cveRef + cveData.CveNumber sec.Introduction = "An update for " + lop.Components + " is now available for " + lop.InfProduct - //sec.Summary = "An update for " + path + " is now available for " + branchs sec.Theme = sec.Introduction + ";\n\n" + "openEuler Security has rated this" + " update as having a security impact of medium. A Common Vunlnerability" + " Scoring System(CVSS)base score,which gives a detailed severity rating," + @@ -1024,7 +1019,7 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c issueTemp.IssueStatus = 6 } issueTemp.StatusName = cveData.State - issueTemp.IssueLabel = "cve/Undisclosed" + issueTemp.IssueLabel = beego.AppConfig.String("labelUnFix") issueTemp.Owner = owner issueTemp.Repo = lop.Repo if cveData.Title != "" { @@ -1032,7 +1027,6 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c } issueTemp.IssueType = cveData.IssueType issueTemp.CveLevel = vul.CveLevel - // 存储issue数据 issTempId, issError := models.CreateIssueTemplate(&issueTemp) if issError != nil { logs.Error("创建issue 模板的数据失败, cveNum: ", cveData.CveNumber, "err: ", issError) @@ -1069,7 +1063,6 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + RemoveSubstring(lop.BriefIntroduction, "

") sec.ReferenceLink = cveRef + cveData.CveNumber sec.Introduction = "An update for " + lop.Components + " is now available for " + lop.InfProduct - //sec.Summary = "An update for " + path + " is now available for " + branchs sec.Theme = sec.Introduction + ";\n\n" + "openEuler Security has rated this" + " update as having a security impact of medium. A Common Vunlnerability" + " Scoring System(CVSS)base score,which gives a detailed severity rating," + @@ -1160,23 +1153,8 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c if openError == nil { score.OpenEulerScore = openEulerScore } - //sc.NvectorVule = lop.CvsVector score.OvectorVule = lop.OpVector - - //sc.Ostatus = 0 score.ScoreType = "v3" - //vectorN := models.VectorValue{} - //ok := vectorN.VctToVectorValue(lop.CvsVector) - //if ok { - // sc.NattackVector = vectorN.AttackVector - // sc.NattackComplexity = vectorN.AttackComplexity - // sc.NprivilegeRequired = vectorN.PrivilegesRequired - // sc.NuserInteraction = vectorN.UserInteraction - // sc.Nscope = vectorN.Scope - // sc.Nconfidentiality = vectorN.Confidentiality - // sc.Nintegrity = vectorN.Integrity - // sc.Navailability = vectorN.Availability - //} vectorO := models.VectorValue{} okx := vectorO.VctToVectorValue(lop.OpVector) if okx { @@ -1317,7 +1295,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c issueTemp.IssueStatus = 6 } issueTemp.StatusName = cveData.State - issueTemp.IssueLabel = "cve/Undisclosed" + issueTemp.IssueLabel = beego.AppConfig.String("labelUnFix") issueTemp.Owner = owner issueTemp.Repo = lop.Repo if cveData.Title != "" { @@ -1326,7 +1304,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c issueTemp.IssueType = cveData.IssueType issueTemp.CveLevel = vul.CveLevel } - // 存储issue数据 + // Store issue data issTempId, issError := models.CreateIssueTemplate(&issueTemp) if issError != nil { logs.Error("创建issue 模板的数据失败, cveNum: ", cveData.CveNumber, "err: ", issError) @@ -1378,7 +1356,6 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, cvd, owner) logs.Info(upOk, upError) lock.Unlock() - //models.UpdateCveStatusExportByNum(common.GetCurTime(), cveData.CveNumber, 2, 2) } else { lock.Lock() okx, errx := InsertIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, owner) @@ -1399,7 +1376,6 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 1, goe, cvd, owner) logs.Info(upOk, upError) lock.Unlock() - //models.UpdateCveStatusExportByNum(common.GetCurTime(), cveData.CveNumber, 2, 2) } else { lock.Lock() okx, errx := InsertIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, owner) diff --git a/taskhandler/excel.go b/taskhandler/excel.go index 1b39b31..fd6f913 100644 --- a/taskhandler/excel.go +++ b/taskhandler/excel.go @@ -14,15 +14,15 @@ import ( //CveExcel Excel export client type CveExcel struct { - ExcelName string //excel 名字 - ExcelHandel *excelize.File //excel 文件句柄 + ExcelName string //excel name + ExcelHandel *excelize.File //excel File handle CveSheetIdx int //CVE sheet index CveSheetName string // CVE sheet Name - SecNoticeSheetIdx int //安全公告index - SecNoticeSheetName string //安全公告sheet名字 - SecNoticePrefix string //安全公告前缀 - SecNoticeSuffixIdx int64 //安全公告后缀起始值 - InfProductSheetName string //CVE 影响的产品 + SecNoticeSheetIdx int //Security bulletin index + SecNoticeSheetName string //Security bulletin sheet name + SecNoticePrefix string //Security bulletin prefix + SecNoticeSuffixIdx int64 //Security bulletin suffix start value + InfProductSheetName string //CVE Affected products InfProductSheetIndex int PackageURLSheetName string PackageURLSheetIndex int @@ -301,7 +301,7 @@ func (ec *CveExcel) FillHeader() (err error) { if err != nil { return } - //安全公告表头生成 + //Security bulletin header generation sh := []interface{}{"公告编号", "CVE编号", "简介", "概要", "主题", "描述", "影响组件", "影响产品", "影响包名", "参考", "公告时间"} err = ec.ExcelHandel.SetSheetRow(ec.SecNoticeSheetName, "A1", &sh) if err != nil { @@ -347,8 +347,7 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) { if v.Num == 1 { ec.setContentRow(v) } else if v.Num > 1 { - //处理CVE_NUM 重复 - //1.根据cve_num 获取issue_tpl 如果所有的issue_status ==2 0r issue_status == 6 则可以导出数据 + //1.Obtain issue_tpl according to cve_num, if all issue_status == 2 0r issue_status == 6, then data can be exported list, err := models.GetIssueTplByCveNum(v.CveNum) if err != nil { logs.Error(err) @@ -366,7 +365,7 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) { } } - //2.从issue_status == 2 的模板数据中找到评分最高的对应的ExcelExport数据 + //2.Find the corresponding ExcelExport data with the highest score from the template data of issue_status == 2 if canMerger && len(mergerList) > 0 { canExport, err := models.GetCanExportCveDataSameNum(strings.Join(mergerList, ",")) if err != nil { @@ -384,12 +383,10 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) { ep.InfluenceComponent = ep.InfluenceComponent + "\n" + ex.InfluenceComponent ep.AffectProduct = ep.AffectProduct + "\n" + ex.AffectProduct } - } ec.setContentRow(ep) } } - } } return nil diff --git a/taskhandler/grabissue.go b/taskhandler/grabissue.go index cc382f2..8bcc0ce 100644 --- a/taskhandler/grabissue.go +++ b/taskhandler/grabissue.go @@ -14,23 +14,23 @@ import ( const ( //GiteOrgInfoURL get gitee org info url - GiteOrgInfoURL = `https://gitee.com/api/v5/orgs/%v?access_token=%v` + GiteOrgInfoURL = `https://gitee.com/api/v5/orgs/%v?access_token=%v` //GiteOrgReposURL get all repository url - GiteOrgReposURL = `https://gitee.com/api/v5/orgs/%v/repos?access_token=%v&type=all&page=%v&per_page=%v` + GiteOrgReposURL = `https://gitee.com/api/v5/orgs/%v/repos?access_token=%v&type=all&page=%v&per_page=%v` //GiteRepoIssuesURL get issue list url GiteRepoIssuesURL = `https://gitee.com/api/v5/repos/%v/%v/issues?state=%v&sort=created&direction=desc&page=%v&per_page=%v` //GiteRepoBranch get repo branch url - GiteRepoBranch = `https://gitee.com/api/v5/repos/%v/%v/branches?access_token=%v` + GiteRepoBranch = `https://gitee.com/api/v5/repos/%v/%v/branches?access_token=%v` //RepoInfoURL get repo info url - RepoInfoURL = "https://api.openeuler.org/pkgmanagedebug/packages/packageInfo?table_name=mainline&pkg_name=%s" - perPage = 50 + RepoInfoURL = "https://api.openeuler.org/pkgmanagedebug/packages/packageInfo?table_name=mainline&pkg_name=%s" + perPage = 50 //IssueType Types of issues crawled - IssueType = "CVE和安全问题" + IssueType = "CVE和安全问题" ) var wg sync.WaitGroup -//OrgInfo 组织 +//OrgInfo type OrgInfo struct { ID int32 `json:"id,omitempty"` Login string `json:"login,omitempty"` @@ -47,7 +47,7 @@ type OrgInfo struct { PrivateRepos int64 `json:"private_repos,omitempty"` } -//Branch 获取所有分支 +//Branch Get all branches type Branch struct { Name string `json:"name,omitempty"` Protected bool `json:"protected,omitempty"` @@ -57,7 +57,7 @@ type Branch struct { //PackageInfo package info model type PackageInfo struct { Code string - Msg string + Msg string Data Info } @@ -105,7 +105,7 @@ func GrabIssueByRepo(accToken, owner, repo, state string) { logs.Error(err) break } - handleIssueList(list, product,desc) + handleIssueList(list, product, desc) if len(list) < perPage { break } @@ -137,7 +137,7 @@ func getInfProduct(token string, owner string, repo string) (infPro string, err return } -func handleIssueList(list []models.HookIssue, product,desc string) { +func handleIssueList(list []models.HookIssue, product, desc string) { if len(list) == 0 { return } @@ -150,7 +150,7 @@ func handleIssueList(list []models.HookIssue, product,desc string) { IssueCreateAt: v.CreateAt, IssueUpdateAt: v.UpdateAt, IssueFinishAt: v.FinishedAt, IssueCreate: v.User.Login, IssueAssignee: v.Assignee.Login, RepoPath: v.Repository.Path, - RepoUrl: v.Repository.Url, InfProduct: product,RepoDesc: desc} + RepoUrl: v.Repository.Url, InfProduct: product, RepoDesc: desc} vt := util.TrimString(v.Title) if strings.HasPrefix(vt, "CVE") { item.CveNumber = vt diff --git a/taskhandler/oricvecheck.go b/taskhandler/oricvecheck.go index e9f48f5..f9b40c6 100644 --- a/taskhandler/oricvecheck.go +++ b/taskhandler/oricvecheck.go @@ -18,7 +18,7 @@ func CheckCveOriginData(prcnum int) (string, error) { } for { os, num, err := models.QueryOriginCveE(prcnum) - if err != nil || num == 0{ + if err != nil || num == 0 { logs.Info("当前无异常cve原始数据处理, err: ", err, ", 处理时间范围: beforetime: ", "curtime: ", common.GetCurTime()) @@ -53,8 +53,8 @@ func CheckCveOriginData(prcnum int) (string, error) { ch <- idx }(i, cveOrg) } - for i :=0; i < cap(ch); i++ { - <- ch + for i := 0; i < cap(ch); i++ { + <-ch } close(ch) } diff --git a/taskhandler/yaml.go b/taskhandler/yaml.go index e94b373..4dee8af 100644 --- a/taskhandler/yaml.go +++ b/taskhandler/yaml.go @@ -12,18 +12,19 @@ import ( "sync" ) -func GetYamlTables(url string) (string, error){ + +func GetYamlTables(url string) (string, error) { compURL := url + "/lifeCycle/tables" - body, err:= util.HTTPGetCom(compURL) + body, err := util.HTTPGetCom(compURL) if err == nil && body != nil { var respBody map[string]interface{} - err =json.Unmarshal(body, &respBody) + err = json.Unmarshal(body, &respBody) if err != nil { logs.Error(err) return "", err } logs.Info(respBody) - if respBody["code"].(string) == "2001"{ + if respBody["code"].(string) == "2001" { for i, values := range respBody["data"].([]interface{}) { var gt models.GitPackageTable gt.TableName = values.(string) @@ -60,24 +61,23 @@ func GetYamlByGit(url string) (string, error) { var ch = make(chan int, len(gt)) for i, tableValue := range gt { logs.Info("查询第 ", i, "tableName: ", tableValue.TableName, "开始...") - go func(tv models.GitPackageTable,idx int) { + go func(tv models.GitPackageTable, idx int) { ok, err := GetYaml(url, compURL1, page, size, tv, &ch) if err == nil { logs.Info("当前数据处理成功,i: ", idx) } else { logs.Error("当前数据处理失败, ok: ", ok, ",i: ", idx, ", err: ", err) } - }(tableValue,i) + }(tableValue, i) } - for i:=0; i< len(gt); i++ { + for i := 0; i < len(gt); i++ { <-ch } close(ch) return "", nil } -func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageTable, ch *chan int) (string, error){ - //defer wg.Done() +func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageTable, ch *chan int) (string, error) { defer common.Catchs() var tc GitTablePackCount tc.TableName = tableValue.TableName @@ -86,46 +86,45 @@ func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageT tc.Page = page tc.Size = size compURL2 := compURL1 + "?table_name=" + tableValue.TableName - for ;; { + for ; ; { compURL := compURL2 + "&page_num=" + strconv.Itoa(tc.Page) + "&page_size=" + strconv.Itoa(size) - body, err:= util.HTTPGetCom(compURL) + body, err := util.HTTPGetCom(compURL) var respBody map[string]interface{} if err == nil && body != nil { - err =json.Unmarshal(body, &respBody) + err = json.Unmarshal(body, &respBody) if err != nil { logs.Error(err) return "", err } } else { - logs.Error( "http 请求失败, url: ", compURL) + logs.Error("http 请求失败, url: ", compURL) return "", err } logs.Info("start: ", tc) - if respBody["code"].(string) == "2001"{ - //chx := make(chan int) + if respBody["code"].(string) == "2001" { curCount := 0 - if respBody == nil || respBody["data"] == nil || len(respBody["data"].([]interface{})) == 0{ + if respBody == nil || respBody["data"] == nil || len(respBody["data"].([]interface{})) == 0 { logs.Error("数据为空, url: ", compURL) return "", err } for i, values := range respBody["data"].([]interface{}) { tc.Count = tc.Count + 1 - logs.Info("第:",tc.Page,"页, 到: ", tc.Size, "条, tableName: ",tc.TableName, + logs.Info("第:", tc.Page, "页, 到: ", tc.Size, "条, tableName: ", tc.TableName, ",已处理到第count: ", tc.Count, "条, yaml values: ", values) - if values == nil || values == "" || len(values.(map[string]interface{})) == 0{ - logs.Error("第:",tc.Page,"页, 到: ", tc.Size, "条, tableName: ",tc.TableName, + if values == nil || values == "" || len(values.(map[string]interface{})) == 0 { + logs.Error("第:", tc.Page, "页, 到: ", tc.Size, "条, tableName: ", tc.TableName, ",已处理到第count: ", tc.Count, "条, yaml values: ", values, ", 处理失败") curCount = curCount + 1 continue } valuesX := values.(map[string]interface{}) + lock.Lock() ok, err := ProcPackDetail(url, valuesX, tableValue, i) + lock.Unlock() logs.Info("ok: ", ok, ", err: ", err) - //<- chx curCount = curCount + 1 } - //close(chx) totalPage := 0 switch respBody["total_page"].(type) { case string: @@ -152,20 +151,20 @@ func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageT default: totalCount = 1 } - if tc.Page > totalPage || tc.Size >= totalCount{ - logs.Info("已处理完成:tableName: ", tc.TableName, "数据获取完成, " + + if tc.Page > totalPage || tc.Size >= totalCount { + logs.Info("已处理完成:tableName: ", tc.TableName, "数据获取完成, "+ "总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n", ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL) break } else { - logs.Info("当前: tableName: ", tc.TableName, "数据获取完成, " + + logs.Info("当前: tableName: ", tc.TableName, "数据获取完成, "+ "总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n", ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL) lock.Lock() tc.Page = tc.Page + page tc.Size = tc.Size + curCount lock.Unlock() - logs.Info("增加后: tableName: ", tc.TableName, "数据获取完成, " + + logs.Info("增加后: tableName: ", tc.TableName, "数据获取完成, "+ "总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n", ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL) } @@ -179,16 +178,17 @@ func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageT return "", nil } - -func ProcPackDetail(url string, values map[string]interface{}, tableValue models.GitPackageTable, i int) (string, error){ +func ProcPackDetail(url string, value map[string]interface{}, tableValue models.GitPackageTable, i int) (string, error) { + values := value var ge models.GitOpenEuler GitOpenEulerData(values, &ge, tableValue) - // 查询cpe数据 + // Query cpe data var pc models.PackageCpe pcError := models.GetCpePackName(&pc, ge.PackageName) if pcError == nil && pc.Id > 0 { ge.CpePackName = pc.CpePackName } + logs.Info("正在处理的 packageName: ", ge.PackageName) ok, _ := models.GetSingleYaml(&ge) if ok { logs.Info("第 ", i, "条数据, PackageName: ", ge.PackageName, "已经存在,不需要再次插入") @@ -234,22 +234,23 @@ func ProcPackDetail(url string, values map[string]interface{}, tableValue models return "", nil } -func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.GitOpenEuler) (string, error){ +func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.GitOpenEuler) (string, error) { scpURL := url + "/packages/packageInfo" + "?table_name=" + tableValue.TableName + "&pkg_name=" + ge.PackageName - body, err:= util.HTTPGetCom(scpURL) + logs.Info("PackageName: ", ge.PackageName, "获取packageInfo, 请求参数: ", scpURL) + body, err := util.HTTPGetCom(scpURL) var respBody map[string]interface{} if err == nil && body != nil { - err =json.Unmarshal(body, &respBody) + err = json.Unmarshal(body, &respBody) if err != nil { logs.Error(err) return "", err } } else { - logs.Error( "http 请求失败, scpURL: ", scpURL) + logs.Error("http 请求失败, scpURL: ", scpURL) return "", err } logs.Info(respBody) - if respBody["code"].(string) == "2001"{ + if respBody["code"].(string) == "2001" { if respBody["data"] == nil || respBody["data"] == "" { logs.Error("获取包详情失败, scpURL: ", scpURL) return "", errors.New("数据错误") @@ -257,7 +258,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git var gp models.GitPackageInfo GitOpenEulerInfoData(respBody["data"].(map[string]interface{}), &gp, ge) detailid, typex, err := models.CreateYamlDetail(&gp, ge) - if detailid >0 && typex == "insert" && err == nil { + if detailid > 0 && typex == "insert" && err == nil { subdata := respBody["data"].(map[string]interface{}) if subdata["subpack"] == nil { return "", err @@ -293,7 +294,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git } SubID, typex, err := models.CreateYamlSubPack(&gb) if SubID > 0 && typex == "insert" && err == nil { - if packValue["provides"] != nil && len(packValue["provides"].([]interface{})) > 0{ + if packValue["provides"] != nil && len(packValue["provides"].([]interface{})) > 0 { provides := packValue["provides"].([]interface{}) for _, provValuex := range provides { logs.Info("yaml provValuex: ", provValuex) @@ -320,11 +321,10 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git } else { gs.ProvideName = provValue["name"].(string) } - gs.Requiredby = "" ProvideID, typexx, err := models.CreateYamlSubPackProvides(&gs) if ProvideID > 0 && typexx == "insert" && err == nil { - if provValue["requiredby"] != nil && len(provValue["requiredby"].([]interface{})) > 0{ + if provValue["requiredby"] != nil && len(provValue["requiredby"].([]interface{})) > 0 { requiredby := provValue["requiredby"].([]interface{}) for _, reqValue := range requiredby { if reqValue != nil && reqValue.(string) != "" { @@ -339,7 +339,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git } } } - if packValue["requires"] != nil && len(packValue["requires"].([]interface{})) > 0{ + if packValue["requires"] != nil && len(packValue["requires"].([]interface{})) > 0 { requires := packValue["requires"].([]interface{}) for _, reqValuexx := range requires { logs.Info("reqValuexx: ", reqValuexx) @@ -348,7 +348,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git } reqValuex := reqValuexx.(map[string]interface{}) reqStr := "" - if reqValuex["providedby"] != nil && len(reqValuex["providedby"].([]interface{})) > 0{ + if reqValuex["providedby"] != nil && len(reqValuex["providedby"].([]interface{})) > 0 { providedby := reqValuex["providedby"].([]interface{}) for _, reqValue := range providedby { if reqValue != nil && reqValue.(string) != "" { @@ -357,7 +357,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git } } if reqStr != "" { - reqStr = reqStr[:len(reqStr) -1] + reqStr = reqStr[:len(reqStr)-1] } var gs models.GitSubPackRequire gs.SubId = SubID @@ -388,4 +388,4 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git } } return "", nil -} \ No newline at end of file +} diff --git a/util/http.go b/util/http.go index 38a6b0d..02957de 100644 --- a/util/http.go +++ b/util/http.go @@ -15,7 +15,7 @@ import ( //RequestInfo http request information type RequestInfo struct { URL string - Data map[string]string //post要传输的数据,必须key value必须都是string + Data map[string]string //The data to be transmitted by the post, the key value must be both string DataInterface map[string]interface{} } @@ -136,7 +136,7 @@ func HTTPPost1(url string, requestBody string) ([]map[string]interface{}, error) //PostURLEncoded request params encode func PostURLEncoded(this RequestInfo) ([]byte, error) { client := &http.Client{} - //post要提交的数据 + //post data to be submitted DataURLVal := url.Values{} for key, val := range this.Data { DataURLVal.Add(key, val) @@ -146,18 +146,18 @@ func PostURLEncoded(this RequestInfo) ([]byte, error) { logs.Error(err) return nil, err } - //伪装头部 + //Camouflage head req.Header.Set("Accept", "application/json") req.Header.Add("Content-Type", "application/x-www-form-urlencoded") - //提交请求 + //Submit request resp, err := client.Do(req) if err != nil { logs.Error(err) return nil, err } defer resp.Body.Close() - //读取返回值 + //Read return value result, err := ioutil.ReadAll(resp.Body) if err != nil { logs.Error(err) diff --git a/util/parsepayload.go b/util/parsepayload.go index f41f8d0..25dad53 100644 --- a/util/parsepayload.go +++ b/util/parsepayload.go @@ -18,16 +18,6 @@ const ( ) var ( - //LAC 漏洞组件标签 - //LAC = "LAC" - //LN 漏洞编号标签 - //LN = "LN" - //LAV 漏洞版本标签 - //LAV = "LAV" - //CVS cvss 3.0分值标签 - //CVS = "CVS" - //CVV cvss 3.1向量标签 - //CVV = "CVV" //LD 漏洞描述标签 LD = "LD" //IAD 影响分析说明标签 @@ -64,6 +54,8 @@ var ( RegexpCveScore = regexp.MustCompile(`CVSS V[23].0分值[::](?s:(.*?))漏洞[简描]述[::]`) //RegexpCveBriefDesc brief description extract regexp RegexpCveBriefDesc = regexp.MustCompile(`漏洞[简描]述[::](?s:(.*?))影响性分析说明[::]`) + //RegexpCveBriefDesc new tpl brief description extract regexp + RegexpCveBriefDescNew = regexp.MustCompile(`漏洞[简描]述[::](?s:(.*?))漏洞公开时间[::]`) //RegexpCveInfluencesDesc influences description regexp RegexpCveInfluencesDesc = regexp.MustCompile(`影响性分析说明[::](?s:(.*?))原理分析[::]`) //RegexpCveInfluencesDescNew new tpl influences description regexp @@ -85,16 +77,16 @@ var ( //RegexpCveInfluencesPkg the cve influences package regexp RegexpCveInfluencesPkg = regexp.MustCompile(`受影响的包[::](?s:(.*?))$`) //RegexpDigital digital regexp - RegexpDigital = regexp.MustCompile(`(\d){1,}(\.\d+)?`) - RegexpSpecialDigital = regexp.MustCompile(`(CVSS[::]3.0|CVSS[::]2.0|cvss[::]3.0|cvss[::]2.0|3.0/|2.0/|3.0 /|2.0 /)*`) //^((CVSS:3.0|CVSS:2.0|3.0/|2.0/|3.0 /|2.0 /).)*$ - RegexpVector = regexp.MustCompile(`AV:[NLAP](?s:(.*?))/A:[LNH]`) - RegexpVectorV2 = regexp.MustCompile(`AV:[LAN](?s:(.*))/Au:[MSN](?s:(.*))/A:[NPC]`) - RegexpScoreTypeV2 = regexp.MustCompile(`(?mi)^CVSS v2.0分值\s*`) - RegexpScoreTypeV3 = regexp.MustCompile(`(?mi)^CVSS v3.0分值\s*`) - RegexpIsNewTpl = regexp.MustCompile(`(?mi)^原理分析[::]\s*`) - RegexpIsNewTpl2 = regexp.MustCompile(`(?mi)^规避方案或消减措施[::]\s*`) - regexpEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]受影响`) - regexpNoEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]不受影响`) + RegexpDigital = regexp.MustCompile(`(\d){1,}(\.\d+)?`) + RegexpSpecialDigital = regexp.MustCompile(`(CVSS[::]3.0|CVSS[::]2.0|cvss[::]3.0|cvss[::]2.0|3.0/|2.0/|3.0 /|2.0 /)*`) //^((CVSS:3.0|CVSS:2.0|3.0/|2.0/|3.0 /|2.0 /).)*$ + RegexpVector = regexp.MustCompile(`AV:[NLAP](?s:(.*?))/A:[LNH]`) + RegexpVectorV2 = regexp.MustCompile(`AV:[LAN](?s:(.*))/Au:[MSN](?s:(.*))/A:[NPC]`) + RegexpScoreTypeV2 = regexp.MustCompile(`(?mi)^CVSS v2.0分值\s*`) + RegexpScoreTypeV3 = regexp.MustCompile(`(?mi)^CVSS v3.0分值\s*`) + RegexpIsNewTpl = regexp.MustCompile(`(?mi)^原理分析[::]\s*`) + RegexpIsNewTpl2 = regexp.MustCompile(`(?mi)^规避方案或消减措施[::]\s*`) + regexpEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]受影响`) + regexpNoEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]不受影响`) regexpOtherEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]`) ) @@ -127,7 +119,6 @@ func (a CaSlice) Less(i, j int) bool { } func init() { - //pattenStr := `/AV:[NLAP]/AC:[HL]/PR:[NLH]/UI:[NR]/S:[UC]/C:[NLH]/I:[HNL]/A:[LNH]` VectorMap = make(map[string]map[string]string) mAv := make(map[string]string) mAv["N"] = "Network" -- Gitee