wireshark/tools/asn2deb

180 lines
5.6 KiB
Python
Executable File

#!/usr/bin/env python3
# asn2deb - quick hack by W. Borgert <debacle@debian.org> to create
# Debian GNU/Linux packages from ASN.1 files for Wireshark.
# Copyright 2004, W. Borgert
# ASN.1 module for Wireshark, use of snacc type table:
# Copyright 2003, Matthijs Melchior <matthijs.melchior@xs4all.nl>
#
# Wireshark - Network traffic analyzer
# By Gerald Combs <gerald@wireshark.com>
# Copyright 1998 Gerald Combs
# SPDX-License-Identifier: GPL-2.0-or-later
import getopt, os, string, sys, time
scriptinfo = """asn2deb version 2004-02-17
Copyright 2004, W. Borgert
Free software, released under the terms of the GPL."""
options = {'asn': None,
'dbopts': "",
'email': "invalid@invalid.invalid",
'help': 0,
'name': "No Name",
'preserve': 0,
'version': 0}
def create_file(filename, content, mode = None):
"""Create a file with given content."""
global options
if options['preserve'] and os.path.isfile(filename):
return
f = open(filename, 'w')
f.write(content)
f.close()
if mode:
os.chmod(filename, mode)
def create_files(version, deb, email, asn, name, iso, rfc):
"""Create all files for the .deb build process."""
base = asn.lower()[:-5]
if not os.path.isdir("debian"):
os.mkdir("debian")
create_file("debian/rules", """#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
PREFIX=`pwd`/debian/wireshark-asn1-%s
binary-post-install/wireshark-asn1-%s::
rm -f $(PREFIX)/usr/lib/wireshark/plugins/%s/*.a
""" % (base, base, version), 0o755)
create_file("debian/control", """Source: wireshark-asn1-%s
Section: net
Priority: optional
Maintainer: %s <%s>
Standards-Version: 3.6.1.0
Build-Depends: snacc, autotools-dev, debhelper, cdbs
Package: wireshark-asn1-%s
Architecture: all
Depends: wireshark (= %s)
Description: ASN.1/BER dissector for %s
This package provides a type table for decoding BER (Basic Encoding
Rules) data over TCP or UDP, described by an ASN.1 (Abstract Syntax
Notation 1) file '%s.asn1'.
""" % (base, name, email, base, deb, base, base))
create_file("debian/changelog",
"""wireshark-asn1-%s (0.0.1-1) unstable; urgency=low
* Automatically created package.
-- %s <%s> %s
""" % (base, name, email, rfc + "\n (" + iso + ")"))
create_file("debian/copyright",
"""This package has been created automatically be asn2deb on
%s for Debian GNU/Linux.
Wireshark: https://www.wireshark.com/
Copyright:
GPL, as evidenced by existence of GPL license file \"COPYING\".
(the GNU GPL may be viewed on Debian systems in
/usr/share/common-licenses/GPL)
""" % (iso))
def get_wrs_version():
"""Detect version of wireshark-dev package."""
deb = os.popen(
"dpkg-query -W --showformat='${Version}' wireshark-dev").read()
debv = string.find(deb, "-")
if debv == -1: debv = len(deb)
version = deb[string.find(deb, ":")+1:debv]
return version, deb
def get_time():
"""Detect current time and return ISO and RFC time string."""
currenttime = time.gmtime()
return time.strftime("%Y-%m-%d %H:%M:%S +0000", currenttime), \
time.strftime("%a, %d %b %Y %H:%M:%S +0000", currenttime)
def main():
global options
process_opts(sys.argv)
iso, rfc = get_time()
version, deb = get_wrs_version()
create_files(version, deb,
options['email'], options['asn'], options['name'],
iso, rfc)
os.system("dpkg-buildpackage " + options['dbopts'])
def process_opts(argv):
"""Process command line options."""
global options
try:
opts, args = getopt.getopt(argv[1:], "a:d:e:hn:pv",
["asn=",
"dbopts=",
"email=",
"help",
"name=",
"preserve",
"version"])
except getopt.GetoptError:
usage(argv[0])
sys.exit(1)
for o, a in opts:
if o in ("-a", "--asn"):
options['asn'] = a
if o in ("-d", "--dbopts"):
options['dbopts'] = a
if o in ("-e", "--email"):
options['email'] = a
if o in ("-h", "--help"):
options['help'] = 1
if o in ("-n", "--name"):
options['name'] = a
if o in ("-p", "--preserve"):
options['preserve'] = 1
if o in ("-v", "--version"):
options['version'] = 1
if options['help']:
usage(argv[0])
sys.exit(0)
if options['version']:
print(scriptinfo)
sys.exit(0)
if not options['asn']:
print("mandatory ASN.1 file parameter missing")
sys.exit(1)
if not os.access(options['asn'], os.R_OK):
print("ASN.1 file not accessible")
sys.exit(1)
def usage(name):
"""Print usage help."""
print("Usage: " + name + " <parameters>\n" + \
"Parameters are\n" + \
" --asn -a asn1file, ASN.1 file to use (mandatory)\n" + \
" --dbopts -d opts, options for dpkg-buildpackage\n" + \
" --email -e address, use e-mail address\n" + \
" --help -h, print help and exit\n" + \
" --name -n name, use user name\n" + \
" --preserve -p, do not overwrite files\n" + \
" --version -v, print version and exit\n" + \
"Example:\n" + \
name + " -e me@foo.net -a bar.asn1 -n \"My Name\" " + \
"-d \"-rfakeroot -uc -us\"")
if __name__ == '__main__':
main()