Use /usr/bin/env python for virtualenv (#1025)

This helps with virtualenv although it can open
up another security hole if you end up using an
unexpected python interpreter.

Overall it seems to make sense to err on the side
of usability but it's good to be aware of security.

However, for the remaining utility scripts that require
python 2, we explicitly note this with #!/usr/bin/python2.
This commit is contained in:
lantz
2021-02-05 07:42:50 -08:00
committed by GitHub
parent a882d68a5f
commit f0c726a42f
39 changed files with 53 additions and 57 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Mininet runner Mininet runner
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
"This example doesn't use OpenFlow, but attempts to run sshd in a namespace." "This example doesn't use OpenFlow, but attempts to run sshd in a namespace."
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
bind.py: Bind mount example bind.py: Bind mount example
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
cluster.py: prototyping/experimentation for distributed Mininet, cluster.py: prototyping/experimentation for distributed Mininet,
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
"CLI for Mininet Cluster Edition prototype demo" "CLI for Mininet Cluster Edition prototype demo"
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
"clusterdemo.py: demo of Mininet Cluster Edition prototype" "clusterdemo.py: demo of Mininet Cluster Edition prototype"
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
"clusterperf.py compare the maximum throughput between SSH and GRE tunnels" "clusterperf.py compare the maximum throughput between SSH and GRE tunnels"
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
consoles.py: bring up a bunch of miniature consoles on a virtual network consoles.py: bring up a bunch of miniature consoles on a virtual network
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Create a network where different switches are connected to Create a network where different switches are connected to
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
This example creates a multi-controller network from semi-scratch by This example creates a multi-controller network from semi-scratch by
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
controlnet.py: Mininet with a custom control network controlnet.py: Mininet with a custom control network
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
cpu.py: test iperf bandwidth for varying cpu limits cpu.py: test iperf bandwidth for varying cpu limits
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
This example shows how to create an empty Mininet object This example shows how to create an empty Mininet object
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
This example shows how to add an interface (for example a real This example shows how to add an interface (for example a real
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
''' '''
example of using various TCIntf options. example of using various TCIntf options.
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
limit.py: example of using link and CPU limits limit.py: example of using link and CPU limits
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Test bandwidth (using iperf) on linear networks of varying size, Test bandwidth (using iperf) on linear networks of varying size,
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
linuxrouter.py: Example network with Linux IP router linuxrouter.py: Example network with Linux IP router
+1 -1
View File
@@ -1704,7 +1704,7 @@ class MiniEdit( Frame ):
# debug( "Now saving under %s\n" % fileName ) # debug( "Now saving under %s\n" % fileName )
f = open(fileName, 'wb') f = open(fileName, 'wb')
f.write("#!/usr/bin/python\n") f.write("#!/usr/bin/env python\n")
f.write("\n") f.write("\n")
f.write("from mininet.net import Mininet\n") f.write("from mininet.net import Mininet\n")
f.write("from mininet.node import Controller, RemoteController, OVSController\n") f.write("from mininet.node import Controller, RemoteController, OVSController\n")
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Simple example of Mobility with Mininet Simple example of Mobility with Mininet
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
This is a simple example that demonstrates multiple links This is a simple example that demonstrates multiple links
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
multiping.py: monitor multiple sets of hosts using ping multiping.py: monitor multiple sets of hosts using ping
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Simple example of sending output to multiple files and Simple example of sending output to multiple files and
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
This example shows how to create a network and run multiple tests. This example shows how to create a network and run multiple tests.
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Example to create a Mininet topology and connect it to the internet via NAT Example to create a Mininet topology and connect it to the internet via NAT
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
natnet.py: Example network with NATs natnet.py: Example network with NATs
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Create a network with 5 hosts, numbered 1-4 and 9. Create a network with 5 hosts, numbered 1-4 and 9.
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
This example monitors a number of hosts using host.popen() and This example monitors a number of hosts using host.popen() and
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
"Monitor multiple hosts using popen()/pmonitor()" "Monitor multiple hosts using popen()/pmonitor()"
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Build a simple network from scratch, using mininet primitives. Build a simple network from scratch, using mininet primitives.
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Build a simple network from scratch, using mininet primitives. Build a simple network from scratch, using mininet primitives.
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Simple example of setting network and CPU parameters Simple example of setting network and CPU parameters
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Create a network and start sshd(8) on each host. Create a network and start sshd(8) on each host.
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
""" """
Create a 1024-host network, and run the CLI on it. Create a 1024-host network, and run the CLI on it.
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
"Create a 64-node tree network, and test connectivity using ping." "Create a 64-node tree network, and test connectivity using ping."
+1 -5
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/python2
""" """
Convert simple documentation to epydoc/pydoctor-compatible markup Convert simple documentation to epydoc/pydoctor-compatible markup
@@ -83,7 +83,3 @@ if __name__ == '__main__':
infile.close() infile.close()
os.close( outfid ) os.close( outfid )
call( [ 'doxypy', outname ] ) call( [ 'doxypy', outname ] )
+15 -15
View File
@@ -1,7 +1,7 @@
#!/usr/bin/python #!/usr/bin/python2
""" """
Translate from PEP8 Python style to Mininet (i.e. Arista-like) Translate from PEP8 Python style to Mininet (i.e. Arista-like)
Python style Python style
usage: unpep8 < old.py > new.py usage: unpep8 < old.py > new.py
@@ -51,7 +51,7 @@ def fixUnderscoreTriplet( match ):
def reinstateCapWords( text ): def reinstateCapWords( text ):
underscoreTriplet = re.compile( r'[A-Za-z0-9]_[A-Za-z0-9]' ) underscoreTriplet = re.compile( r'[A-Za-z0-9]_[A-Za-z0-9]' )
return underscoreTriplet.sub( fixUnderscoreTriplet, text ) return underscoreTriplet.sub( fixUnderscoreTriplet, text )
def replaceTripleApostrophes( text ): def replaceTripleApostrophes( text ):
"Replace triple apostrophes with triple quotes." "Replace triple apostrophes with triple quotes."
return text.replace( "'''", '"""') return text.replace( "'''", '"""')
@@ -60,7 +60,7 @@ def simplifyTripleQuotes( text ):
"Fix single-line doc strings." "Fix single-line doc strings."
r = re.compile( r'"""([^\"\n]+)"""' ) r = re.compile( r'"""([^\"\n]+)"""' )
return r.sub( r'"\1"', text ) return r.sub( r'"\1"', text )
def insertExtraSpaces( text ): def insertExtraSpaces( text ):
"Insert extra spaces inside of parentheses and brackets/curly braces." "Insert extra spaces inside of parentheses and brackets/curly braces."
lparen = re.compile( r'\((?![\s\)])' ) lparen = re.compile( r'\((?![\s\)])' )
@@ -76,9 +76,9 @@ def insertExtraSpaces( text ):
lcurly = re.compile( r'\{(?![\s\}])' ) lcurly = re.compile( r'\{(?![\s\}])' )
text = lcurly.sub( r'{ ', text ) text = lcurly.sub( r'{ ', text )
rcurly = re.compile( r'([^\s\{])(?=\})' ) rcurly = re.compile( r'([^\s\{])(?=\})' )
text = rcurly.sub( r'\1 ', text) text = rcurly.sub( r'\1 ', text)
return text return text
def fixDoxygen( text ): def fixDoxygen( text ):
"""Translate @param foo to foo:, @return bar to returns: bar, and """Translate @param foo to foo:, @return bar to returns: bar, and
@author me to author: me""" @author me to author: me"""
@@ -96,11 +96,11 @@ def removeCommentFirstBlankLine( text ):
"Remove annoying blank lines after first line in comments." "Remove annoying blank lines after first line in comments."
line = re.compile( r'("""[^\n]*\n)\s*\n', re.MULTILINE ) line = re.compile( r'("""[^\n]*\n)\s*\n', re.MULTILINE )
return line.sub( r'\1', text ) return line.sub( r'\1', text )
def fixArgs( match, kwarg = re.compile( r'(\w+) = ' ) ): def fixArgs( match, kwarg = re.compile( r'(\w+) = ' ) ):
"Replace foo = bar with foo=bar." "Replace foo = bar with foo=bar."
return kwarg.sub( r'\1=', match.group() ) return kwarg.sub( r'\1=', match.group() )
def fixKeywords( text ): def fixKeywords( text ):
"Change keyword argumentsfrom foo = bar to foo=bar." "Change keyword argumentsfrom foo = bar to foo=bar."
args = re.compile( r'\(([^\)]+)\)', re.MULTILINE ) args = re.compile( r'\(([^\)]+)\)', re.MULTILINE )
@@ -115,7 +115,7 @@ def fixKeywords( text ):
def lineIter( text ): def lineIter( text ):
"Simple iterator over lines in text." "Simple iterator over lines in text."
for line in text.splitlines(): yield line for line in text.splitlines(): yield line
def stringIter( strList ): def stringIter( strList ):
"Yield strings in strList." "Yield strings in strList."
for s in strList: yield s for s in strList: yield s
@@ -134,7 +134,7 @@ def restoreRegex( regex, old, new ):
# This is a cheap hack, and it may not work 100%, since # This is a cheap hack, and it may not work 100%, since
# it doesn't handle multiline strings. # it doesn't handle multiline strings.
# However, it should be mostly harmless... # However, it should be mostly harmless...
def restoreStrings( oldText, newText ): def restoreStrings( oldText, newText ):
"Restore strings from oldText into newText, returning result." "Restore strings from oldText into newText, returning result."
oldLines, newLines = lineIter( oldText ), lineIter( newText ) oldLines, newLines = lineIter( oldText ), lineIter( newText )
@@ -149,13 +149,13 @@ def restoreStrings( oldText, newText ):
newLine = restoreRegex( tickStrings, oldLine, newLine ) newLine = restoreRegex( tickStrings, oldLine, newLine )
result += newLine + '\n' result += newLine + '\n'
return result return result
# This might be slightly controversial, since it uses # This might be slightly controversial, since it uses
# three spaces to line up multiline comments. However, # three spaces to line up multiline comments. However,
# I much prefer it. Limitations: if you have deeper # I much prefer it. Limitations: if you have deeper
# indents in comments, they will be eliminated. ;-( # indents in comments, they will be eliminated. ;-(
def fixComment( match, def fixComment( match,
indentExp=re.compile( r'\n([ ]*)(?=[^/s])', re.MULTILINE ), indentExp=re.compile( r'\n([ ]*)(?=[^/s])', re.MULTILINE ),
trailingQuotes=re.compile( r'\s+"""' ) ): trailingQuotes=re.compile( r'\s+"""' ) ):
"Re-indent comment, and join trailing quotes." "Re-indent comment, and join trailing quotes."
@@ -166,17 +166,17 @@ def fixComment( match,
if len( originalIndent ) is not 0: indent += ' ' if len( originalIndent ) is not 0: indent += ' '
comment = indentExp.sub( indent, comment ) comment = indentExp.sub( indent, comment )
return originalIndent + trailingQuotes.sub( '"""', comment ) return originalIndent + trailingQuotes.sub( '"""', comment )
def fixCommentIndents( text ): def fixCommentIndents( text ):
"Fix multiline comment indentation." "Fix multiline comment indentation."
comments = re.compile( r'^([ ]*)("""[^"]*""")$', re.MULTILINE ) comments = re.compile( r'^([ ]*)("""[^"]*""")$', re.MULTILINE )
return comments.sub( fixComment, text ) return comments.sub( fixComment, text )
def removeBogusLinefeeds( text ): def removeBogusLinefeeds( text ):
"Remove extra linefeeds at the end of single-line comments." "Remove extra linefeeds at the end of single-line comments."
bogusLfs = re.compile( r'"([^"\n]*)\n"', re.MULTILINE ) bogusLfs = re.compile( r'"([^"\n]*)\n"', re.MULTILINE )
return bogusLfs.sub( '"\1"', text) return bogusLfs.sub( '"\1"', text)
def convertFromPep8( program ): def convertFromPep8( program ):
oldProgram = program oldProgram = program
# Program text transforms # Program text transforms
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
from subprocess import check_output as co from subprocess import check_output as co
from sys import exit, version_info from sys import exit, version_info
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python2.7 #!/usr/bin/python2
""" """
build.py: build a Mininet VM build.py: build a Mininet VM