diff --git a/.packit/rpmlint.spec b/.packit/rpmlint.spec index 5e7d3ce5b..6d1eae44e 100644 --- a/.packit/rpmlint.spec +++ b/.packit/rpmlint.spec @@ -1,7 +1,7 @@ %{!?python3: %global python3 %{__python3}} Name: rpmlint -Version: 2.6.0 +Version: 2.6.1 Release: 0%{?dist} Summary: Tool for checking common errors in RPM packages diff --git a/configs/Fedora/users-groups.toml b/configs/Fedora/users-groups.toml index 706805f58..2c754fda0 100644 --- a/configs/Fedora/users-groups.toml +++ b/configs/Fedora/users-groups.toml @@ -1,5 +1,5 @@ # generated by tools/generate-fedora-users-groups.py on 2022-09-07 -StandardUsers = ['abrt', 'activemq', 'adm', 'aeolus', 'amandabackup', 'apache', 'arpwatch', 'ats', 'avahi', 'avahi-autoipd', 'bacula', 'beagleindex', 'bin', 'cassandra', 'ceilometer', 'ceph', 'cimsrvr', 'cinder', 'clamav', 'condor', 'cyrus', 'daemon', 'dbus', 'desktop', 'dhcpd', 'distcache', 'dovecot', 'elasticsearch', 'exim', 'fax', 'frontpage', 'ftp', 'games', 'gdm', 'glance', 'gopher', 'hacluster', 'haldaemon', 'halt', 'haproxy', 'heat', 'hsqldb', 'ident', 'jbosson-agent', 'jetty', 'jonas', 'keystone', 'ldap', 'lp', 'luci', 'mail', 'mailman', 'mailnull', 'majordomo', 'mongodb', 'myproxy', 'mysql', 'named', 'netdump', 'news', 'nobody', 'nocpulse', 'nova', 'nscd', 'nslcd', 'ntp', 'nut', 'operator', 'oprofile', 'ovirt', 'ovirtagent', 'pegasus', 'piranha', 'pkiuser', 'polkituser', 'postfix', 'postgres', 'prelude-manager', 'privoxy', 'pulse', 'puppet', 'pvm', 'qemu', 'quagga', 'quantum', 'radiusd', 'radvd', 'retrace', 'rhevm', 'ricci', 'root', 'rpc', 'rpcuser', 'rpm', 'rtkit', 'sabayon', 'saned', 'sanlock', 'shutdown', 'smmsp', 'snortd', 'squid', 'sshd', 'stap-server', 'swift', 'sync', 'systemd-network', 'systemd-resolve', 'tcpdump', 'tomcat', 'tss', 'usbmuxd', 'uucp', 'vcsa', 'vdsm', 'vhostmd', 'wallaby', 'webalizer', 'wildfly', 'wnn', 'xfs'] +StandardUsers = ['abrt', 'activemq', 'adm', 'aeolus', 'amandabackup', 'apache', 'arpwatch', 'ats', 'avahi', 'avahi-autoipd', 'bacula', 'beagleindex', 'bin', 'cassandra', 'ceilometer', 'ceph', 'cimsrvr', 'cinder', 'clamav', 'condor', 'cyrus', 'daemon', 'dbus', 'desktop', 'dhcpd', 'distcache', 'dovecot', 'elasticsearch', 'exim', 'fax', 'frontpage', 'ftp', 'games', 'gdm', 'glance', 'gopher', 'hacluster', 'haldaemon', 'halt', 'haproxy', 'heat', 'hsqldb', 'ident', 'jbosson-agent', 'jetty', 'jonas', 'keystone', 'ldap', 'lp', 'luci', 'mail', 'mailman', 'mailnull', 'majordomo', 'mongodb', 'myproxy', 'mysql', 'named', 'netdump', 'news', 'nobody', 'nocpulse', 'nova', 'nscd', 'nslcd', 'ntp', 'nut', 'operator', 'oprofile', 'ovirt', 'ovirtagent', 'pegasus', 'piranha', 'pkiuser', 'polkituser', 'postfix', 'postgres', 'prelude-manager', 'privoxy', 'pulse', 'puppet', 'pvm', 'qemu', 'quagga', 'quantum', 'radiusd', 'radvd', 'retrace', 'rhevm', 'ricci', 'root', 'rpc', 'rpcuser', 'rpm', 'rtkit', 'sabayon', 'saned', 'sanlock', 'shutdown', 'smmsp', 'snortd', 'squid', 'sshd', 'sssd', 'stap-server', 'swift', 'sync', 'systemd-network', 'systemd-resolve', 'tcpdump', 'tomcat', 'tss', 'usbmuxd', 'uucp', 'vcsa', 'vdsm', 'vhostmd', 'wallaby', 'webalizer', 'wildfly', 'wnn', 'xfs'] -StandardGroups = ['abrt', 'activemq', 'adm', 'aeolus', 'apache', 'arpwatch', 'ats', 'audio', 'avahi', 'avahi-autoipd', 'bacula', 'beagleindex', 'bin', 'cassandra', 'cdrom', 'ceilometer', 'ceph', 'cimsrvr', 'cinder', 'clamav', 'condor', 'console', 'daemon', 'dbus', 'desktop', 'dhcpd', 'dialout', 'dip', 'disk', 'distcache', 'dovecot', 'elasticsearch', 'exim', 'fax', 'floppy', 'frontpage', 'ftp', 'games', 'gdm', 'glance', 'gopher', 'haclient', 'haldaemon', 'haproxy', 'heat', 'hsqldb', 'ident', 'input', 'jbosson', 'jetty', 'jonas', 'keystone', 'kmem', 'kvm', 'ldap', 'lock', 'lp', 'luci', 'mail', 'mailman', 'mailnull', 'majordomo', 'man', 'mem', 'mock', 'mongodb', 'myproxy', 'mysql', 'named', 'netdump', 'news', 'nobody', 'nocpulse', 'nova', 'nscd', 'ntp', 'nut', 'oprofile', 'ovirt', 'ovirtagent', 'pegasus', 'piranha', 'pkiuser', 'polkituser', 'popusers', 'postdrop', 'postfix', 'postgres', 'pppusers', 'prelude-manager', 'privoxy', 'pulse', 'puppet', 'pvm', 'qemu', 'quagga', 'quaggavt', 'quantum', 'radiusd', 'radvd', 'realtime', 'render', 'retrace', 'rhevm', 'ricci', 'root', 'rpc', 'rpcuser', 'rpm', 'rtkit', 'sabayon', 'saned', 'sanlock', 'saslauth', 'screen', 'sgx', 'slipusers', 'slocate', 'smmsp', 'snortd', 'squid', 'sshd', 'stap-server', 'stapdev', 'stapsys', 'stapusr', 'swift', 'sys', 'systemd-journal', 'systemd-network', 'systemd-resolve', 'tape', 'tcpdump', 'tomcat', 'tss', 'tty', 'usbmuxd', 'users', 'utempter', 'utmp', 'uucp', 'vcsa', 'vhostmd', 'video', 'wallaby', 'wbpriv', 'webalizer', 'wheel', 'wildfly', 'wine', 'wnn', 'xfs'] +StandardGroups = ['abrt', 'activemq', 'adm', 'aeolus', 'apache', 'arpwatch', 'ats', 'audio', 'avahi', 'avahi-autoipd', 'bacula', 'beagleindex', 'bin', 'cassandra', 'cdrom', 'ceilometer', 'ceph', 'cimsrvr', 'cinder', 'clamav', 'condor', 'console', 'daemon', 'dbus', 'desktop', 'dhcpd', 'dialout', 'dip', 'disk', 'distcache', 'dovecot', 'elasticsearch', 'exim', 'fax', 'floppy', 'frontpage', 'ftp', 'games', 'gdm', 'glance', 'gopher', 'haclient', 'haldaemon', 'haproxy', 'heat', 'hsqldb', 'ident', 'input', 'jbosson', 'jetty', 'jonas', 'keystone', 'kmem', 'kvm', 'ldap', 'lock', 'lp', 'luci', 'mail', 'mailman', 'mailnull', 'majordomo', 'man', 'mem', 'mock', 'mongodb', 'myproxy', 'mysql', 'named', 'netdump', 'news', 'nobody', 'nocpulse', 'nova', 'nscd', 'ntp', 'nut', 'oprofile', 'ovirt', 'ovirtagent', 'pegasus', 'piranha', 'pkiuser', 'polkituser', 'popusers', 'postdrop', 'postfix', 'postgres', 'pppusers', 'prelude-manager', 'privoxy', 'pulse', 'puppet', 'pvm', 'qemu', 'quagga', 'quaggavt', 'quantum', 'radiusd', 'radvd', 'realtime', 'render', 'retrace', 'rhevm', 'ricci', 'root', 'rpc', 'rpcuser', 'rpm', 'rtkit', 'sabayon', 'saned', 'sanlock', 'saslauth', 'screen', 'sgx', 'slipusers', 'slocate', 'smmsp', 'snortd', 'squid', 'sshd', 'sssd', 'stap-server', 'stapdev', 'stapsys', 'stapusr', 'swift', 'sys', 'systemd-journal', 'systemd-network', 'systemd-resolve', 'tape', 'tcpdump', 'tomcat', 'tss', 'tty', 'usbmuxd', 'users', 'utempter', 'utmp', 'uucp', 'vcsa', 'vhostmd', 'video', 'wallaby', 'wbpriv', 'webalizer', 'wheel', 'wildfly', 'wine', 'wnn', 'xfs'] diff --git a/configs/openSUSE/licenses.toml b/configs/openSUSE/licenses.toml index 8e0536d38..1acc01fd5 100644 --- a/configs/openSUSE/licenses.toml +++ b/configs/openSUSE/licenses.toml @@ -28,6 +28,8 @@ ValidLicenses = [ "AMDPLPA+", "AML", "AML+", + "AML-glslang", + "AML-glslang+", "AMPAS", "AMPAS+", "ANTLR-PD", @@ -46,12 +48,22 @@ ValidLicenses = [ "APSL-1.2+", "APSL-2.0", "APSL-2.0+", + "ASWF-Digital-Assets-1.0", + "ASWF-Digital-Assets-1.0+", + "ASWF-Digital-Assets-1.1", + "ASWF-Digital-Assets-1.1+", "Abstyles", "Abstyles+", + "AdaCore-doc", + "AdaCore-doc+", "Adobe-2006", "Adobe-2006+", + "Adobe-Display-PostScript", + "Adobe-Display-PostScript+", "Adobe-Glyph", "Adobe-Glyph+", + "Adobe-Utopia", + "Adobe-Utopia+", "Afmparse", "Afmparse+", "Aladdin", @@ -89,6 +101,8 @@ ValidLicenses = [ "BSD-3-Clause-Attribution+", "BSD-3-Clause-Clear", "BSD-3-Clause-Clear+", + "BSD-3-Clause-HP", + "BSD-3-Clause-HP+", "BSD-3-Clause-LBNL", "BSD-3-Clause-LBNL+", "BSD-3-Clause-Modification", @@ -103,16 +117,36 @@ ValidLicenses = [ "BSD-3-Clause-No-Nuclear-Warranty+", "BSD-3-Clause-Open-MPI", "BSD-3-Clause-Open-MPI+", + "BSD-3-Clause-Sun", + "BSD-3-Clause-Sun+", + "BSD-3-Clause-flex", + "BSD-3-Clause-flex+", "BSD-4-Clause", "BSD-4-Clause+", "BSD-4-Clause-Shortened", "BSD-4-Clause-Shortened+", "BSD-4-Clause-UC", "BSD-4-Clause-UC+", + "BSD-4.3RENO", + "BSD-4.3RENO+", + "BSD-4.3TAHOE", + "BSD-4.3TAHOE+", + "BSD-Advertising-Acknowledgement", + "BSD-Advertising-Acknowledgement+", + "BSD-Attribution-HPND-disclaimer", + "BSD-Attribution-HPND-disclaimer+", + "BSD-Inferno-Nettverk", + "BSD-Inferno-Nettverk+", "BSD-Protection", "BSD-Protection+", "BSD-Source-Code", "BSD-Source-Code+", + "BSD-Source-beginning-file", + "BSD-Source-beginning-file+", + "BSD-Systemics", + "BSD-Systemics+", + "BSD-Systemics-W3Works", + "BSD-Systemics-W3Works+", "BSL-1.0", "BSL-1.0+", "BUSL-1.1", @@ -129,12 +163,18 @@ ValidLicenses = [ "BitTorrent-1.0+", "BitTorrent-1.1", "BitTorrent-1.1+", + "Bitstream-Charter", + "Bitstream-Charter+", "Bitstream-Vera", "Bitstream-Vera+", "BlueOak-1.0.0", "BlueOak-1.0.0+", + "Boehm-GC", + "Boehm-GC+", "Borceux", "Borceux+", + "Brian-Gladman-3-Clause", + "Brian-Gladman-3-Clause+", "C-UDA-1.0", "C-UDA-1.0+", "CAL-1.0", @@ -155,6 +195,8 @@ ValidLicenses = [ "CC-BY-3.0+", "CC-BY-3.0-AT", "CC-BY-3.0-AT+", + "CC-BY-3.0-AU", + "CC-BY-3.0-AU+", "CC-BY-3.0-DE", "CC-BY-3.0-DE+", "CC-BY-3.0-IGO", @@ -195,6 +237,8 @@ ValidLicenses = [ "CC-BY-NC-SA-1.0+", "CC-BY-NC-SA-2.0", "CC-BY-NC-SA-2.0+", + "CC-BY-NC-SA-2.0-DE", + "CC-BY-NC-SA-2.0-DE+", "CC-BY-NC-SA-2.0-FR", "CC-BY-NC-SA-2.0-FR+", "CC-BY-NC-SA-2.0-UK", @@ -237,6 +281,8 @@ ValidLicenses = [ "CC-BY-SA-3.0-AT+", "CC-BY-SA-3.0-DE", "CC-BY-SA-3.0-DE+", + "CC-BY-SA-3.0-IGO", + "CC-BY-SA-3.0-IGO+", "CC-BY-SA-4.0", "CC-BY-SA-4.0+", "CC-PDDC", @@ -277,6 +323,10 @@ ValidLicenses = [ "CERN-OHL-S-2.0+", "CERN-OHL-W-2.0", "CERN-OHL-W-2.0+", + "CFITSIO", + "CFITSIO+", + "CMU-Mach", + "CMU-Mach+", "CNRI-Jython", "CNRI-Jython+", "CNRI-Python", @@ -295,12 +345,20 @@ ValidLicenses = [ "CUA-OPL-1.0+", "Caldera", "Caldera+", + "Caldera-no-preamble", + "Caldera-no-preamble+", "ClArtistic", "ClArtistic+", + "Clips", + "Clips+", "Community-Spec-1.0", "Community-Spec-1.0+", "Condor-1.1", "Condor-1.1+", + "Cornell-Lossless-JPEG", + "Cornell-Lossless-JPEG+", + "Cronyx", + "Cronyx+", "Crossword", "Crossword+", "CrystalStacker", @@ -309,12 +367,18 @@ ValidLicenses = [ "Cube+", "D-FSL-1.0", "D-FSL-1.0+", + "DEC-3-Clause", + "DEC-3-Clause+", "DL-DE-BY-2.0", "DL-DE-BY-2.0+", + "DL-DE-ZERO-2.0", + "DL-DE-ZERO-2.0+", "DOC", "DOC+", "DRL-1.0", "DRL-1.0+", + "DRL-1.1", + "DRL-1.1+", "DSDP", "DSDP+", "Dotseqn", @@ -349,10 +413,14 @@ ValidLicenses = [ "ErlPL-1.1+", "Eurosym", "Eurosym+", + "FBM", + "FBM+", "FDK-AAC", "FDK-AAC+", "FSFAP", "FSFAP+", + "FSFAP-no-warranty-disclaimer", + "FSFAP-no-warranty-disclaimer+", "FSFUL", "FSFUL+", "FSFULLR", @@ -363,12 +431,18 @@ ValidLicenses = [ "FTL+", "Fair", "Fair+", + "Ferguson-Twofish", + "Ferguson-Twofish+", "Frameworx-1.0", "Frameworx-1.0+", "FreeBSD-DOC", "FreeBSD-DOC+", "FreeImage", "FreeImage+", + "Furuseth", + "Furuseth+", + "GCR-docs", + "GCR-docs+", "GD", "GD+", "GFDL-1.1-invariants-only", @@ -432,10 +506,42 @@ ValidLicenses = [ "Glide+", "Glulxe", "Glulxe+", + "Graphics-Gems", + "Graphics-Gems+", + "HP-1986", + "HP-1986+", + "HP-1989", + "HP-1989+", "HPND", "HPND+", + "HPND-DEC", + "HPND-DEC+", + "HPND-Kevlin-Henney", + "HPND-Kevlin-Henney+", + "HPND-MIT-disclaimer", + "HPND-MIT-disclaimer+", + "HPND-Markus-Kuhn", + "HPND-Markus-Kuhn+", + "HPND-Pbmplus", + "HPND-Pbmplus+", + "HPND-UC", + "HPND-UC+", + "HPND-doc", + "HPND-doc+", + "HPND-doc-sell", + "HPND-doc-sell+", + "HPND-export-US", + "HPND-export-US+", + "HPND-export-US-modify", + "HPND-export-US-modify+", + "HPND-sell-MIT-disclaimer-xserver", + "HPND-sell-MIT-disclaimer-xserver+", + "HPND-sell-regexpr", + "HPND-sell-regexpr+", "HPND-sell-variant", "HPND-sell-variant+", + "HPND-sell-variant-MIT-disclaimer", + "HPND-sell-variant-MIT-disclaimer+", "HTMLTIDY", "HTMLTIDY+", "HaskellReport", @@ -446,26 +552,36 @@ ValidLicenses = [ "IBM-pibs+", "ICU", "ICU+", + "IEC-Code-Components-EULA", + "IEC-Code-Components-EULA+", "IJG", "IJG+", + "IJG-short", + "IJG-short+", "IPA", "IPA+", "IPL-1.0", "IPL-1.0+", "ISC", "ISC+", + "ISC-Veillard", + "ISC-Veillard+", "ImageMagick", "ImageMagick+", "Imlib2", "Imlib2+", "Info-ZIP", "Info-ZIP+", + "Inner-Net-2.0", + "Inner-Net-2.0+", "Intel", "Intel+", "Intel-ACPI", "Intel-ACPI+", "Interbase-1.0", "Interbase-1.0+", + "JPL-image", + "JPL-image+", "JPNIC", "JPNIC+", "JSON", @@ -474,6 +590,12 @@ ValidLicenses = [ "Jam+", "JasPer-2.0", "JasPer-2.0+", + "Kastrup", + "Kastrup+", + "Kazlib", + "Kazlib+", + "Knuth-CTAN", + "Knuth-CTAN+", "LAL-1.2", "LAL-1.2+", "LAL-1.3", @@ -496,6 +618,10 @@ ValidLicenses = [ "LGPL-3.0-with-Qt-Company-Qt-exception-1.1", "LGPLLR", "LGPLLR+", + "LOOP", + "LOOP+", + "LPD-document", + "LPD-document+", "LPL-1.0", "LPL-1.0+", "LPL-1.02", @@ -516,6 +642,8 @@ ValidLicenses = [ "LZMA-SDK-9.22+", "Latex2e", "Latex2e+", + "Latex2e-translated-notice", + "Latex2e-translated-notice+", "Leptonica", "Leptonica+", "LiLiQ-P-1.1", @@ -528,16 +656,28 @@ ValidLicenses = [ "Libpng+", "Linux-OpenIB", "Linux-OpenIB+", + "Linux-man-pages-1-para", + "Linux-man-pages-1-para+", "Linux-man-pages-copyleft", "Linux-man-pages-copyleft+", + "Linux-man-pages-copyleft-2-para", + "Linux-man-pages-copyleft-2-para+", + "Linux-man-pages-copyleft-var", + "Linux-man-pages-copyleft-var+", + "Lucida-Bitmap-Fonts", + "Lucida-Bitmap-Fonts+", "MIT", "MIT+", "MIT-0", "MIT-0+", "MIT-CMU", "MIT-CMU+", + "MIT-Festival", + "MIT-Festival+", "MIT-Modern-Variant", "MIT-Modern-Variant+", + "MIT-Wu", + "MIT-Wu+", "MIT-advertising", "MIT-advertising+", "MIT-enna", @@ -546,8 +686,14 @@ ValidLicenses = [ "MIT-feh+", "MIT-open-group", "MIT-open-group+", + "MIT-testregex", + "MIT-testregex+", "MITNFA", "MITNFA+", + "MMIXware", + "MMIXware+", + "MPEG-SSG", + "MPEG-SSG+", "MPL-1.0", "MPL-1.0+", "MPL-1.1", @@ -566,6 +712,10 @@ ValidLicenses = [ "MTLL+", "MakeIndex", "MakeIndex+", + "Martin-Birgmeier", + "Martin-Birgmeier+", + "McPhee-slideshow", + "McPhee-slideshow+", "Minpack", "Minpack+", "MirOS", @@ -598,6 +748,8 @@ ValidLicenses = [ "NIST-PD+", "NIST-PD-fallback", "NIST-PD-fallback+", + "NIST-Software", + "NIST-Software+", "NLOD-1.0", "NLOD-1.0+", "NLOD-2.0", @@ -642,6 +794,8 @@ ValidLicenses = [ "ODC-By-1.0+", "ODbL-1.0", "ODbL-1.0+", + "OFFIS", + "OFFIS+", "OFL-1.0", "OFL-1.0+", "OFL-1.0-RFN", @@ -700,10 +854,14 @@ ValidLicenses = [ "OLDAP-2.7+", "OLDAP-2.8", "OLDAP-2.8+", + "OLFL-1.3", + "OLFL-1.3+", "OML", "OML+", "OPL-1.0", "OPL-1.0+", + "OPL-UK-3.0", + "OPL-UK-3.0+", "OPUBL-1.0", "OPUBL-1.0+", "OSET-PL-2.1", @@ -718,8 +876,12 @@ ValidLicenses = [ "OSL-2.1+", "OSL-3.0", "OSL-3.0+", + "OpenPBS-2.3", + "OpenPBS-2.3+", "OpenSSL", "OpenSSL+", + "PADL", + "PADL+", "PDDL-1.0", "PDDL-1.0+", "PHP-3.0", @@ -732,6 +894,8 @@ ValidLicenses = [ "Parity-6.0.0+", "Parity-7.0.0", "Parity-7.0.0+", + "Pixar", + "Pixar+", "Plexus", "Plexus+", "PolyForm-Noncommercial-1.0.0", @@ -746,6 +910,8 @@ ValidLicenses = [ "Python-2.0.1+", "QPL-1.0", "QPL-1.0+", + "QPL-1.0-INRIA-2004", + "QPL-1.0-INRIA-2004+", "Qhull", "Qhull+", "RHeCos-1.1", @@ -766,6 +932,8 @@ ValidLicenses = [ "Ruby+", "SAX-PD", "SAX-PD+", + "SAX-PD-2.0", + "SAX-PD-2.0+", "SCEA", "SCEA+", "SGI-B-1.0", @@ -774,6 +942,10 @@ ValidLicenses = [ "SGI-B-1.1+", "SGI-B-2.0", "SGI-B-2.0+", + "SGI-OpenGL", + "SGI-OpenGL+", + "SGP4", + "SGP4+", "SHL-0.5", "SHL-0.5+", "SHL-0.51", @@ -782,6 +954,8 @@ ValidLicenses = [ "SISSL+", "SISSL-1.2", "SISSL-1.2+", + "SL", + "SL+", "SMLNJ", "SMLNJ+", "SMPPL", @@ -926,8 +1100,6 @@ ValidLicenses = [ "SUSE-Scrot+", "SUSE-Sun-Laboratories", "SUSE-Sun-Laboratories+", - "SUSE-TGPPL-1.0", - "SUSE-TGPPL-1.0+", "SUSE-TeX", "SUSE-TeX+", "SUSE-Ubuntu-Font-License-1.0", @@ -960,6 +1132,8 @@ ValidLicenses = [ "SimPL-2.0+", "Sleepycat", "Sleepycat+", + "Soundex", + "Soundex+", "Spencer-86", "Spencer-86+", "Spencer-94", @@ -968,34 +1142,58 @@ ValidLicenses = [ "Spencer-99+", "SugarCRM-1.1.3", "SugarCRM-1.1.3+", + "SunPro", + "SunPro+", + "Symlinks", + "Symlinks+", "TAPR-OHL-1.0", "TAPR-OHL-1.0+", "TCL", "TCL+", "TCP-wrappers", "TCP-wrappers+", + "TGPPL-1.0", + "TGPPL-1.0+", "TMate", "TMate+", "TORQUE-1.1", "TORQUE-1.1+", "TOSL", "TOSL+", + "TPDL", + "TPDL+", + "TPL-1.0", + "TPL-1.0+", + "TTWL", + "TTWL+", + "TTYP0", + "TTYP0+", "TU-Berlin-1.0", "TU-Berlin-1.0+", "TU-Berlin-2.0", "TU-Berlin-2.0+", + "TermReadKey", + "TermReadKey+", + "UCAR", + "UCAR+", "UCL-1.0", "UCL-1.0+", "UPL-1.0", "UPL-1.0+", + "URT-RLE", + "URT-RLE+", "Unicode", "Unicode+", + "Unicode-3.0", + "Unicode-3.0+", "Unicode-DFS-2015", "Unicode-DFS-2015+", "Unicode-DFS-2016", "Unicode-DFS-2016+", "Unicode-TOU", "Unicode-TOU+", + "UnixCrypt", + "UnixCrypt+", "Unlicense", "Unlicense+", "VOSTROM", @@ -1014,6 +1212,8 @@ ValidLicenses = [ "WTFPL+", "Watcom-1.0", "Watcom-1.0+", + "Widget-Workshop", + "Widget-Workshop+", "Wsuipa", "Wsuipa+", "X11", @@ -1024,8 +1224,12 @@ ValidLicenses = [ "XFree86-1.1+", "XSkat", "XSkat+", + "Xdebug-1.03", + "Xdebug-1.03+", "Xerox", "Xerox+", + "Xfig", + "Xfig+", "Xnet", "Xnet+", "YPL-1.0", @@ -1040,6 +1244,8 @@ ValidLicenses = [ "ZPL-2.1+", "Zed", "Zed+", + "Zeeff", + "Zeeff+", "Zend-2.0", "Zend-2.0+", "Zimbra-1.3", @@ -1052,6 +1258,8 @@ ValidLicenses = [ "blessing+", "bzip2-1.0.6", "bzip2-1.0.6+", + "check-cvs", + "check-cvs+", "checkmk", "checkmk+", "copyleft-next-0.3.0", @@ -1062,16 +1270,22 @@ ValidLicenses = [ "curl+", "diffmark", "diffmark+", + "dtoa", + "dtoa+", "dvipdfm", "dvipdfm+", "eGenix", "eGenix+", "etalab-2.0", "etalab-2.0+", + "fwlw", + "fwlw+", "gSOAP-1.3b", "gSOAP-1.3b+", "gnuplot", "gnuplot+", + "hdparm", + "hdparm+", "iMatix", "iMatix+", "libpng-2.0", @@ -1080,18 +1294,48 @@ ValidLicenses = [ "libselinux-1.0+", "libtiff", "libtiff+", + "libutil-David-Nugent", + "libutil-David-Nugent+", + "lsof", + "lsof+", + "magaz", + "magaz+", + "mailprio", + "mailprio+", + "metamail", + "metamail+", "mpi-permissive", "mpi-permissive+", "mpich2", "mpich2+", "mplus", "mplus+", + "pnmstitch", + "pnmstitch+", "psfrag", "psfrag+", "psutils", "psutils+", + "python-ldap", + "python-ldap+", + "radvd", + "radvd+", + "snprintf", + "snprintf+", + "ssh-keyscan", + "ssh-keyscan+", + "swrule", + "swrule+", + "ulem", + "ulem+", + "w3m", + "w3m+", "xinetd", "xinetd+", + "xkeyboard-config-Zinoviev", + "xkeyboard-config-Zinoviev+", + "xlock", + "xlock+", "xpp", "xpp+", "zlib-acknowledgement", @@ -1126,8 +1370,13 @@ ValidLicenses = [ ValidLicenseExceptions = [ "389-exception", + "Asterisk-exception", "Autoconf-exception-2.0", "Autoconf-exception-3.0", + "Autoconf-exception-generic", + "Autoconf-exception-generic-3.0", + "Autoconf-exception-macro", + "Bison-exception-1.24", "Bison-exception-2.2", "Bootloader-exception", "CLISP-exception-2.0", @@ -1137,7 +1386,11 @@ ValidLicenseExceptions = [ "Fawkes-Runtime-exception", "Font-exception-2.0", "GCC-exception-2.0", + "GCC-exception-2.0-note", "GCC-exception-3.1", + "GNAT-exception", + "GNU-compiler-exception", + "GPL-3.0-interface-exception", "GPL-3.0-linking-exception", "GPL-3.0-linking-source-exception", "GPL-CC-1.0", @@ -1145,6 +1398,7 @@ ValidLicenseExceptions = [ "GStreamer-exception-2008", "KiCad-libraries-exception", "LGPL-3.0-linking-exception", + "LLGPL", "LLVM-exception", "LZMA-exception", "Libtool-exception", @@ -1154,20 +1408,29 @@ ValidLicenseExceptions = [ "OCaml-LGPL-linking-exception", "OpenJDK-assembly-exception-1.0", "PS-or-PDF-font-exception-20170817", + "QPL-1.0-INRIA-2004-exception", "Qt-GPL-exception-1.0", "Qt-LGPL-exception-1.1", "Qwt-exception-1.0", + "SANE-exception", "SHL-2.0", "SHL-2.1", + "SWI-exception", "Swift-exception", + "Texinfo-exception", + "UBDL-exception", "Universal-FOSS-exception-1.0", "WxWindows-exception-3.1", + "cryptsetup-OpenSSL-exception", "eCos-exception-2.0", "freertos-exception-2.0", "gnu-javamail-exception", "i2p-gpl-java-exception", + "libpri-OpenH323-exception", "mif-exception", "openvpn-openssl-exception", + "stunnel-exception", "u-boot-exception-2.0", + "vsftpd-openssl-exception", "x11vnc-openssl-exception", ] diff --git a/configs/openSUSE/users-groups.toml b/configs/openSUSE/users-groups.toml index 3ddf61ac3..0e3299a6c 100644 --- a/configs/openSUSE/users-groups.toml +++ b/configs/openSUSE/users-groups.toml @@ -1,5 +1,6 @@ StandardGroups = [ 'aegis', + 'alloy', 'antivir', 'arangodb', 'at', @@ -128,6 +129,7 @@ StandardGroups = [ 'ntop', 'ntp', 'oinstall', + 'openbao', 'opensearch', 'openvswitch', 'orthanc', @@ -149,6 +151,7 @@ StandardGroups = [ 'privoxy', 'prometheus', 'prosody', + 'proxy', 'ptokax', 'public', 'pulse', @@ -179,6 +182,7 @@ StandardGroups = [ 'sogo', 'squid', 'sshd', + 'sssd', 'suse-ncc', 'svn', 'swift', @@ -206,14 +210,17 @@ StandardGroups = [ 'uuidd', 'vacation', 'varnish', + 'vault-sync', 'video', 'vnc', 'vscan', 'warewulf', 'wheel', 'wireshark', + 'woodpecker', 'www', 'xok', + 'xpra', 'xrootd', 'xymon', 'zabbix', @@ -226,6 +233,7 @@ StandardGroups = [ StandardUsers = [ 'aegis', + 'alloy', 'amanda', 'aodh', 'arangodb', @@ -360,6 +368,7 @@ StandardUsers = [ 'ntop', 'ntp', 'octavia', + 'openbao', 'opensearch', 'openvswitch', 'oracle', @@ -384,6 +393,7 @@ StandardUsers = [ 'privoxy', 'prometheus', 'prosody', + 'proxy', 'ptokax', 'pulse', 'puppet', @@ -412,6 +422,7 @@ StandardUsers = [ 'sogo', 'squid', 'sshd', + 'sssd', 'statd', 'suse-ncc', 'svn', @@ -434,10 +445,12 @@ StandardUsers = [ 'uuidd', 'vacation', 'varnish', + 'vault-sync', 'vdr', 'vnc', 'vscan', 'wnn', + 'woodpecker', 'wwwrun', 'xrootd', 'xymon', diff --git a/pyproject.toml b/pyproject.toml index 1c60ba3de..0a5b5559b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta" [project] name = "rpmlint" -version = "2.6.0" +version = "2.6.1" description = "Check for common errors in RPM packages" license = {text = "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)"} authors = [ diff --git a/rpmlint/checks/FilesCheck.py b/rpmlint/checks/FilesCheck.py index 2212b0526..8ebb01142 100644 --- a/rpmlint/checks/FilesCheck.py +++ b/rpmlint/checks/FilesCheck.py @@ -339,12 +339,18 @@ def find_perm_in_tmpfiles(pkg, fname): fname = os.path.realpath(fname) for k, v in pkg.files.items(): - if 'tmpfiles.d' not in k: + if 'tmpfiles.d' not in k or not k.endswith('.conf'): continue - if not os.path.exists(v.path): + if not os.path.exists(v.path) or os.path.isdir(v.path): continue + with open(v.path) as f: - tmpd += f.readlines() + try: + tmpd += f.readlines() + except ValueError: + # Can't read this file, so we are not trying to read definition + # from there + pass for line in tmpd: if f' {fname} ' not in line: diff --git a/rpmlint/pkg.py b/rpmlint/pkg.py index 641a35fcb..ae44c77f5 100644 --- a/rpmlint/pkg.py +++ b/rpmlint/pkg.py @@ -494,6 +494,25 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): self.cleanup() + def check_versioned_dep(self, name, version): + # try to match name%_isa as well (e.g. 'foo(x86-64)', 'foo(x86-32)') + name_re = re.compile(r'^%s(\(\w+-\d+\))?$' % re.escape(name)) + for d in self.requires + self.prereq: + if name_re.match(d[0]): + if d[1] & rpm.RPMSENSE_EQUAL != rpm.RPMSENSE_EQUAL \ + or d[2][1] != version: + return False + return True + return False + + def read_with_mmap(self, filename): + """Mmap a file, return it's content decoded.""" + try: + with open(Path(self.dir_name() or '/', filename.lstrip('/'))) as in_file: + return mmap.mmap(in_file.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ).read().decode() + except Exception: + return '' + class Pkg(AbstractPkg): _magic_from_compressed_re = re.compile(r'\([^)]+\s+compressed\s+data\b') @@ -630,14 +649,6 @@ def grep(self, regex, filename): else: return None - def read_with_mmap(self, filename): - """Mmap a file, return it's content decoded.""" - try: - with open(Path(self.dir_name() or '/', filename.lstrip('/'))) as in_file: - return mmap.mmap(in_file.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ).read().decode() - except Exception: - return '' - def langtag(self, tag, lang): """Get value of tag in the given language.""" # LANGUAGE trumps other env vars per GNU gettext docs, see also #166 @@ -715,17 +726,6 @@ def readlink(self, pkgfile): result = self.files.get(linkpath) return result - def check_versioned_dep(self, name, version): - # try to match name%_isa as well (e.g. 'foo(x86-64)', 'foo(x86-32)') - name_re = re.compile(r'^%s(\(\w+-\d+\))?$' % re.escape(name)) - for d in self.requires + self.prereq: - if name_re.match(d[0]): - if d[1] & rpm.RPMSENSE_EQUAL != rpm.RPMSENSE_EQUAL \ - or d[2][1] != version: - return False - return True - return False - def get_installed_pkgs(name): """Get list of installed package objects by name.""" @@ -877,14 +877,15 @@ def create_files(self, files): self._mock_file(path, file) def add_dir(self, path, metadata=None): - pkgdir = PkgFile(path) + name = path + pkgdir = PkgFile(name) pkgdir.magic = 'directory' path = os.path.join(self.dir_name(), path.lstrip('/')) os.makedirs(Path(path), exist_ok=True) pkgdir.path = path - self.files[path] = pkgdir + self.files[name] = pkgdir if metadata: for k, v in metadata.items(): diff --git a/test/files/README1.gz b/test/files/README1.gz new file mode 100644 index 000000000..b7d45a787 Binary files /dev/null and b/test/files/README1.gz differ diff --git a/test/files/README2.bz2 b/test/files/README2.bz2 new file mode 100644 index 000000000..b5f29b0dd Binary files /dev/null and b/test/files/README2.bz2 differ diff --git a/test/files/README3.xz b/test/files/README3.xz new file mode 100644 index 000000000..8154cdd30 Binary files /dev/null and b/test/files/README3.xz differ diff --git a/test/files/broken-xml.metainfo.xml b/test/files/broken-xml.metainfo.xml new file mode 100644 index 000000000..8979cd21e --- /dev/null +++ b/test/files/broken-xml.metainfo.xml @@ -0,0 +1,426 @@ + + + CC0-1.0 + GPL-2.0 only + Terminator + Terminator + المتطرف + Terminator + Terminator + Тэрмінатар + Терминатор + টার্মিনেটর + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminatoro + Terminator + Terminator + Terminator + ترمیناتور + Terminator + Terminator + Terminator + Terminador + Terminator + टर्मिनेटर + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Терминатор + 터미네이터 + Terminator + Terminator + Терминатор + ടെര്‍മിനേറ്റര്‍ + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Terminator + Терминатор + ටර්මිනේටර් + Terminátor + Terminator + Terminator + Терминатор + Terminator + Terminator + முனையம் + టెర్మినేటర్ + Terminator + Uçbirim + Terminator + Terminator + Terminator + Terminator 终端终结者 + 終端機 + Multiple terminals in one window + Veelvuldige terminale in een venster + العديد من الطرفيات في نافذة واحدة + Delles terminales nuna ventana + Çoxsaylı terminallar bir pəncərədə + Некалькі тэрміналаў у акне + Множество терминали в един прозорец + এক উইন্ডোতে একাধিক টার্মিনাল + Više terminala u jednom prozoru + Diversos terminals en una finestra + Diversos terminals en una finestra + Několik terminálů v jednom okně + Flere terminaler i et vindue + Mehrere Terminals in einem Fenster + Πολλαπλά τερματικά σε ένα παράθυρο + Multiple terminals in one window + Multiple terminals in one window + Multiple terminals in one window + Pluraj terminaloj en unu fenestro + Múltiples terminales en una ventana + Mitu terminaali ühes aknas + Hainbat terminal leiho bakarrean + Useita päätteitä yhdessä ikkunassa + Permet d'avoir plusieurs terminaux en une seule fenêtre + Múltiples terminales nunha ventá + מסופים מרובים בחלון אחד + एक विंडो में अनेक टर्मिनल + Više terminala u jednom prozoru + Több terminál egy ablakban + Մի քանի տերմինալ մեկ պատուհանում + Plure terminales in un fenestra + Banyak terminal dalam satu window + Margar útstöðvar í einum glugga + Molteplici terminali un una sola finestra + 複数の端末を一つのウインドウに + Akeh terminal ning sak jendelo + მრავალი ტერმინალები ერთ ფანჯარაში + Бір терезе ішінде көптік терминалдар + 창 하나에 터미널 여러 개 쓰기 + Keli terminalai viename lange + Daudzi termināļi vienā logā + Повеќе терминали во еден прозорец + ഒരു ജാലകത്തില്‍ ഒന്നിലധികം ടെര്‍മിനലുകള്‍ + Kesemua terminal dalam satu tetingkap + Flere terminaler i ett vindu + Meerdere terminals in één venster + Permet d'aver mantun terminal dins una sola fenèstra + Wiele terminali w jednym oknie + Terminais múltiplos numa janela + Múltiplos terminais em uma janela + Terminale multiple într-o singură fereastră + Несколько терминалов в одном окне + එක් වින්ඩෝවක ටර්මිනල් රාශියක් + Viaceré terminály v jednom okne + Več terminalov v enem oknu + Shumë terminale në një dritare + Више терминала у једном прозору + Loba terminal dina hiji jandela + Flera terminaler i ett fönster + ஒரு சாளரத்தில் பல முனையங்கள் + ఒకే విండోలో బహుళ టెర్మినల్స్ + หลายเทอร์มินัลในหน้าต่างเดียว + Tek pencerede birden çok uçbirim + Кілька терміналів в одному вікні + ایک دریچے میں ایک سے زیادہ ٹرمنل + Mở nhiều terminal trong cùng cửa sổ + 一个窗口中的多个终端 + +

The robot future of terminals

+

Fremtiden for robotterminaler

+

Die Roboterzukunft der Terminals

+

The robot future of terminals

+

El futuro robot de terminales

+

ربات اینده ای پایانه است

+

Le futur robot des terminaux.

+

Le robot futur del terminales

+

The robot future of terminals

+

Il futuro robot dei terminali

+

Terminal dari robot masa hadapan

+

De robottoekomst van terminals

+

O robô futuro dos terminais

+

O robo do futuro dos terminais

+

Robotická budúcnosť terminálov

+

高级终端的未来

+

終端機的自動功能

+

A power-user tool for arranging terminals. It is inspired by programs such as gnome-multi-term, quadkonsole, etc. in that the main focus is arranging terminals in grids (tabs is the most common default method, which Terminator also supports).

+

Et power-user værktøj til at arrangere terminaler. + +Det er inspireret af programmer som; 'gnome-multi-term', 'quadkonsole', etc. på den måde at det primære fokus er at arrangere terminaler i net(faneblade værende den mest almindelige måde, som Terminator også understøtter).

+

Ein Werkzeug für erfahrene Nutzer, um Terminals anzuordnen. Es ist inspiriert von Anwendungen wie: gnome-multi-term, quadkonsole, usw., deren Hauptfokus auf dem Anordnen der Terminals in einem Gitter liegt (die Verwendung von Reitern ist die meist verbreitete Methode, welche von Terminator auch unterstützt wird).

+

Ένα εργαλείο οργάνωσης τερματικών για προχωρημένους χρήστες. Αντλεί έμπνευση από προγράμματα όπως το gnome-multi-term, το quadkonsole κτλ., με την έννοια πως εστιάζει στην οργάνωση τερματικών σε πλέγματα (οι καρτέλες είναι η πιο κοινή μέθοδος και υποστηρίζεται και αυτή από το Terminator)

+

A power-user tool for arranging terminals. It is inspired by programs such as gnome-multi-term, quadkonsole, etc. in that the main focus is arranging terminals in grids (tabs is the most common default method, which Terminator also supports).

+

Una herramienta para usuarios avanzados, para organizar terminales. Está inspirado en programas tales como gnome-multi-term, quadkonsole, etc., ya que el objetivo principal es organizar terminales en grillas (el método predeterminado más común es en pestañas, que también está soportado por Terminator).

+

یک کابر-قدرتمند ابزاری برای سازماندهی پایانه دارد.این نرم افزار الهام بخش برنامه ای مثل gnome-multi-term , quadkonsole و غیره است.در واقع جهت اصلی سازمان دهی پایانه در شبکه است.(زبانه جدید- این یکی از روش های معروف و پیش فرض در پاینه ای (Terminator)است که پشتیبانی می شود.)

+

Un outil pour utilisateur expérimenté pour l'organisation des terminaux. Il s'inspire des programmes tels que gnome-multi-term, quadkonsole, etc. dont le principal focus est l'organisation des terminaux en grille (sous forme d'onglets dans le mode par défaut le plus basique, mode que Terminator prend en charge).

+

A power-user tool for arranging terminals. It is inspired by programs such as gnome-multi-term, quadkonsole, etc. in that the main focus is arranging terminals in grids (tabs is the most common default method, which Terminator also supports).

+

Alat pengguna-mahir untuk menyusun terminal. Ia diilham dari program seperti gnome-multi-term, quadkonsole, dan lain-lain yang mana fokus utama ialah menyusun terminal dalam grid (tab adalah kaedah lalai paling umum, yang mana Terminator juga menyokongnya).

+

Een krachtgebruikershulpmiddel voor het regelen van terminals. Het is geïnspireerd door programma's zoals gnome-multi-term, quadkonsole, enz. met als hoofddoel het regelen van terminals in netten (tabbladen is de meest algemene standaardmethode, die Terminal ook ondersteunt)

+

Uma poderosa ferramenta para agrupamento de terminais. Foi inspirada por programas como gnome-multi-term, quadkonsole, etc. em que o objetivo principal é o agrupamento de terminais em grades (guia é o meio mais comum, o qual o terminal suporta).

+

Мощный инструмент для упорядочения терминалов. Основой для него послужили такие программы, как gnome-multi-term, quadkonsole и другие, в том смысле, что его главная задача — размещение терминалов в виде сетки (чаще всего применяют способ размещения в виде вкладок, который также реализован в Terminator).

+

Nástroj na usporiadanie terminálov pre pokročilých používateľov. Je inšpirovaný programami ako gnome-multi-term, quadkonsole, atď., ktoré sa zameriavajú na usporiadanie terminálov do mriežok (karty sú bežná metóda, ktorú Terminator taktiež podporuje).

+

Gücünü kullanıcısından alan Uçbirim hizalama aracı. Gnome-multi-term, Quadkonsole ve daha nicelerinden ilham alınarak tasarlandı. Odak noktası Uçbirimleri ızgaraya göre oturtmak.(Ayrıca sekmeler Terminator'ün desteklediği en yaygın varsayılan yöntemdir)

+

一个用来管理终端的高级用户工具。它的灵感来自于gnome-multi-term,quadkonsole等程序。它致力于用格子来管理终端(最普遍的方法是用标签页,Terminator也支持)。

+

Much of the behavior of Terminator is based on GNOME Terminal, and we are adding more features from that as time goes by, but we also want to extend out in different directions with useful features for sysadmins and other users.

+

Meget af Terminators opførsel er baseret på GNOME Terminal, og vi tilføjer flere funktioner fra denne som tiden går, men vi vil også gerne udvide i andre retninger med brugbare funktioner for systemadministratorer og andre brugere.

+

Viel des Verhaltens von Terminator basiert auf GNOME-Terminal und wir fügen mit der Zeit ständig neue Funktionen hinzu, aber wir wollen uns auch in andere Richtungen weiterentwickeln, mit nützlichen Funktionen für Systemadministratoren und andere Benutzergruppen.

+

Much of the behaviour of Terminator is based on GNOME Terminal, and we are adding more features from that as time goes by, but we also want to extend out in different directions with useful features for sysadmins and other users.

+

Mucho del comportamiento de Terminator está basado en GNOME Terminal, y estamos agregando más funcionalidades a medida que el tiempo pasa, pero también queremos extenderlo en diferentes direcciones con funcionalidades útiles para administradores de sistema y otros usuarios.

+

Le fonctionnement de Terminator est principalement basé sur celui de GNOME Terminal. Nous lui ajoutons des fonctionnalités au fur et à mesure, mais nous voulons aussi les étendre dans différentes directions, avec des fonctionnalités utiles pour les administrateurs système et les autres utilisateurs

+

Much of the behavior of Terminator is based on GNOME Terminal, and we are adding more features from that as time goes by, but we also want to extend out in different directions with useful features for sysadmins and other users.

+

Kebanyakan kelakuan Terminal adalah berdasarkan dari Terminal GNOME, dan kami telah menambah lagi beberapa fitur. Selain itu, kami juga melanjutkan arah yang berlainan dan berguna untuk pentadbir sistem dan juga pengguna biasa.

+

Een groot gedeelte van het gedrag van Terminator is gebaseerd op GNOME Terminal. We voegen langzamerhand meer functies toe uit die app, maar we zijn ook van plan om een andere richting op te gaan zodat we functies kunnen toevoegen die nuttig zijn voor systeemadministrators en andere gebruikers.

+

O comportamento do Terminator é baseado no Terminal GNOME, e nós adicionamos mais recursos ao passar do tempo, mas também queremos estender para áreas distintas, oferecendo recursos uteis para administradores de sistema e outros usuários.

+

Многое в работе Terminator основано на терминале GNOME, и мы постепенно добавляем больше функций того терминала, но мы также хотим расширять спектр возможностей программы, добавляя нужные системным администраторам и другим пользователям функции.

+

Mnohé z funkcií aplikácie Terminator vychádzajú z GNOME Terminal a postupne z neho pridávanie ďalšie funkcie, ale tiež chceme Terminator rozširovať v rozličných smeroch užitočnými vlastnosťami pre správcov systémov a ďalších používateľov.

+

Terminator的大部分行为基于GNOME Terminal,我们还在从中集成更多特性。但我们同时也希望向扩展更多不同方面的实用特性从而服务于系统管理员和其他用户。

+

Some highlights:

+

Nogle højdepunkter:

+

Einige Höhepunkte:

+

Some highlights:

+

Algunos destacados:

+

برخی از نکات برجسته

+

Quelques points forts :

+

כמה דגשים

+

Alicun evidentias:

+

Some highlights:

+

Alcune evidenze:

+

ചില പ്രത്യേകതകൾ :

+

Beberapa sorotan:

+

Enkele hoogtepunten:

+

Qualques punts fòrts :

+

Kilka głównych funkcji:

+

Alguns destaques:

+

Alguns destaques:

+

Ключевые особенности:

+

Zopár schopností:

+

Bazı özellikler:

+

一些亮点:

+