Revert "drsuapi_dissect_element_DsGetNCChangesCtr6TS_ctr6 dissect_krb5_PAC_NDRHEADERBLOB"
[wireshark-sm.git] / tools / asn2deb
blob7f0bbc78ef82bc78b1dd2bef76dbe91f0d830b5e
1 #!/usr/bin/env python3
3 # asn2deb - quick hack by W. Borgert <debacle@debian.org> to create
4 # Debian GNU/Linux packages from ASN.1 files for Wireshark.
5 # Copyright 2004, W. Borgert
7 # ASN.1 module for Wireshark, use of esnacc type table:
8 # Copyright 2003, Matthijs Melchior <matthijs.melchior@xs4all.nl>
10 # Wireshark - Network traffic analyzer
11 # By Gerald Combs <gerald@wireshark.com>
12 # Copyright 1998 Gerald Combs
14 # SPDX-License-Identifier: GPL-2.0-or-later
16 import getopt, os, string, sys, time
18 scriptinfo = """asn2deb version 2004-02-17
19 Copyright 2004, W. Borgert
20 Free software, released under the terms of the GPL."""
22 options = {'asn':      None,
23            'dbopts':   "",
24            'email':    "invalid@invalid.invalid",
25            'help':     0,
26            'name':     "No Name",
27            'preserve': 0,
28            'version':  0}
30 def create_file(filename, content, mode = None):
31     """Create a file with given content."""
32     global options
33     if options['preserve'] and os.path.isfile(filename):
34         return
35     f = open(filename, 'w')
36     f.write(content)
37     f.close()
38     if mode:
39         os.chmod(filename, mode)
41 def create_files(version, deb, email, asn, name, iso, rfc):
42     """Create all files for the .deb build process."""
43     base = asn.lower()[:-5]
45     if not os.path.isdir("packaging/debian"):
46         os.mkdir("packaging/debian")
48     create_file("packaging/debian/rules", """#!/usr/bin/make -f
50 include /usr/share/cdbs/1/rules/debhelper.mk
51 include /usr/share/cdbs/1/class/autotools.mk
53 PREFIX=`pwd`/packaging/debian/wireshark-asn1-%s
55 binary-post-install/wireshark-asn1-%s::
56         rm -f $(PREFIX)/usr/lib/wireshark/plugins/%s/*.a
57 """ % (base, base, version), 0o755)
59     create_file("packaging/debian/control", """Source: wireshark-asn1-%s
60 Section: net
61 Priority: optional
62 Maintainer: %s <%s>
63 Standards-Version: 3.6.1.0
64 Build-Depends: esnacc, autotools-dev, debhelper, cdbs
66 Package: wireshark-asn1-%s
67 Architecture: all
68 Depends: wireshark (= %s)
69 Description: ASN.1/BER dissector for %s
70  This package provides a type table for decoding BER (Basic Encoding
71  Rules) data over TCP or UDP, described by an ASN.1 (Abstract Syntax
72  Notation 1) file '%s.asn1'.
73 """ % (base, name, email, base, deb, base, base))
75     create_file("packaging/debian/changelog",
76             """wireshark-asn1-%s (0.0.1-1) unstable; urgency=low
78   * Automatically created package.
80  -- %s <%s>  %s
81 """ % (base, name, email, rfc + "\n    (" + iso + ")"))
83     create_file("packaging/debian/copyright",
84             """This package has been created automatically be asn2deb on
85 %s for Debian GNU/Linux.
87 Wireshark: https://www.wireshark.com/
89 Copyright:
91 GPL, as evidenced by existence of GPL license file \"COPYING\".
92 (the GNU GPL may be viewed on Debian systems in
93 /usr/share/common-licenses/GPL)
94 """ % (iso))
96 def get_wrs_version():
97     """Detect version of wireshark-dev package."""
98     deb = os.popen(
99         "dpkg-query -W --showformat='${Version}' wireshark-dev").read()
100     debv = string.find(deb, "-")
101     if debv == -1: debv = len(deb)
102     version = deb[string.find(deb, ":")+1:debv]
103     return version, deb
105 def get_time():
106     """Detect current time and return ISO and RFC time string."""
107     currenttime = time.gmtime()
108     return time.strftime("%Y-%m-%d %H:%M:%S +0000", currenttime), \
109            time.strftime("%a, %d %b %Y %H:%M:%S +0000", currenttime)
111 def main():
112     global options
113     process_opts(sys.argv)
114     iso, rfc = get_time()
115     version, deb = get_wrs_version()
116     create_files(version, deb,
117                  options['email'], options['asn'], options['name'],
118                  iso, rfc)
119     os.system("dpkg-buildpackage " + options['dbopts'])
121 def process_opts(argv):
122     """Process command line options."""
123     global options
124     try:
125         opts, args = getopt.getopt(argv[1:], "a:d:e:hn:pv",
126                                    ["asn=",
127                                     "dbopts=",
128                                     "email=",
129                                     "help",
130                                     "name=",
131                                     "preserve",
132                                     "version"])
133     except getopt.GetoptError:
134         usage(argv[0])
135         sys.exit(1)
136     for o, a in opts:
137         if o in ("-a", "--asn"):
138             options['asn'] = a
139         if o in ("-d", "--dbopts"):
140             options['dbopts'] = a
141         if o in ("-e", "--email"):
142             options['email'] = a
143         if o in ("-h", "--help"):
144             options['help'] = 1
145         if o in ("-n", "--name"):
146             options['name'] = a
147         if o in ("-p", "--preserve"):
148             options['preserve'] = 1
149         if o in ("-v", "--version"):
150             options['version'] = 1
151     if options['help']:
152         usage(argv[0])
153         sys.exit(0)
154     if options['version']:
155         print(scriptinfo)
156         sys.exit(0)
157     if not options['asn']:
158         print("mandatory ASN.1 file parameter missing")
159         sys.exit(1)
160     if not os.access(options['asn'], os.R_OK):
161         print("ASN.1 file not accessible")
162         sys.exit(1)
164 def usage(name):
165     """Print usage help."""
166     print("Usage: " + name + " <parameters>\n" + \
167           "Parameters are\n" + \
168           "  --asn      -a asn1file, ASN.1 file to use (mandatory)\n" + \
169           "  --dbopts   -d opts,     options for dpkg-buildpackage\n" + \
170           "  --email    -e address,  use e-mail address\n" + \
171           "  --help     -h,          print help and exit\n" + \
172           "  --name     -n name,     use user name\n" + \
173           "  --preserve -p,          do not overwrite files\n" + \
174           "  --version  -v,          print version and exit\n" + \
175           "Example:\n" + \
176           name + " -e me@foo.net -a bar.asn1 -n \"My Name\" " + \
177           "-d \"-rfakeroot -uc -us\"")
178 if __name__ == '__main__':
179     main()