o _#,@sdZdZdZddlZddlZddlZddlZddlmZmZddl m Z ddl m Z m Z mZmZe d Zd d Zd Zd ZdZGdddZejZGdddeZGdddeZdS)zFail2Ban Developersz^Copyright (c) 2004-2008 Cyril Jaquier, 2012-2014 Yaroslav Halchenko, 2014-2016 Serg G. BresterGPLN)version normVersion)printFormatted) getLogger str2LogLevelgetVerbosityFormatBrokenPipeErrorfail2banc CsFzt|WdSttfy"}z |jdkrWYd}~dSd}~ww)N )printr IOErrorerrno)serA/usr/lib/python3/dist-packages/fail2ban/client/fail2bancmdline.pyoutput#s r)socketpidfile logtargetloglevel syslogsocketTc@seZdZddZddZeddZddZdd d Zd d Z ddZ ddZ dddZ e dddZe dddZe dddZdS)Fail2banCmdLinecCs$d|_|_d|_d|_|dS)NF)_argv_args _configurator cleanConfOnly resetConfselfrrr__init__4s  zFail2banCmdLine.__init__c Csdddddddtd|_dS)NFz /etc/fail2banT)asyncconfforce backgroundverboserrtimeout) MAX_WAITTIME_confr!rrrr :s zFail2banCmdLine.resetConfcCs8|jr|jSddlm}||_|j|jd|jS)Nr$) Configuratorr&)r configuratorr- setBaseDirr,)r"r-rrrr.Fs  zFail2banCmdLine.configuratorcCs |jD] }|j||j|<qdSN)__dict__)r"objorrr applyMembersRs zFail2banCmdLine.applyMembersFcCs"|s tdtdSttdS)N Fail2Ban v)rrr)r"shortrrr dispVersionVszFail2banCmdLine.dispVersioncCs@tj|jd}td|d|dsdndtdtdtdtd tdtd td td td tdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtd|dstdtd ttdtd!d"S)#z2 Prints Fail2Ban command line options and exits rzUsage: z [OPTIONS]serverz r5z5 reads log file that contains password failure reportz=and bans the corresponding IP addresses using firewall rules.zOptions:z3 -c, --conf configuration directoryz' -s, --socket socket pathz( -p, --pidfile pidfile pathzl --pname name of the process (main thread) to identify instance (default fail2ban-server)z) --loglevel logging levelz^ --logtarget logging target, use file-name or stdout, stderr, syslog or sysout.z --syslogsocket auto|z= -d dump configuration. For debuggingz[ --dp, --dump-pretty dump the configuration using more human readable representationz\ -t, --test test configuration (can be also specified with start parameters)z, -i interactive modez. -v increase verbosityz. -q decrease verbosityzN -x force execution of the server (remove socket file)z@ -b start server in background (default)z6 -f start server in foregroundzj --async start server in async mode (for internal usage only, don't read configuration)zn --timeout timeout to wait for the server (for internal usage only, don't read configuration)zG --str2sec convert time abbreviation format to secondsz5 -h, --help display this help messagezX -V, --version print the version (-V returns machine-readable short format)zCommand:z:Report bugs to https://github.com/fail2ban/fail2ban/issuesN)ospathbasenamerrendswithrr)r"callerrrr dispUsage\sD"  zFail2banCmdLine.dispUsagecCs|D]}|d}|dvr|d|jd<q|dvr |d|jd<q|dvr,|d|jd<q|d vr<|d kr6d nd |jd <q|dvrId |_d |jd<q|dkrW|jdd7<q|dkre|jdd8<q|dkrod |jd<q|dkryd |jd<q|dkrd |jd<q|dkrd|jd<q|dkrd |jd<q|dkrd dlm}||d|jd<q|d krd dlm}t||dd S|d!vr|d S|d"vr||d#kd S|d$r|d|j|d d%<qd%S)&z! Gets the command line options r)z-cz--confr$r&)z-sz--socketr)z-pz --pidfiler)-dz--dp --dump-prettyr@Trdump)z-tz--testtestz-vr)z-qz-xr'z-i interactivez-br(z-fFz--asyncr%z --timeout)MyTimer*z --str2sec)z-hz--help)-Vz --versionrFz--N) r,r server.mytimerE str2secondsrr?r7 startswith)r"optListoptr3rErrr__getCmdLineOptionssX         z#Fail2banCmdLine.__getCmdLineOptionsc Csd}zL|jdu}||_td|ddzd}gd}t|jdd||\}|_Wntjy=|YWdSw||}|durJ|WStd|j |j|rt r|j d}|dkrgt t j n'|dkrrt t jn|d kr}t t jn|d krt t jnt t jt tj}t|d} t | } || t|d} tD]"} |j | ddur| s|j|j} | | vr| | |j | <qtd |j d t|j d } td|j dt | |j dd}|j ddr&|r| \}}d}|dur|!||j dd knt"d|j dds&|WS|j ddrM|r9d}| \}}|s@t#dt$|jsMt"d|WSWdSt#yXt%y|}zt"d|f|d krqt&|WYd}~dSd}~ww)Nr$zUsing start params %szhc:s:p:xfbdtviqV)z loglevel=z logtarget=z syslogsocket=rCr%zconf=zpidfile=zpname=zsocket=ztimeout=zstr2sec=helprdprAFz conf: %r, args: %rr)rrzUsing socket file %srrz%Using pid file %s, [%s] logging to %srrTrBzEERROR: The configuration stream failed because of the invalid syntax.rCz ERROR: test configuration failedz$OK: configuration test is successfulz ERROR: %s)'rlogSysinfogetoptr GetoptErrorr?#_Fail2banCmdLine__getCmdLineOptionsdebugr, PRODUCTIONsetLevelloggingERRORWARNINGINFODEBUG HEAVYDEBUG StreamHandlersysstderrr Formatter setFormatter addHandler CONFIG_PARAMSgetr. readEarlygetEarlyOptionsr getLevelName readConfig dumpConfigrServerExecutionExceptionlen Exception exception)r"argvr)initialcmdOpts cmdLongOptsrJretlogoutfmt formatterr&r3llevreadcfgstreamrrrr initCmdLines "                zFail2banCmdLine.initCmdLineNc Csd}z,|j|j|jj||j|j d}|jj|jddd|j}W||fSt yL}zt d|d}WYd}~||fSd}~ww)N) ignoreWrongrBF)allow_no_fileszFailed during configuration: %s) r.ReloadreadAll getOptionsr,rconvertToProtocolregetConfigStreamrmrPerror)r"jailryrsrrrrris$     zFail2banCmdLine.readConfigcs8|rddlmfdd}nt}|D]}||qdS)Nrpformatcst|ddddS)Nir)widthindent)r)rrrr_output.sz+Fail2banCmdLine.dumpConfig.._outputT)pprintrr)cmdprettyrcrrrrj*s  zFail2banCmdLine.dumpConfigrc Cs|tjztjttdrtjrt|WdSt|WdSt t fy=}z |j dkr2WYd}~dSd}~ww)Nexitr ) r_r`closestdoutflushhasattrrr:_exitr rr)coderrrrr9s   zFail2banCmdLine._exitcCs"td|tt|dS)NzExit with code %s)rPrUrXshutdownrr)rrrrrHs zFail2banCmdLine.exit)Fr0)r)__name__ __module__ __qualname__r#r propertyr.r4r7r?rTrzri staticmethodrjrrrrrrr2s"  )/ d  rc@ eZdZdS) ExitExceptionNrrrrrrrrUrc@r)rkNrrrrrrkYrrk) __author__ __copyright__ __license__rRrXr:r_rrprotocolrhelpersrrr r rPrrdrVr+rrrmrrkrrrrs* "