pull/541/merge
hhomar 6 years ago committed by GitHub
commit 7d6a50ef4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -42,6 +42,7 @@ import (
_ "github.com/coreos/clair/database/pgsql"
// Register extensions.
_ "github.com/coreos/clair/ext/featurefmt/alpm"
_ "github.com/coreos/clair/ext/featurefmt/apk"
_ "github.com/coreos/clair/ext/featurefmt/dpkg"
_ "github.com/coreos/clair/ext/featurefmt/rpm"
@ -55,6 +56,7 @@ import (
_ "github.com/coreos/clair/ext/notification/webhook"
_ "github.com/coreos/clair/ext/vulnmdsrc/nvd"
_ "github.com/coreos/clair/ext/vulnsrc/alpine"
_ "github.com/coreos/clair/ext/vulnsrc/arch"
_ "github.com/coreos/clair/ext/vulnsrc/debian"
_ "github.com/coreos/clair/ext/vulnsrc/oracle"
_ "github.com/coreos/clair/ext/vulnsrc/rhel"

@ -0,0 +1,91 @@
// Copyright 2017-2018 clair authors
//
// 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.
// Package alpm implements a featurefmt.Lister for ALPM packages.
package alpm
import (
"bufio"
"bytes"
log "github.com/sirupsen/logrus"
"github.com/coreos/clair/database"
"github.com/coreos/clair/ext/featurefmt"
"github.com/coreos/clair/ext/versionfmt"
"github.com/coreos/clair/ext/versionfmt/rpm"
"github.com/coreos/clair/pkg/tarutil"
"strings"
)
func init() {
featurefmt.RegisterLister("alpm", rpm.ParserName, &lister{})
}
type lister struct{}
func (l lister) ListFeatures(files tarutil.FilesMap) ([]database.Feature, error) {
pkgSet := make(map[string]database.Feature)
alpm := database.Feature{}
for name, file := range files {
if !strings.HasSuffix(name, "desc") {
continue
}
nameLabel := false
versionLabel := false
scanner := bufio.NewScanner(bytes.NewBuffer(file))
for scanner.Scan() {
line := scanner.Text()
switch {
case line == "%NAME%":
nameLabel = true
case nameLabel:
alpm.Name = line
nameLabel = false
case line == "%VERSION%":
versionLabel = true
case versionLabel:
err := versionfmt.Valid(rpm.ParserName, line)
if err != nil {
log.WithError(err).WithField("version", line).Warning("could not parse package version. skipping")
} else {
alpm.Version = line
}
versionLabel = false
}
if alpm.Name != "" && alpm.Version != "" {
pkgSet[alpm.Name+"#"+alpm.Version] = alpm
alpm = database.Feature{}
// No need to continue reading the file at this point
break
}
}
}
// Convert the map into a slice and attach the version format
pkgs := make([]database.Feature, 0, len(pkgSet))
for _, pkg := range pkgSet {
pkg.VersionFormat = rpm.ParserName
pkgs = append(pkgs, pkg)
}
return pkgs, nil
}
func (l lister) RequiredFilenames() []string {
return []string{"var/lib/pacman/local/"}
}

@ -0,0 +1,64 @@
// Copyright 2017-2018 clair authors
//
// 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.
package alpm
import (
"os"
"path/filepath"
"testing"
"github.com/coreos/clair/database"
"github.com/coreos/clair/ext/featurefmt"
"github.com/coreos/clair/ext/versionfmt/rpm"
"io/ioutil"
)
func TestALPMFeatureDetection(t *testing.T) {
testFeatures := []database.Feature{
{Name: "bash", Version: "4.4.019-1"},
{Name: "curl", Version: "7.59.0-2"},
{Name: "file", Version: "5.32-1"},
{Name: "libseccomp", Version: "2.3.2-2"},
{Name: "zlib", Version: "1:1.2.11-2"},
}
for i := range testFeatures {
testFeatures[i].VersionFormat = rpm.ParserName
}
files := make(map[string][]byte)
err := filepath.Walk("testdata", func(path string, f os.FileInfo, err error) error {
if f.Mode().IsRegular() || f.Mode()&os.ModeSymlink != 0 {
content, err := ioutil.ReadFile(path)
if err == nil {
files[path] = content
}
}
return nil
})
if err != nil {
t.Error("could not find any files")
return
}
testData := []featurefmt.TestData{
{
Features: testFeatures,
Files: files,
},
}
featurefmt.TestLister(t, &lister{}, testData)
}

@ -0,0 +1,50 @@
%NAME%
bash
%VERSION%
4.4.019-1
%DESC%
The GNU Bourne Again shell
%URL%
http://www.gnu.org/software/bash/bash.html
%ARCH%
x86_64
%BUILDDATE%
1517987724
%INSTALLDATE%
1522476282
%PACKAGER%
Bartlomiej Piotrowski <bpiotrowski@archlinux.org>
%SIZE%
7522304
%REASON%
1
%GROUPS%
base
%LICENSE%
GPL
%VALIDATION%
pgp
%DEPENDS%
readline>=7.0
glibc
ncurses
%OPTDEPENDS%
bash-completion: for tab completion
%PROVIDES%
sh

@ -0,0 +1,244 @@
%FILES%
etc/
etc/bash.bash_logout
etc/bash.bashrc
etc/skel/
etc/skel/.bash_logout
etc/skel/.bash_profile
etc/skel/.bashrc
usr/
usr/bin/
usr/bin/bash
usr/bin/bashbug
usr/bin/sh
usr/include/
usr/include/bash/
usr/include/bash/alias.h
usr/include/bash/array.h
usr/include/bash/arrayfunc.h
usr/include/bash/assoc.h
usr/include/bash/bashansi.h
usr/include/bash/bashintl.h
usr/include/bash/bashjmp.h
usr/include/bash/bashtypes.h
usr/include/bash/builtins.h
usr/include/bash/builtins/
usr/include/bash/builtins/bashgetopt.h
usr/include/bash/builtins/builtext.h
usr/include/bash/builtins/common.h
usr/include/bash/builtins/getopt.h
usr/include/bash/command.h
usr/include/bash/config-bot.h
usr/include/bash/config-top.h
usr/include/bash/config.h
usr/include/bash/conftypes.h
usr/include/bash/dispose_cmd.h
usr/include/bash/error.h
usr/include/bash/externs.h
usr/include/bash/general.h
usr/include/bash/hashlib.h
usr/include/bash/include/
usr/include/bash/include/ansi_stdlib.h
usr/include/bash/include/chartypes.h
usr/include/bash/include/filecntl.h
usr/include/bash/include/gettext.h
usr/include/bash/include/maxpath.h
usr/include/bash/include/memalloc.h
usr/include/bash/include/ocache.h
usr/include/bash/include/posixdir.h
usr/include/bash/include/posixjmp.h
usr/include/bash/include/posixstat.h
usr/include/bash/include/posixtime.h
usr/include/bash/include/posixwait.h
usr/include/bash/include/shmbchar.h
usr/include/bash/include/shmbutil.h
usr/include/bash/include/shtty.h
usr/include/bash/include/stat-time.h
usr/include/bash/include/stdc.h
usr/include/bash/include/systimes.h
usr/include/bash/include/typemax.h
usr/include/bash/include/unionwait.h
usr/include/bash/jobs.h
usr/include/bash/make_cmd.h
usr/include/bash/pathnames.h
usr/include/bash/quit.h
usr/include/bash/shell.h
usr/include/bash/sig.h
usr/include/bash/siglist.h
usr/include/bash/signames.h
usr/include/bash/subst.h
usr/include/bash/syntax.h
usr/include/bash/unwind_prot.h
usr/include/bash/variables.h
usr/include/bash/version.h
usr/include/bash/xmalloc.h
usr/include/bash/y.tab.h
usr/lib/
usr/lib/bash/
usr/lib/bash/Makefile.inc
usr/lib/bash/basename
usr/lib/bash/dirname
usr/lib/bash/finfo
usr/lib/bash/head
usr/lib/bash/id
usr/lib/bash/ln
usr/lib/bash/logname
usr/lib/bash/mkdir
usr/lib/bash/mypid
usr/lib/bash/pathchk
usr/lib/bash/print
usr/lib/bash/printenv
usr/lib/bash/push
usr/lib/bash/realpath
usr/lib/bash/rmdir
usr/lib/bash/setpgid
usr/lib/bash/sleep
usr/lib/bash/strftime
usr/lib/bash/sync
usr/lib/bash/tee
usr/lib/bash/truefalse
usr/lib/bash/tty
usr/lib/bash/uname
usr/lib/bash/unlink
usr/lib/bash/whoami
usr/lib/pkgconfig/
usr/lib/pkgconfig/bash.pc
usr/share/
usr/share/doc/
usr/share/doc/bash/
usr/share/doc/bash/CHANGES
usr/share/doc/bash/COMPAT
usr/share/doc/bash/FAQ
usr/share/doc/bash/INTRO
usr/share/doc/bash/NEWS
usr/share/doc/bash/POSIX
usr/share/doc/bash/RBASH
usr/share/doc/bash/README
usr/share/doc/bash/bash.html
usr/share/doc/bash/bashref.html
usr/share/info/
usr/share/info/bash.info.gz
usr/share/locale/
usr/share/locale/af/
usr/share/locale/af/LC_MESSAGES/
usr/share/locale/af/LC_MESSAGES/bash.mo
usr/share/locale/bg/
usr/share/locale/bg/LC_MESSAGES/
usr/share/locale/bg/LC_MESSAGES/bash.mo
usr/share/locale/ca/
usr/share/locale/ca/LC_MESSAGES/
usr/share/locale/ca/LC_MESSAGES/bash.mo
usr/share/locale/cs/
usr/share/locale/cs/LC_MESSAGES/
usr/share/locale/cs/LC_MESSAGES/bash.mo
usr/share/locale/da/
usr/share/locale/da/LC_MESSAGES/
usr/share/locale/da/LC_MESSAGES/bash.mo
usr/share/locale/de/
usr/share/locale/de/LC_MESSAGES/
usr/share/locale/de/LC_MESSAGES/bash.mo
usr/share/locale/el/
usr/share/locale/el/LC_MESSAGES/
usr/share/locale/el/LC_MESSAGES/bash.mo
usr/share/locale/en@boldquot/
usr/share/locale/en@boldquot/LC_MESSAGES/
usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo
usr/share/locale/en@quot/
usr/share/locale/en@quot/LC_MESSAGES/
usr/share/locale/en@quot/LC_MESSAGES/bash.mo
usr/share/locale/eo/
usr/share/locale/eo/LC_MESSAGES/
usr/share/locale/eo/LC_MESSAGES/bash.mo
usr/share/locale/es/
usr/share/locale/es/LC_MESSAGES/
usr/share/locale/es/LC_MESSAGES/bash.mo
usr/share/locale/et/
usr/share/locale/et/LC_MESSAGES/
usr/share/locale/et/LC_MESSAGES/bash.mo
usr/share/locale/fi/
usr/share/locale/fi/LC_MESSAGES/
usr/share/locale/fi/LC_MESSAGES/bash.mo
usr/share/locale/fr/
usr/share/locale/fr/LC_MESSAGES/
usr/share/locale/fr/LC_MESSAGES/bash.mo
usr/share/locale/ga/
usr/share/locale/ga/LC_MESSAGES/
usr/share/locale/ga/LC_MESSAGES/bash.mo
usr/share/locale/gl/
usr/share/locale/gl/LC_MESSAGES/
usr/share/locale/gl/LC_MESSAGES/bash.mo
usr/share/locale/hr/
usr/share/locale/hr/LC_MESSAGES/
usr/share/locale/hr/LC_MESSAGES/bash.mo
usr/share/locale/hu/
usr/share/locale/hu/LC_MESSAGES/
usr/share/locale/hu/LC_MESSAGES/bash.mo
usr/share/locale/id/
usr/share/locale/id/LC_MESSAGES/
usr/share/locale/id/LC_MESSAGES/bash.mo
usr/share/locale/it/
usr/share/locale/it/LC_MESSAGES/
usr/share/locale/it/LC_MESSAGES/bash.mo
usr/share/locale/ja/
usr/share/locale/ja/LC_MESSAGES/
usr/share/locale/ja/LC_MESSAGES/bash.mo
usr/share/locale/lt/
usr/share/locale/lt/LC_MESSAGES/
usr/share/locale/lt/LC_MESSAGES/bash.mo
usr/share/locale/nb/
usr/share/locale/nb/LC_MESSAGES/
usr/share/locale/nb/LC_MESSAGES/bash.mo
usr/share/locale/nl/
usr/share/locale/nl/LC_MESSAGES/
usr/share/locale/nl/LC_MESSAGES/bash.mo
usr/share/locale/pl/
usr/share/locale/pl/LC_MESSAGES/
usr/share/locale/pl/LC_MESSAGES/bash.mo
usr/share/locale/pt_BR/
usr/share/locale/pt_BR/LC_MESSAGES/
usr/share/locale/pt_BR/LC_MESSAGES/bash.mo
usr/share/locale/ro/
usr/share/locale/ro/LC_MESSAGES/
usr/share/locale/ro/LC_MESSAGES/bash.mo
usr/share/locale/ru/
usr/share/locale/ru/LC_MESSAGES/
usr/share/locale/ru/LC_MESSAGES/bash.mo
usr/share/locale/sk/
usr/share/locale/sk/LC_MESSAGES/
usr/share/locale/sk/LC_MESSAGES/bash.mo
usr/share/locale/sl/
usr/share/locale/sl/LC_MESSAGES/
usr/share/locale/sl/LC_MESSAGES/bash.mo
usr/share/locale/sr/
usr/share/locale/sr/LC_MESSAGES/
usr/share/locale/sr/LC_MESSAGES/bash.mo
usr/share/locale/sv/
usr/share/locale/sv/LC_MESSAGES/
usr/share/locale/sv/LC_MESSAGES/bash.mo
usr/share/locale/tr/
usr/share/locale/tr/LC_MESSAGES/
usr/share/locale/tr/LC_MESSAGES/bash.mo
usr/share/locale/uk/
usr/share/locale/uk/LC_MESSAGES/
usr/share/locale/uk/LC_MESSAGES/bash.mo
usr/share/locale/vi/
usr/share/locale/vi/LC_MESSAGES/
usr/share/locale/vi/LC_MESSAGES/bash.mo
usr/share/locale/zh_CN/
usr/share/locale/zh_CN/LC_MESSAGES/
usr/share/locale/zh_CN/LC_MESSAGES/bash.mo
usr/share/locale/zh_TW/
usr/share/locale/zh_TW/LC_MESSAGES/
usr/share/locale/zh_TW/LC_MESSAGES/bash.mo
usr/share/man/
usr/share/man/man1/
usr/share/man/man1/bash.1.gz
usr/share/man/man1/bashbug.1.gz
%BACKUP%
etc/bash.bashrc d8f3f334e72c0e30032eae1a1229aef1
etc/bash.bash_logout 472f536d7c9e8250dc4568ec4cfaf294
etc/skel/.bashrc 027d6bd8f5f6a06b75bb7698cb478089
etc/skel/.bash_profile 2902e0fee7a9168f3a4fd2ccd60ff047
etc/skel/.bash_logout 42f4400ed2314bd7519c020d0187edc5

@ -0,0 +1,48 @@
%NAME%
curl
%VERSION%
7.59.0-2
%DESC%
An URL retrieval utility and library
%URL%
https://curl.haxx.se
%ARCH%
x86_64
%BUILDDATE%
1521028875
%INSTALLDATE%
1522476287
%PACKAGER%
Levente Polyak <anthraxx@archlinux.org>
%SIZE%
1600512
%REASON%
1
%LICENSE%
MIT
%VALIDATION%
pgp
%DEPENDS%
ca-certificates
krb5
libssh2
openssl
zlib
libpsl
libnghttp2
%PROVIDES%
libcurl.so=4-64

@ -0,0 +1,434 @@
%FILES%
usr/
usr/bin/
usr/bin/curl
usr/bin/curl-config
usr/include/
usr/include/curl/
usr/include/curl/curl.h
usr/include/curl/curlver.h
usr/include/curl/easy.h
usr/include/curl/mprintf.h
usr/include/curl/multi.h
usr/include/curl/stdcheaders.h
usr/include/curl/system.h
usr/include/curl/typecheck-gcc.h
usr/lib/
usr/lib/libcurl.so
usr/lib/libcurl.so.4
usr/lib/libcurl.so.4.5.0
usr/lib/pkgconfig/
usr/lib/pkgconfig/libcurl.pc
usr/share/
usr/share/aclocal/
usr/share/aclocal/libcurl.m4
usr/share/licenses/
usr/share/licenses/curl/
usr/share/licenses/curl/COPYING
usr/share/man/
usr/share/man/man1/
usr/share/man/man1/curl-config.1.gz
usr/share/man/man1/curl.1.gz
usr/share/man/man3/
usr/share/man/man3/CURLINFO_ACTIVESOCKET.3.gz
usr/share/man/man3/CURLINFO_APPCONNECT_TIME.3.gz
usr/share/man/man3/CURLINFO_CERTINFO.3.gz
usr/share/man/man3/CURLINFO_CONDITION_UNMET.3.gz
usr/share/man/man3/CURLINFO_CONNECT_TIME.3.gz
usr/share/man/man3/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3.gz
usr/share/man/man3/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3.gz
usr/share/man/man3/CURLINFO_CONTENT_LENGTH_UPLOAD.3.gz
usr/share/man/man3/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3.gz
usr/share/man/man3/CURLINFO_CONTENT_TYPE.3.gz
usr/share/man/man3/CURLINFO_COOKIELIST.3.gz
usr/share/man/man3/CURLINFO_EFFECTIVE_URL.3.gz
usr/share/man/man3/CURLINFO_FILETIME.3.gz
usr/share/man/man3/CURLINFO_FILETIME_T.3.gz
usr/share/man/man3/CURLINFO_FTP_ENTRY_PATH.3.gz
usr/share/man/man3/CURLINFO_HEADER_SIZE.3.gz
usr/share/man/man3/CURLINFO_HTTPAUTH_AVAIL.3.gz
usr/share/man/man3/CURLINFO_HTTP_CONNECTCODE.3.gz
usr/share/man/man3/CURLINFO_HTTP_VERSION.3.gz
usr/share/man/man3/CURLINFO_LASTSOCKET.3.gz
usr/share/man/man3/CURLINFO_LOCAL_IP.3.gz
usr/share/man/man3/CURLINFO_LOCAL_PORT.3.gz
usr/share/man/man3/CURLINFO_NAMELOOKUP_TIME.3.gz
usr/share/man/man3/CURLINFO_NUM_CONNECTS.3.gz
usr/share/man/man3/CURLINFO_OS_ERRNO.3.gz
usr/share/man/man3/CURLINFO_PRETRANSFER_TIME.3.gz
usr/share/man/man3/CURLINFO_PRIMARY_IP.3.gz
usr/share/man/man3/CURLINFO_PRIMARY_PORT.3.gz
usr/share/man/man3/CURLINFO_PRIVATE.3.gz
usr/share/man/man3/CURLINFO_PROTOCOL.3.gz
usr/share/man/man3/CURLINFO_PROXYAUTH_AVAIL.3.gz
usr/share/man/man3/CURLINFO_PROXY_SSL_VERIFYRESULT.3.gz
usr/share/man/man3/CURLINFO_REDIRECT_COUNT.3.gz
usr/share/man/man3/CURLINFO_REDIRECT_TIME.3.gz
usr/share/man/man3/CURLINFO_REDIRECT_URL.3.gz
usr/share/man/man3/CURLINFO_REQUEST_SIZE.3.gz
usr/share/man/man3/CURLINFO_RESPONSE_CODE.3.gz
usr/share/man/man3/CURLINFO_RTSP_CLIENT_CSEQ.3.gz
usr/share/man/man3/CURLINFO_RTSP_CSEQ_RECV.3.gz
usr/share/man/man3/CURLINFO_RTSP_SERVER_CSEQ.3.gz
usr/share/man/man3/CURLINFO_RTSP_SESSION_ID.3.gz
usr/share/man/man3/CURLINFO_SCHEME.3.gz
usr/share/man/man3/CURLINFO_SIZE_DOWNLOAD.3.gz
usr/share/man/man3/CURLINFO_SIZE_DOWNLOAD_T.3.gz
usr/share/man/man3/CURLINFO_SIZE_UPLOAD.3.gz
usr/share/man/man3/CURLINFO_SIZE_UPLOAD_T.3.gz
usr/share/man/man3/CURLINFO_SPEED_DOWNLOAD.3.gz
usr/share/man/man3/CURLINFO_SPEED_DOWNLOAD_T.3.gz
usr/share/man/man3/CURLINFO_SPEED_UPLOAD.3.gz
usr/share/man/man3/CURLINFO_SPEED_UPLOAD_T.3.gz
usr/share/man/man3/CURLINFO_SSL_ENGINES.3.gz
usr/share/man/man3/CURLINFO_SSL_VERIFYRESULT.3.gz
usr/share/man/man3/CURLINFO_STARTTRANSFER_TIME.3.gz
usr/share/man/man3/CURLINFO_TLS_SESSION.3.gz
usr/share/man/man3/CURLINFO_TLS_SSL_PTR.3.gz
usr/share/man/man3/CURLINFO_TOTAL_TIME.3.gz
usr/share/man/man3/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3.gz
usr/share/man/man3/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3.gz
usr/share/man/man3/CURLMOPT_MAXCONNECTS.3.gz
usr/share/man/man3/CURLMOPT_MAX_HOST_CONNECTIONS.3.gz
usr/share/man/man3/CURLMOPT_MAX_PIPELINE_LENGTH.3.gz
usr/share/man/man3/CURLMOPT_MAX_TOTAL_CONNECTIONS.3.gz
usr/share/man/man3/CURLMOPT_PIPELINING.3.gz
usr/share/man/man3/CURLMOPT_PIPELINING_SERVER_BL.3.gz
usr/share/man/man3/CURLMOPT_PIPELINING_SITE_BL.3.gz
usr/share/man/man3/CURLMOPT_PUSHDATA.3.gz
usr/share/man/man3/CURLMOPT_PUSHFUNCTION.3.gz
usr/share/man/man3/CURLMOPT_SOCKETDATA.3.gz
usr/share/man/man3/CURLMOPT_SOCKETFUNCTION.3.gz
usr/share/man/man3/CURLMOPT_TIMERDATA.3.gz
usr/share/man/man3/CURLMOPT_TIMERFUNCTION.3.gz
usr/share/man/man3/CURLOPT_ABSTRACT_UNIX_SOCKET.3.gz
usr/share/man/man3/CURLOPT_ACCEPTTIMEOUT_MS.3.gz
usr/share/man/man3/CURLOPT_ACCEPT_ENCODING.3.gz
usr/share/man/man3/CURLOPT_ADDRESS_SCOPE.3.gz
usr/share/man/man3/CURLOPT_APPEND.3.gz
usr/share/man/man3/CURLOPT_AUTOREFERER.3.gz
usr/share/man/man3/CURLOPT_BUFFERSIZE.3.gz
usr/share/man/man3/CURLOPT_CAINFO.3.gz
usr/share/man/man3/CURLOPT_CAPATH.3.gz
usr/share/man/man3/CURLOPT_CERTINFO.3.gz
usr/share/man/man3/CURLOPT_CHUNK_BGN_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_CHUNK_DATA.3.gz
usr/share/man/man3/CURLOPT_CHUNK_END_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_CLOSESOCKETDATA.3.gz
usr/share/man/man3/CURLOPT_CLOSESOCKETFUNCTION.3.gz
usr/share/man/man3/CURLOPT_CONNECTTIMEOUT.3.gz
usr/share/man/man3/CURLOPT_CONNECTTIMEOUT_MS.3.gz
usr/share/man/man3/CURLOPT_CONNECT_ONLY.3.gz
usr/share/man/man3/CURLOPT_CONNECT_TO.3.gz
usr/share/man/man3/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_CONV_FROM_UTF8_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_CONV_TO_NETWORK_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_COOKIE.3.gz
usr/share/man/man3/CURLOPT_COOKIEFILE.3.gz
usr/share/man/man3/CURLOPT_COOKIEJAR.3.gz
usr/share/man/man3/CURLOPT_COOKIELIST.3.gz
usr/share/man/man3/CURLOPT_COOKIESESSION.3.gz
usr/share/man/man3/CURLOPT_COPYPOSTFIELDS.3.gz
usr/share/man/man3/CURLOPT_CRLF.3.gz
usr/share/man/man3/CURLOPT_CRLFILE.3.gz
usr/share/man/man3/CURLOPT_CUSTOMREQUEST.3.gz
usr/share/man/man3/CURLOPT_DEBUGDATA.3.gz
usr/share/man/man3/CURLOPT_DEBUGFUNCTION.3.gz
usr/share/man/man3/CURLOPT_DEFAULT_PROTOCOL.3.gz
usr/share/man/man3/CURLOPT_DIRLISTONLY.3.gz
usr/share/man/man3/CURLOPT_DNS_CACHE_TIMEOUT.3.gz
usr/share/man/man3/CURLOPT_DNS_INTERFACE.3.gz
usr/share/man/man3/CURLOPT_DNS_LOCAL_IP4.3.gz
usr/share/man/man3/CURLOPT_DNS_LOCAL_IP6.3.gz
usr/share/man/man3/CURLOPT_DNS_SERVERS.3.gz
usr/share/man/man3/CURLOPT_DNS_USE_GLOBAL_CACHE.3.gz
usr/share/man/man3/CURLOPT_EGDSOCKET.3.gz
usr/share/man/man3/CURLOPT_ERRORBUFFER.3.gz
usr/share/man/man3/CURLOPT_EXPECT_100_TIMEOUT_MS.3.gz
usr/share/man/man3/CURLOPT_FAILONERROR.3.gz
usr/share/man/man3/CURLOPT_FILETIME.3.gz
usr/share/man/man3/CURLOPT_FNMATCH_DATA.3.gz
usr/share/man/man3/CURLOPT_FNMATCH_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_FOLLOWLOCATION.3.gz
usr/share/man/man3/CURLOPT_FORBID_REUSE.3.gz
usr/share/man/man3/CURLOPT_FRESH_CONNECT.3.gz
usr/share/man/man3/CURLOPT_FTPPORT.3.gz
usr/share/man/man3/CURLOPT_FTPSSLAUTH.3.gz
usr/share/man/man3/CURLOPT_FTP_ACCOUNT.3.gz
usr/share/man/man3/CURLOPT_FTP_ALTERNATIVE_TO_USER.3.gz
usr/share/man/man3/CURLOPT_FTP_CREATE_MISSING_DIRS.3.gz
usr/share/man/man3/CURLOPT_FTP_FILEMETHOD.3.gz
usr/share/man/man3/CURLOPT_FTP_RESPONSE_TIMEOUT.3.gz
usr/share/man/man3/CURLOPT_FTP_SKIP_PASV_IP.3.gz
usr/share/man/man3/CURLOPT_FTP_SSL_CCC.3.gz
usr/share/man/man3/CURLOPT_FTP_USE_EPRT.3.gz
usr/share/man/man3/CURLOPT_FTP_USE_EPSV.3.gz
usr/share/man/man3/CURLOPT_FTP_USE_PRET.3.gz
usr/share/man/man3/CURLOPT_GSSAPI_DELEGATION.3.gz
usr/share/man/man3/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3.gz
usr/share/man/man3/CURLOPT_HEADER.3.gz
usr/share/man/man3/CURLOPT_HEADERDATA.3.gz
usr/share/man/man3/CURLOPT_HEADERFUNCTION.3.gz
usr/share/man/man3/CURLOPT_HEADEROPT.3.gz
usr/share/man/man3/CURLOPT_HTTP200ALIASES.3.gz
usr/share/man/man3/CURLOPT_HTTPAUTH.3.gz
usr/share/man/man3/CURLOPT_HTTPGET.3.gz
usr/share/man/man3/CURLOPT_HTTPHEADER.3.gz
usr/share/man/man3/CURLOPT_HTTPPOST.3.gz
usr/share/man/man3/CURLOPT_HTTPPROXYTUNNEL.3.gz
usr/share/man/man3/CURLOPT_HTTP_CONTENT_DECODING.3.gz
usr/share/man/man3/CURLOPT_HTTP_TRANSFER_DECODING.3.gz
usr/share/man/man3/CURLOPT_HTTP_VERSION.3.gz
usr/share/man/man3/CURLOPT_IGNORE_CONTENT_LENGTH.3.gz
usr/share/man/man3/CURLOPT_INFILESIZE.3.gz
usr/share/man/man3/CURLOPT_INFILESIZE_LARGE.3.gz
usr/share/man/man3/CURLOPT_INTERFACE.3.gz
usr/share/man/man3/CURLOPT_INTERLEAVEDATA.3.gz
usr/share/man/man3/CURLOPT_INTERLEAVEFUNCTION.3.gz
usr/share/man/man3/CURLOPT_IOCTLDATA.3.gz
usr/share/man/man3/CURLOPT_IOCTLFUNCTION.3.gz
usr/share/man/man3/CURLOPT_IPRESOLVE.3.gz
usr/share/man/man3/CURLOPT_ISSUERCERT.3.gz
usr/share/man/man3/CURLOPT_KEEP_SENDING_ON_ERROR.3.gz
usr/share/man/man3/CURLOPT_KEYPASSWD.3.gz
usr/share/man/man3/CURLOPT_KRBLEVEL.3.gz
usr/share/man/man3/CURLOPT_LOCALPORT.3.gz
usr/share/man/man3/CURLOPT_LOCALPORTRANGE.3.gz
usr/share/man/man3/CURLOPT_LOGIN_OPTIONS.3.gz
usr/share/man/man3/CURLOPT_LOW_SPEED_LIMIT.3.gz
usr/share/man/man3/CURLOPT_LOW_SPEED_TIME.3.gz
usr/share/man/man3/CURLOPT_MAIL_AUTH.3.gz
usr/share/man/man3/CURLOPT_MAIL_FROM.3.gz
usr/share/man/man3/CURLOPT_MAIL_RCPT.3.gz
usr/share/man/man3/CURLOPT_MAXCONNECTS.3.gz
usr/share/man/man3/CURLOPT_MAXFILESIZE.3.gz
usr/share/man/man3/CURLOPT_MAXFILESIZE_LARGE.3.gz
usr/share/man/man3/CURLOPT_MAXREDIRS.3.gz
usr/share/man/man3/CURLOPT_MAX_RECV_SPEED_LARGE.3.gz
usr/share/man/man3/CURLOPT_MAX_SEND_SPEED_LARGE.3.gz
usr/share/man/man3/CURLOPT_MIMEPOST.3.gz
usr/share/man/man3/CURLOPT_NETRC.3.gz
usr/share/man/man3/CURLOPT_NETRC_FILE.3.gz
usr/share/man/man3/CURLOPT_NEW_DIRECTORY_PERMS.3.gz
usr/share/man/man3/CURLOPT_NEW_FILE_PERMS.3.gz
usr/share/man/man3/CURLOPT_NOBODY.3.gz
usr/share/man/man3/CURLOPT_NOPROGRESS.3.gz
usr/share/man/man3/CURLOPT_NOPROXY.3.gz
usr/share/man/man3/CURLOPT_NOSIGNAL.3.gz
usr/share/man/man3/CURLOPT_OPENSOCKETDATA.3.gz
usr/share/man/man3/CURLOPT_OPENSOCKETFUNCTION.3.gz
usr/share/man/man3/CURLOPT_PASSWORD.3.gz
usr/share/man/man3/CURLOPT_PATH_AS_IS.3.gz
usr/share/man/man3/CURLOPT_PINNEDPUBLICKEY.3.gz
usr/share/man/man3/CURLOPT_PIPEWAIT.3.gz
usr/share/man/man3/CURLOPT_PORT.3.gz
usr/share/man/man3/CURLOPT_POST.3.gz
usr/share/man/man3/CURLOPT_POSTFIELDS.3.gz
usr/share/man/man3/CURLOPT_POSTFIELDSIZE.3.gz
usr/share/man/man3/CURLOPT_POSTFIELDSIZE_LARGE.3.gz
usr/share/man/man3/CURLOPT_POSTQUOTE.3.gz
usr/share/man/man3/CURLOPT_POSTREDIR.3.gz
usr/share/man/man3/CURLOPT_PREQUOTE.3.gz
usr/share/man/man3/CURLOPT_PRE_PROXY.3.gz
usr/share/man/man3/CURLOPT_PRIVATE.3.gz
usr/share/man/man3/CURLOPT_PROGRESSDATA.3.gz
usr/share/man/man3/CURLOPT_PROGRESSFUNCTION.3.gz
usr/share/man/man3/CURLOPT_PROTOCOLS.3.gz
usr/share/man/man3/CURLOPT_PROXY.3.gz
usr/share/man/man3/CURLOPT_PROXYAUTH.3.gz
usr/share/man/man3/CURLOPT_PROXYHEADER.3.gz
usr/share/man/man3/CURLOPT_PROXYPASSWORD.3.gz
usr/share/man/man3/CURLOPT_PROXYPORT.3.gz
usr/share/man/man3/CURLOPT_PROXYTYPE.3.gz
usr/share/man/man3/CURLOPT_PROXYUSERNAME.3.gz
usr/share/man/man3/CURLOPT_PROXYUSERPWD.3.gz
usr/share/man/man3/CURLOPT_PROXY_CAINFO.3.gz
usr/share/man/man3/CURLOPT_PROXY_CAPATH.3.gz
usr/share/man/man3/CURLOPT_PROXY_CRLFILE.3.gz
usr/share/man/man3/CURLOPT_PROXY_KEYPASSWD.3.gz
usr/share/man/man3/CURLOPT_PROXY_PINNEDPUBLICKEY.3.gz
usr/share/man/man3/CURLOPT_PROXY_SERVICE_NAME.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSLCERT.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSLCERTTYPE.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSLKEY.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSLKEYTYPE.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSLVERSION.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSL_CIPHER_LIST.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSL_OPTIONS.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSL_VERIFYHOST.3.gz
usr/share/man/man3/CURLOPT_PROXY_SSL_VERIFYPEER.3.gz
usr/share/man/man3/CURLOPT_PROXY_TLSAUTH_PASSWORD.3.gz
usr/share/man/man3/CURLOPT_PROXY_TLSAUTH_TYPE.3.gz
usr/share/man/man3/CURLOPT_PROXY_TLSAUTH_USERNAME.3.gz
usr/share/man/man3/CURLOPT_PROXY_TRANSFER_MODE.3.gz
usr/share/man/man3/CURLOPT_PUT.3.gz
usr/share/man/man3/CURLOPT_QUOTE.3.gz
usr/share/man/man3/CURLOPT_RANDOM_FILE.3.gz
usr/share/man/man3/CURLOPT_RANGE.3.gz
usr/share/man/man3/CURLOPT_READDATA.3.gz
usr/share/man/man3/CURLOPT_READFUNCTION.3.gz
usr/share/man/man3/CURLOPT_REDIR_PROTOCOLS.3.gz
usr/share/man/man3/CURLOPT_REFERER.3.gz
usr/share/man/man3/CURLOPT_REQUEST_TARGET.3.gz
usr/share/man/man3/CURLOPT_RESOLVE.3.gz
usr/share/man/man3/CURLOPT_RESOLVER_START_DATA.3.gz
usr/share/man/man3/CURLOPT_RESOLVER_START_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_RESUME_FROM.3.gz
usr/share/man/man3/CURLOPT_RESUME_FROM_LARGE.3.gz
usr/share/man/man3/CURLOPT_RTSP_CLIENT_CSEQ.3.gz
usr/share/man/man3/CURLOPT_RTSP_REQUEST.3.gz
usr/share/man/man3/CURLOPT_RTSP_SERVER_CSEQ.3.gz
usr/share/man/man3/CURLOPT_RTSP_SESSION_ID.3.gz
usr/share/man/man3/CURLOPT_RTSP_STREAM_URI.3.gz
usr/share/man/man3/CURLOPT_RTSP_TRANSPORT.3.gz
usr/share/man/man3/CURLOPT_SASL_IR.3.gz
usr/share/man/man3/CURLOPT_SEEKDATA.3.gz
usr/share/man/man3/CURLOPT_SEEKFUNCTION.3.gz
usr/share/man/man3/CURLOPT_SERVICE_NAME.3.gz
usr/share/man/man3/CURLOPT_SHARE.3.gz
usr/share/man/man3/CURLOPT_SOCKOPTDATA.3.gz
usr/share/man/man3/CURLOPT_SOCKOPTFUNCTION.3.gz
usr/share/man/man3/CURLOPT_SOCKS5_AUTH.3.gz
usr/share/man/man3/CURLOPT_SOCKS5_GSSAPI_NEC.3.gz
usr/share/man/man3/CURLOPT_SOCKS5_GSSAPI_SERVICE.3.gz
usr/share/man/man3/CURLOPT_SSH_AUTH_TYPES.3.gz
usr/share/man/man3/CURLOPT_SSH_COMPRESSION.3.gz
usr/share/man/man3/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3.gz
usr/share/man/man3/CURLOPT_SSH_KEYDATA.3.gz
usr/share/man/man3/CURLOPT_SSH_KEYFUNCTION.3.gz
usr/share/man/man3/CURLOPT_SSH_KNOWNHOSTS.3.gz
usr/share/man/man3/CURLOPT_SSH_PRIVATE_KEYFILE.3.gz
usr/share/man/man3/CURLOPT_SSH_PUBLIC_KEYFILE.3.gz
usr/share/man/man3/CURLOPT_SSLCERT.3.gz
usr/share/man/man3/CURLOPT_SSLCERTTYPE.3.gz
usr/share/man/man3/CURLOPT_SSLENGINE.3.gz
usr/share/man/man3/CURLOPT_SSLENGINE_DEFAULT.3.gz
usr/share/man/man3/CURLOPT_SSLKEY.3.gz
usr/share/man/man3/CURLOPT_SSLKEYTYPE.3.gz
usr/share/man/man3/CURLOPT_SSLVERSION.3.gz
usr/share/man/man3/CURLOPT_SSL_CIPHER_LIST.3.gz
usr/share/man/man3/CURLOPT_SSL_CTX_DATA.3.gz
usr/share/man/man3/CURLOPT_SSL_CTX_FUNCTION.3.gz
usr/share/man/man3/CURLOPT_SSL_ENABLE_ALPN.3.gz
usr/share/man/man3/CURLOPT_SSL_ENABLE_NPN.3.gz
usr/share/man/man3/CURLOPT_SSL_FALSESTART.3.gz
usr/share/man/man3/CURLOPT_SSL_OPTIONS.3.gz
usr/share/man/man3/CURLOPT_SSL_SESSIONID_CACHE.3.gz
usr/share/man/man3/CURLOPT_SSL_VERIFYHOST.3.gz
usr/share/man/man3/CURLOPT_SSL_VERIFYPEER.3.gz
usr/share/man/man3/CURLOPT_SSL_VERIFYSTATUS.3.gz
usr/share/man/man3/CURLOPT_STDERR.3.gz
usr/share/man/man3/CURLOPT_STREAM_DEPENDS.3.gz
usr/share/man/man3/CURLOPT_STREAM_DEPENDS_E.3.gz
usr/share/man/man3/CURLOPT_STREAM_WEIGHT.3.gz
usr/share/man/man3/CURLOPT_SUPPRESS_CONNECT_HEADERS.3.gz
usr/share/man/man3/CURLOPT_TCP_FASTOPEN.3.gz
usr/share/man/man3/CURLOPT_TCP_KEEPALIVE.3.gz
usr/share/man/man3/CURLOPT_TCP_KEEPIDLE.3.gz
usr/share/man/man3/CURLOPT_TCP_KEEPINTVL.3.gz
usr/share/man/man3/CURLOPT_TCP_NODELAY.3.gz
usr/share/man/man3/CURLOPT_TELNETOPTIONS.3.gz
usr/share/man/man3/CURLOPT_TFTP_BLKSIZE.3.gz
usr/share/man/man3/CURLOPT_TFTP_NO_OPTIONS.3.gz
usr/share/man/man3/CURLOPT_TIMECONDITION.3.gz
usr/share/man/man3/CURLOPT_TIMEOUT.3.gz
usr/share/man/man3/CURLOPT_TIMEOUT_MS.3.gz
usr/share/man/man3/CURLOPT_TIMEVALUE.3.gz
usr/share/man/man3/CURLOPT_TIMEVALUE_LARGE.3.gz
usr/share/man/man3/CURLOPT_TLSAUTH_PASSWORD.3.gz
usr/share/man/man3/CURLOPT_TLSAUTH_TYPE.3.gz
usr/share/man/man3/CURLOPT_TLSAUTH_USERNAME.3.gz
usr/share/man/man3/CURLOPT_TRANSFERTEXT.3.gz
usr/share/man/man3/CURLOPT_TRANSFER_ENCODING.3.gz
usr/share/man/man3/CURLOPT_UNIX_SOCKET_PATH.3.gz
usr/share/man/man3/CURLOPT_UNRESTRICTED_AUTH.3.gz
usr/share/man/man3/CURLOPT_UPLOAD.3.gz
usr/share/man/man3/CURLOPT_URL.3.gz
usr/share/man/man3/CURLOPT_USERAGENT.3.gz
usr/share/man/man3/CURLOPT_USERNAME.3.gz
usr/share/man/man3/CURLOPT_USERPWD.3.gz
usr/share/man/man3/CURLOPT_USE_SSL.3.gz
usr/share/man/man3/CURLOPT_VERBOSE.3.gz
usr/share/man/man3/CURLOPT_WILDCARDMATCH.3.gz
usr/share/man/man3/CURLOPT_WRITEDATA.3.gz
usr/share/man/man3/CURLOPT_WRITEFUNCTION.3.gz
usr/share/man/man3/CURLOPT_XFERINFODATA.3.gz
usr/share/man/man3/CURLOPT_XFERINFOFUNCTION.3.gz
usr/share/man/man3/CURLOPT_XOAUTH2_BEARER.3.gz
usr/share/man/man3/curl_easy_cleanup.3.gz
usr/share/man/man3/curl_easy_duphandle.3.gz
usr/share/man/man3/curl_easy_escape.3.gz
usr/share/man/man3/curl_easy_getinfo.3.gz
usr/share/man/man3/curl_easy_init.3.gz
usr/share/man/man3/curl_easy_pause.3.gz
usr/share/man/man3/curl_easy_perform.3.gz
usr/share/man/man3/curl_easy_recv.3.gz
usr/share/man/man3/curl_easy_reset.3.gz
usr/share/man/man3/curl_easy_send.3.gz
usr/share/man/man3/curl_easy_setopt.3.gz
usr/share/man/man3/curl_easy_strerror.3.gz
usr/share/man/man3/curl_easy_unescape.3.gz
usr/share/man/man3/curl_escape.3.gz
usr/share/man/man3/curl_formadd.3.gz
usr/share/man/man3/curl_formfree.3.gz
usr/share/man/man3/curl_formget.3.gz
usr/share/man/man3/curl_free.3.gz
usr/share/man/man3/curl_getdate.3.gz
usr/share/man/man3/curl_getenv.3.gz
usr/share/man/man3/curl_global_cleanup.3.gz
usr/share/man/man3/curl_global_init.3.gz
usr/share/man/man3/curl_global_init_mem.3.gz
usr/share/man/man3/curl_global_sslset.3.gz
usr/share/man/man3/curl_mime_addpart.3.gz
usr/share/man/man3/curl_mime_data.3.gz
usr/share/man/man3/curl_mime_data_cb.3.gz
usr/share/man/man3/curl_mime_encoder.3.gz
usr/share/man/man3/curl_mime_filedata.3.gz
usr/share/man/man3/curl_mime_filename.3.gz
usr/share/man/man3/curl_mime_free.3.gz
usr/share/man/man3/curl_mime_headers.3.gz
usr/share/man/man3/curl_mime_init.3.gz
usr/share/man/man3/curl_mime_name.3.gz
usr/share/man/man3/curl_mime_subparts.3.gz
usr/share/man/man3/curl_mime_type.3.gz
usr/share/man/man3/curl_mprintf.3.gz
usr/share/man/man3/curl_multi_add_handle.3.gz
usr/share/man/man3/curl_multi_assign.3.gz
usr/share/man/man3/curl_multi_cleanup.3.gz
usr/share/man/man3/curl_multi_fdset.3.gz
usr/share/man/man3/curl_multi_info_read.3.gz
usr/share/man/man3/curl_multi_init.3.gz
usr/share/man/man3/curl_multi_perform.3.gz
usr/share/man/man3/curl_multi_remove_handle.3.gz
usr/share/man/man3/curl_multi_setopt.3.gz
usr/share/man/man3/curl_multi_socket.3.gz
usr/share/man/man3/curl_multi_socket_action.3.gz
usr/share/man/man3/curl_multi_socket_all.3.gz
usr/share/man/man3/curl_multi_strerror.3.gz
usr/share/man/man3/curl_multi_timeout.3.gz
usr/share/man/man3/curl_multi_wait.3.gz
usr/share/man/man3/curl_share_cleanup.3.gz
usr/share/man/man3/curl_share_init.3.gz
usr/share/man/man3/curl_share_setopt.3.gz
usr/share/man/man3/curl_share_strerror.3.gz
usr/share/man/man3/curl_slist_append.3.gz
usr/share/man/man3/curl_slist_free_all.3.gz
usr/share/man/man3/curl_strequal.3.gz
usr/share/man/man3/curl_strnequal.3.gz
usr/share/man/man3/curl_unescape.3.gz
usr/share/man/man3/curl_version.3.gz
usr/share/man/man3/curl_version_info.3.gz
usr/share/man/man3/libcurl-easy.3.gz
usr/share/man/man3/libcurl-env.3.gz
usr/share/man/man3/libcurl-errors.3.gz
usr/share/man/man3/libcurl-multi.3.gz
usr/share/man/man3/libcurl-security.3.gz
usr/share/man/man3/libcurl-share.3.gz
usr/share/man/man3/libcurl-symbols.3.gz
usr/share/man/man3/libcurl-thread.3.gz
usr/share/man/man3/libcurl-tutorial.3.gz
usr/share/man/man3/libcurl.3.gz
usr/share/zsh/
usr/share/zsh/site-functions/
usr/share/zsh/site-functions/_curl

@ -0,0 +1,41 @@
%NAME%
file
%VERSION%
5.32-1
%DESC%
File type identification utility
%URL%
https://www.darwinsys.com/file/
%ARCH%
x86_64
%BUILDDATE%
1504455797
%INSTALLDATE%
1517849175
%PACKAGER%
Sébastien Luttringer <seblu@seblu.net>
%SIZE%
5151744
%GROUPS%
base
base-devel
%LICENSE%
custom
%VALIDATION%
pgp
%DEPENDS%
glibc
zlib

@ -0,0 +1,26 @@
%FILES%
usr/
usr/bin/
usr/bin/file
usr/include/
usr/include/magic.h
usr/lib/
usr/lib/libmagic.so
usr/lib/libmagic.so.1
usr/lib/libmagic.so.1.0.0
usr/share/
usr/share/file/
usr/share/file/misc/
usr/share/file/misc/magic.mgc
usr/share/licenses/
usr/share/licenses/file/
usr/share/licenses/file/COPYING
usr/share/man/
usr/share/man/man1/
usr/share/man/man1/file.1.gz
usr/share/man/man3/
usr/share/man/man3/libmagic.3.gz
usr/share/man/man4/
usr/share/man/man5/
usr/share/man/man5/magic.5.gz

Binary file not shown.

@ -0,0 +1,39 @@
%NAME%
libseccomp
%VERSION%
2.3.2-2
%DESC%
Enhanced seccomp library
%URL%
https://github.com/seccomp/libseccomp
%ARCH%
x86_64
%BUILDDATE%
1515617166
%INSTALLDATE%
1522476286
%PACKAGER%
Christian Hesse <arch@eworm.de>
%SIZE%
589824
%REASON%
1
%LICENSE%
LGPL2.1
%VALIDATION%
pgp
%DEPENDS%
glibc

@ -0,0 +1,42 @@
%FILES%
usr/
usr/bin/
usr/bin/scmp_sys_resolver
usr/include/
usr/include/seccomp.h
usr/lib/
usr/lib/libseccomp.so
usr/lib/libseccomp.so.2
usr/lib/libseccomp.so.2.3.2
usr/lib/pkgconfig/
usr/lib/pkgconfig/libseccomp.pc
usr/share/
usr/share/man/
usr/share/man/man1/
usr/share/man/man1/scmp_sys_resolver.1.gz
usr/share/man/man3/
usr/share/man/man3/seccomp_arch_add.3.gz
usr/share/man/man3/seccomp_arch_exist.3.gz
usr/share/man/man3/seccomp_arch_native.3.gz
usr/share/man/man3/seccomp_arch_remove.3.gz
usr/share/man/man3/seccomp_arch_resolve_name.3.gz
usr/share/man/man3/seccomp_attr_get.3.gz
usr/share/man/man3/seccomp_attr_set.3.gz
usr/share/man/man3/seccomp_export_bpf.3.gz
usr/share/man/man3/seccomp_export_pfc.3.gz
usr/share/man/man3/seccomp_init.3.gz
usr/share/man/man3/seccomp_load.3.gz
usr/share/man/man3/seccomp_merge.3.gz
usr/share/man/man3/seccomp_release.3.gz
usr/share/man/man3/seccomp_reset.3.gz
usr/share/man/man3/seccomp_rule_add.3.gz
usr/share/man/man3/seccomp_rule_add_array.3.gz
usr/share/man/man3/seccomp_rule_add_exact.3.gz
usr/share/man/man3/seccomp_rule_add_exact_array.3.gz
usr/share/man/man3/seccomp_syscall_priority.3.gz
usr/share/man/man3/seccomp_syscall_resolve_name.3.gz
usr/share/man/man3/seccomp_syscall_resolve_name_arch.3.gz
usr/share/man/man3/seccomp_syscall_resolve_name_rewrite.3.gz
usr/share/man/man3/seccomp_syscall_resolve_num_arch.3.gz
usr/share/man/man3/seccomp_version.3.gz

@ -0,0 +1,42 @@
%NAME%
zlib
%VERSION%
1:1.2.11-2
%BASE%
zlib
%DESC%
Compression library implementing the deflate compression method found in gzip and PKZIP
%URL%
http://www.zlib.net/
%ARCH%
x86_64
%BUILDDATE%
1499892515
%INSTALLDATE%
1517507911
%PACKAGER%
Antonio Rojas <arojas@archlinux.org>
%SIZE%
333824
%REASON%
1
%LICENSE%
custom
%VALIDATION%
pgp
%DEPENDS%
glibc

@ -0,0 +1,20 @@
%FILES%
usr/
usr/include/
usr/include/zconf.h
usr/include/zlib.h
usr/lib/
usr/lib/libz.a
usr/lib/libz.so
usr/lib/libz.so.1
usr/lib/libz.so.1.2.11
usr/lib/pkgconfig/
usr/lib/pkgconfig/zlib.pc
usr/share/
usr/share/licenses/
usr/share/licenses/zlib/
usr/share/licenses/zlib/LICENSE
usr/share/man/
usr/share/man/man3/
usr/share/man/man3/zlib.3.gz

@ -84,15 +84,19 @@ func (d detector) Detect(files tarutil.FilesMap) (*database.Namespace, error) {
switch OS {
case "debian", "ubuntu":
versionFormat = dpkg.ParserName
case "centos", "rhel", "fedora", "amzn", "ol", "oracle":
case "arch", "centos", "rhel", "fedora", "amzn", "ol", "oracle":
versionFormat = rpm.ParserName
default:
return nil, nil
}
if OS != "" && version != "" {
if OS != "" {
name := OS
if version != "" {
name = name + ":" + version
}
return &database.Namespace{
Name: OS + ":" + version,
Name: name,
VersionFormat: versionFormat,
}, nil
}

@ -76,6 +76,24 @@ REDHAT_SUPPORT_PRODUCT_VERSION=20`),
ExpectedNamespace: nil,
Files: tarutil.FilesMap{},
},
{ // Arch Linux doesn't have a VERSION_ID
ExpectedNamespace: &database.Namespace{Name: "arch"},
Files: tarutil.FilesMap{
"etc/os-release": []byte(
`NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
ID_LIKE=archlinux
ANSI_COLOR="0;36"
HOME_URL="https://www.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"`),
},
},
{
ExpectedNamespace: nil,
Files: tarutil.FilesMap{},
},
}
featurens.TestDetector(t, &detector{}, testData)

@ -126,6 +126,8 @@ func (p parser) InRange(versionA, rangeB string) (bool, error) {
if err != nil {
return false, err
}
// FIXME: Fails when version and range are the same
//return cmp <= 0, nil
return cmp < 0, nil
}

@ -184,3 +184,27 @@ func TestParseAndCompare(t *testing.T) {
assert.Equal(t, -c.expected, cmp, "%s vs. %s, = %d, expected %d", c.v2, c.v1, cmp, -c.expected)
}
}
func TestInRange(t *testing.T) {
cases := []struct {
v1 string
expected bool
v2 string
}{
{"5.4.2-1", true, "5.4.2-1"},
{"2.7.6-1", true, "2.7.6-2"},
{"1.1.0-3", true, "1.1.1-1"},
{"20101121", true, "20101122"},
{"2", false, "xyz.4"},
{"10.0039", false, "10.0001"},
{"1.0~rc1", false, "1.0~rc1~git123"},
{"5.0", false, "4.999.9"},
}
var p parser
for _, c := range cases {
b, err := p.InRange(c.v1, c.v2)
assert.Nil(t, err)
assert.Equal(t, c.expected, b, "%s vs. %s, = %d, expected %d", c.v1, c.v2, b, c.expected)
}
}

@ -0,0 +1,202 @@
// Copyright 2017-2018 clair authors
//
// 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.
// Package arch implements a vulnerability source updater using the
// Arch Linux Security Tracker.
package arch
import (
"crypto/sha1"
"encoding/hex"
"encoding/json"
"io"
"net/http"
"strings"
log "github.com/sirupsen/logrus"
"github.com/coreos/clair/database"
"github.com/coreos/clair/ext/versionfmt/rpm"
"github.com/coreos/clair/ext/vulnsrc"
"github.com/coreos/clair/pkg/commonerr"
)
const (
url = "https://security.archlinux.org/all.json"
cveURLPrefix = "https://security.archlinux.org"
updaterFlag = "archUpdater"
)
type jsonData []jsonVuln
type jsonVuln struct {
Name string `json:"name"`
Packages []string `json:"packages"`
Status string `json:"status"`
Severity string `json:"severity"`
Type string `json:"type"`
Affected string `json:"affected"`
Fixed string `json:"fixed"`
Ticket string `json:"ticket"`
Issues []string `json:"issues"`
Advisories []string `json:"advisories"`
}
type updater struct{}
func init() {
vulnsrc.RegisterUpdater("arch", &updater{})
}
func (u *updater) Update(datastore database.Datastore) (resp vulnsrc.UpdateResponse, err error) {
log.WithField("package", "Arch Linux").Info("Start fetching vulnerabilities")
tx, err := datastore.Begin()
if err != nil {
return resp, err
}
// Get the SHA-1 of the latest update's JSON data
latestHash, ok, err := tx.FindKeyValue(updaterFlag)
if err != nil {
return resp, err
}
// NOTE(sida): The transaction won't mutate the database and I want the
// transaction to be short.
if err := tx.Rollback(); err != nil {
return resp, err
}
if !ok {
latestHash = ""
}
// Download JSON.
r, err := http.Get(url)
if err != nil {
log.WithError(err).Error("could not download Arch Linux update")
return resp, commonerr.ErrCouldNotDownload
}
// Parse the JSON.
resp, err = buildResponse(r.Body, latestHash)
if err != nil {
return resp, err
}
return resp, nil
}
func (u *updater) Clean() {}
func buildResponse(jsonReader io.Reader, latestKnownHash string) (resp vulnsrc.UpdateResponse, err error) {
hash := latestKnownHash
// Defer the addition of flag information to the response.
defer func() {
if err == nil {
resp.FlagName = updaterFlag
resp.FlagValue = hash
}
}()
// Create a TeeReader so that we can unmarshal into JSON and write to a SHA-1
// digest at the same time.
jsonSHA := sha1.New()
teedJSONReader := io.TeeReader(jsonReader, jsonSHA)
// Unmarshal JSON.
var data jsonData
err = json.NewDecoder(teedJSONReader).Decode(&data)
if err != nil {
log.WithError(err).Error("could not unmarshal Arch Linux JSON")
return resp, commonerr.ErrCouldNotParse
}
// Calculate the hash and skip updating if the hash has been seen before.
hash = hex.EncodeToString(jsonSHA.Sum(nil))
if latestKnownHash == hash {
log.WithField("package", "Arch Linux").Debug("no update")
return resp, nil
}
// Extract vulnerability data from Arch Linux JSON schema.
resp.Vulnerabilities = parseArchLinuxJSON(&data)
return resp, nil
}
func parseArchLinuxJSON(data *jsonData) (vulnerabilities []database.VulnerabilityWithAffected) {
mvulnerabilities := make(map[string]*database.VulnerabilityWithAffected)
for _, vulnNode := range *data {
for _, vulnName := range vulnNode.Issues {
// Get or create the vulnerability.
vulnerability, vulnerabilityAlreadyExists := mvulnerabilities[vulnName]
if !vulnerabilityAlreadyExists {
vulnerability = &database.VulnerabilityWithAffected{
Vulnerability: database.Vulnerability{
Name: vulnName,
Link: strings.Join([]string{cveURLPrefix, "/", vulnName}, ""),
Severity: database.UnknownSeverity,
Description: vulnNode.Type,
},
}
}
vulnerability.Severity = severity(vulnNode.Severity)
for _, pkgName := range vulnNode.Packages {
// Create and add the feature version.
pkg := database.AffectedFeature{
FeatureName: pkgName,
AffectedVersion: vulnNode.Affected,
FixedInVersion: vulnNode.Fixed,
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
}
vulnerability.Affected = append(vulnerability.Affected, pkg)
}
// Store the vulnerability.
mvulnerabilities[vulnName] = vulnerability
}
}
// Convert the vulnerabilities map to a slice
for _, v := range mvulnerabilities {
vulnerabilities = append(vulnerabilities, *v)
}
return
}
func severity(severity string) database.Severity {
switch severity {
case "Low":
return database.LowSeverity
case "Medium":
return database.MediumSeverity
case "High":
return database.HighSeverity
case "Critical":
return database.CriticalSeverity
default:
log.Warning("could not determine vulnerability severity from: %s.", severity)
return database.UnknownSeverity
}
}

@ -0,0 +1,148 @@
// Copyright 2017-2018 clair authors
//
// 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.
package arch
import (
"os"
"path/filepath"
"runtime"
"testing"
"github.com/coreos/clair/database"
"github.com/coreos/clair/ext/versionfmt/rpm"
"github.com/stretchr/testify/assert"
)
func TestArchLinuxParser(t *testing.T) {
_, filename, _, _ := runtime.Caller(0)
// Test parsing testdata/fetcher_arch_test.json
testFile, _ := os.Open(filepath.Join(filepath.Dir(filename)) + "/testdata/fetcher_arch_test.json")
response, err := buildResponse(testFile, "")
if assert.Nil(t, err) && assert.Len(t, response.Vulnerabilities, 4) {
for _, vulnerability := range response.Vulnerabilities {
if vulnerability.Name == "CVE-2018-1071" {
assert.Equal(t, "https://security.archlinux.org/CVE-2018-1071", vulnerability.Link)
assert.Equal(t, database.MediumSeverity, vulnerability.Severity)
assert.Equal(t, "denial of service", vulnerability.Description)
expectedFeatures := []database.AffectedFeature{
{
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
FeatureName: "zsh",
AffectedVersion: "5.4.2-1",
},
}
for _, expectedFeature := range expectedFeatures {
assert.Contains(t, vulnerability.Affected, expectedFeature)
}
} else if vulnerability.Name == "CVE-2018-5146" {
assert.Equal(t, "https://security.archlinux.org/CVE-2018-5146", vulnerability.Link)
assert.Equal(t, database.CriticalSeverity, vulnerability.Severity)
assert.Equal(t, "multiple issues", vulnerability.Description)
expectedFeatures := []database.AffectedFeature{
{
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
FeatureName: "libvorbis",
FixedInVersion: "1.3.6-1",
AffectedVersion: "1.3.5-1",
},
{
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
FeatureName: "lib32-libvorbis",
FixedInVersion: "1.3.6-1",
AffectedVersion: "1.3.5-1",
},
}
for _, expectedFeature := range expectedFeatures {
assert.Contains(t, vulnerability.Affected, expectedFeature)
}
} else if vulnerability.Name == "CVE-2017-14633" {
assert.Equal(t, "https://security.archlinux.org/CVE-2017-14633", vulnerability.Link)
assert.Equal(t, database.CriticalSeverity, vulnerability.Severity)
assert.Equal(t, "multiple issues", vulnerability.Description)
expectedFeatures := []database.AffectedFeature{
{
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
FeatureName: "libvorbis",
FixedInVersion: "1.3.6-1",
AffectedVersion: "1.3.5-1",
},
{
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
FeatureName: "lib32-libvorbis",
FixedInVersion: "1.3.6-1",
AffectedVersion: "1.3.5-1",
},
}
for _, expectedFeature := range expectedFeatures {
assert.Contains(t, vulnerability.Affected, expectedFeature)
}
} else if vulnerability.Name == "CVE-2017-14632" {
assert.Equal(t, "https://security.archlinux.org/CVE-2017-14632", vulnerability.Link)
assert.Equal(t, database.CriticalSeverity, vulnerability.Severity)
assert.Equal(t, "multiple issues", vulnerability.Description)
expectedFeatures := []database.AffectedFeature{
{
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
FeatureName: "libvorbis",
FixedInVersion: "1.3.6-1",
AffectedVersion: "1.3.5-1",
},
{
Namespace: database.Namespace{
Name: "arch",
VersionFormat: rpm.ParserName,
},
FeatureName: "lib32-libvorbis",
FixedInVersion: "1.3.6-1",
AffectedVersion: "1.3.5-1",
},
}
for _, expectedFeature := range expectedFeatures {
assert.Contains(t, vulnerability.Affected, expectedFeature)
}
} else {
assert.Fail(t, "Wrong vulnerability name: ", vulnerability.Namespace.Name+":"+vulnerability.Name)
}
}
}
}

@ -0,0 +1,58 @@
[
{
"name": "AVG-652",
"packages": [
"zsh"
],
"status": "Unknown",
"severity": "Medium",
"type": "denial of service",
"affected": "5.4.2-1",
"fixed": null,
"ticket": null,
"issues": [
"CVE-2018-1071"
],
"advisories": []
},
{
"name": "AVG-367",
"packages": [
"libvorbis"
],
"status": "Fixed",
"severity": "Critical",
"type": "multiple issues",
"affected": "1.3.5-1",
"fixed": "1.3.6-1",
"ticket": null,
"issues": [
"CVE-2018-5146",
"CVE-2017-14633",
"CVE-2017-14632"
],
"advisories": [
"ASA-201803-12"
]
},
{
"name": "AVG-658",
"packages": [
"lib32-libvorbis"
],
"status": "Fixed",
"severity": "Critical",
"type": "multiple issues",
"affected": "1.3.5-1",
"fixed": "1.3.6-1",
"ticket": null,
"issues": [
"CVE-2018-5146",
"CVE-2017-14633",
"CVE-2017-14632"
],
"advisories": [
"ASA-201803-21"
]
}
]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -510,6 +510,15 @@ func computeAncestryFeatures(ancestryLayers []database.LayerWithContent) ([]data
// all detectable features removed is to pass in the file status.
for vf, mapF := range currentFeatures {
features[vf] = mapF
/*
// FIXME: Arch Linux installed packages are a list of directories
if len(features[vf]) == 0 {
features[vf] = make(map[string]database.NamespacedFeature)
}
for k, f := range mapF {
features[vf][k] = f
}
*/
}
}

@ -30,6 +30,7 @@ import (
"github.com/coreos/clair/pkg/strutil"
// Register the required detectors.
_ "github.com/coreos/clair/ext/featurefmt/alpm"
_ "github.com/coreos/clair/ext/featurefmt/dpkg"
_ "github.com/coreos/clair/ext/featurefmt/rpm"
_ "github.com/coreos/clair/ext/featurens/aptsources"
@ -337,7 +338,7 @@ func TestProcessAncestryWithDistUpgrade(t *testing.T) {
nonUpgradedMap := map[database.Feature]struct{}{}
for _, f := range nonUpgradedFeatures {
f.VersionFormat = "dpkg"
f.VersionFormat = dpkg.ParserName
nonUpgradedMap[f] = struct{}{}
}
@ -435,6 +436,36 @@ func TestProcessLayers(t *testing.T) {
}
}
func TestProcessArchLayers(t *testing.T) {
_, f, _, _ := runtime.Caller(0)
testDataPath := filepath.Join(filepath.Dir(f)) + "/testdata/arch/"
datastore := newMockDatastore()
// suppose there are multiple arch layers
layers := []LayerRequest{
{Hash: "blank", Path: testDataPath + "blank.tar.gz"},
{Hash: "arch", Path: testDataPath + "arch.tar.gz"},
{Hash: "arch2", Path: testDataPath + "arch2.tar.gz"},
{Hash: "arch3", Path: testDataPath + "arch3.tar.gz"},
}
Processors = database.Processors{
Detectors: []string{"os-release"},
Listers: []string{"alpm"},
}
assert.Nil(t, ProcessAncestry(datastore, "Docker", "Mock", layers))
assert.Len(t, datastore.ancestry["Mock"].Features, 6)
// check the namespaces are correct
for _, f := range datastore.ancestry["Mock"].Features {
if !assert.NotEqual(t, database.Namespace{}, f.Namespace) {
assert.Fail(t, "Every feature should have a namespace attached")
}
}
}
// TestUpgradeClair checks if a clair is upgraded and certain ancestry's
// features should not change. We assume that Clair should only upgrade
func TestClairUpgrade(t *testing.T) {

Loading…
Cancel
Save