Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Metalint for checking against the deprecaetd lint.RegisterLint function #775

Merged
merged 2 commits into from
Dec 3, 2023

Conversation

christopher-henderson
Copy link
Member

@christopher-henderson christopher-henderson commented Dec 3, 2023

This addresses the conversation in #765 regarding enforcing the deprecation of lint.RegisterLint via our own code linter.


@aaomidi I took your general idea from #770 and ported into the repo's custom code linter that was built just for this purpose. Thank you for the working code sample!


Given the sample input file...

package cabf_ev

/*
 * ZLint Copyright 2023 Regents of the University of Michigan
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy
 * of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

import (
	"github.com/zmap/zcrypto/x509"
	"github.com/zmap/zlint/v3/lint"
	"github.com/zmap/zlint/v3/util"
)

type evNoBiz struct{}

func init() {
	lint.RegisterLint(&lint.Lint{
		Name:          "e_ev_business_category_missing",
		Description:   "EV certificates must include businessCategory in subject",
		Citation:      "EVGs: 9.2.3",
		Source:        lint.CABFEVGuidelines,
		EffectiveDate: util.ZeroDate,
		Lint:          NewEvNoBiz,
	})
}

func NewEvNoBiz() lint.LintInterface {
	return &evNoBiz{}
}

func (l *evNoBiz) CheckApplies(c *x509.Certificate) bool {
	return util.IsEV(c.PolicyIdentifiers) && util.IsSubscriberCert(c)
}

func (l *evNoBiz) Execute(c *x509.Certificate) *lint.LintResult {
	if util.TypeInName(&c.Subject, util.BusinessOID) {
		return &lint.LintResult{Status: lint.Pass}
	} else {
		return &lint.LintResult{Status: lint.Error}
	}
}

CICD will print the output...

Found 1 linting errors
--------------------
Linting Error

lint.RegisterLint is deprecated and should not be used. Please use the register function specific to your lint classification (I.E. lint.RegisterCertificateLint for certificate lints and lint.RegisterRevocationListLint for CRL lints).

File /home/chris/projects/zlint/v3/lints/cabf_br/lint_ca_common_name_missing.go, line 26

lint.RegisterLint

For more information, please see the following citations.
	https://github.com/zmap/zlint/issues/765

exit status 1

@zakird zakird merged commit 7f6ef92 into master Dec 3, 2023
8 checks passed
@zakird zakird deleted the registerlint_dep branch December 3, 2023 18:58
@robplee robplee mentioned this pull request Dec 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants