mirror of
https://github.com/mitmproxy/mitmproxy.git
synced 2024-12-14 08:38:32 +00:00
Add -D to daemonize pathod.
This commit is contained in:
parent
51d10f53c1
commit
ea2ca98bea
151
pathod
151
pathod
@ -1,65 +1,35 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import argparse, sys, logging, logging.handlers
|
import argparse, sys, logging, logging.handlers
|
||||||
|
import os
|
||||||
from libpathod import pathod, utils, version, rparse
|
from libpathod import pathod, utils, version, rparse
|
||||||
|
|
||||||
if __name__ == "__main__":
|
def daemonize (stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
|
||||||
parser = argparse.ArgumentParser(description='A pathological HTTP/S daemon.')
|
try:
|
||||||
parser.add_argument("-p", dest='port', default=9999, type=int, help='Port. Specify 0 to pick an arbitrary empty port.')
|
pid = os.fork()
|
||||||
parser.add_argument("-l", dest='address', default="127.0.0.1", type=str, help='Listening address.')
|
if pid > 0:
|
||||||
parser.add_argument(
|
sys.exit(0)
|
||||||
"-a", dest='anchors', default=[], type=str, action="append", metavar="ANCHOR",
|
except OSError, e:
|
||||||
help='Add an anchor. Specified as a string with the form pattern=pagespec'
|
sys.stderr.write ("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror) )
|
||||||
)
|
sys.exit(1)
|
||||||
parser.add_argument(
|
os.chdir("/")
|
||||||
"-c", dest='craftanchor', default="/p/", type=str,
|
os.umask(0)
|
||||||
help='Anchorpoint for URL crafting commands.'
|
os.setsid()
|
||||||
)
|
try:
|
||||||
parser.add_argument(
|
pid = os.fork()
|
||||||
"-d", dest='staticdir', default=None, type=str,
|
if pid > 0:
|
||||||
help='Directory for static files.'
|
sys.exit(0)
|
||||||
)
|
except OSError, e:
|
||||||
parser.add_argument(
|
sys.stderr.write ("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror) )
|
||||||
"-f", dest='logfile', default=None, type=str,
|
sys.exit(1)
|
||||||
help='Log file.'
|
si = open(stdin, 'r')
|
||||||
)
|
so = open(stdout, 'a+')
|
||||||
parser.add_argument(
|
se = open(stderr, 'a+', 0)
|
||||||
"--debug", dest='debug', default=False, action="store_true",
|
os.dup2(si.fileno(), sys.stdin.fileno())
|
||||||
help='Enable debug output.'
|
os.dup2(so.fileno(), sys.stdout.fileno())
|
||||||
)
|
os.dup2(se.fileno(), sys.stderr.fileno())
|
||||||
parser.add_argument(
|
|
||||||
"-s", dest='ssl', default=False, action="store_true",
|
|
||||||
help='Serve with SSL.'
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--limit-size", dest='sizelimit', default=None, type=str,
|
|
||||||
help='Size limit of served responses. Understands size suffixes, i.e. 100k.'
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--noapi", dest='noapi', default=False, action="store_true",
|
|
||||||
help='Disable API.'
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--nohang", dest='nohang', default=False, action="store_true",
|
|
||||||
help='Disable pauses during crafted response generation.'
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--noweb", dest='noweb', default=False, action="store_true",
|
|
||||||
help='Disable both web interface and API.'
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--nocraft", dest='nocraft', default=False, action="store_true",
|
|
||||||
help='Disable response crafting. If anchors are specified, they still work.'
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--keyfile", dest='ssl_keyfile', default=None, type=str,
|
|
||||||
help='SSL key file. If not specified, a default key is used.'
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--certfile", dest='ssl_certfile', default=None, type=str,
|
|
||||||
help='SSL cert file. If not specified, a default cert is used.'
|
|
||||||
)
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
|
|
||||||
|
def main(parser, args):
|
||||||
sl = [args.ssl_keyfile, args.ssl_certfile]
|
sl = [args.ssl_keyfile, args.ssl_certfile]
|
||||||
if any(sl) and not all(sl):
|
if any(sl) and not all(sl):
|
||||||
parser.error("Both --certfile and --keyfile must be specified.")
|
parser.error("Both --certfile and --keyfile must be specified.")
|
||||||
@ -125,3 +95,70 @@ if __name__ == "__main__":
|
|||||||
pd.serve_forever()
|
pd.serve_forever()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(description='A pathological HTTP/S daemon.')
|
||||||
|
parser.add_argument("-p", dest='port', default=9999, type=int, help='Port. Specify 0 to pick an arbitrary empty port.')
|
||||||
|
parser.add_argument("-l", dest='address', default="127.0.0.1", type=str, help='Listening address.')
|
||||||
|
parser.add_argument(
|
||||||
|
"-a", dest='anchors', default=[], type=str, action="append", metavar="ANCHOR",
|
||||||
|
help='Add an anchor. Specified as a string with the form pattern=pagespec'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-c", dest='craftanchor', default="/p/", type=str,
|
||||||
|
help='Anchorpoint for URL crafting commands.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-d", dest='staticdir', default=None, type=str,
|
||||||
|
help='Directory for static files.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-D", dest='daemonize', default=False, action="store_true",
|
||||||
|
help='Daemonize.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-f", dest='logfile', default=None, type=str,
|
||||||
|
help='Log file.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--debug", dest='debug', default=False, action="store_true",
|
||||||
|
help='Enable debug output.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-s", dest='ssl', default=False, action="store_true",
|
||||||
|
help='Serve with SSL.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--limit-size", dest='sizelimit', default=None, type=str,
|
||||||
|
help='Size limit of served responses. Understands size suffixes, i.e. 100k.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--noapi", dest='noapi', default=False, action="store_true",
|
||||||
|
help='Disable API.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--nohang", dest='nohang', default=False, action="store_true",
|
||||||
|
help='Disable pauses during crafted response generation.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--noweb", dest='noweb', default=False, action="store_true",
|
||||||
|
help='Disable both web interface and API.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--nocraft", dest='nocraft', default=False, action="store_true",
|
||||||
|
help='Disable response crafting. If anchors are specified, they still work.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--keyfile", dest='ssl_keyfile', default=None, type=str,
|
||||||
|
help='SSL key file. If not specified, a default key is used.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--certfile", dest='ssl_certfile', default=None, type=str,
|
||||||
|
help='SSL cert file. If not specified, a default cert is used.'
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
if args.daemonize:
|
||||||
|
daemonize()
|
||||||
|
main(parser, args)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user