mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 23:23:52 +01:00
IP Prüfung für XML-RPC begonnen. Prüft lediglich auf IP und noch keine Level
This commit is contained in:
221
doc/helper.html
Normal file
221
doc/helper.html
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<title>helper</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
</head>
|
||||||
|
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
|
||||||
|
<h1 style="background-color:#FFFFFF;color:#0000FF">
|
||||||
|
helper</h1>
|
||||||
|
<p>
|
||||||
|
Helperfunktionen fuer das gesamte RevPiPyLoad-System.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Global Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Classes</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IpAclManager">IpAclManager</a></td>
|
||||||
|
<td>Verwaltung fuer IP Adressen und deren ACL Level.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Functions</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#_ipmatch">_ipmatch</a></td>
|
||||||
|
<td>Prueft IP gegen ACL List und gibt ACL aus.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#_setuprt">_setuprt</a></td>
|
||||||
|
<td>Konfiguriert Programm fuer den RT-Scheduler.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#_zeroprocimg">_zeroprocimg</a></td>
|
||||||
|
<td>Setzt Prozessabbild auf NULL.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#refullmatch">refullmatch</a></td>
|
||||||
|
<td>re.fullmatch wegen alter python version aus wheezy nachgebaut.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="IpAclManager" ID="IpAclManager"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">IpAclManager</h2>
|
||||||
|
<p>
|
||||||
|
Verwaltung fuer IP Adressen und deren ACL Level.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Derived from</h3>
|
||||||
|
None
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>acl</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IpAclManager.__init__">IpAclManager</a></td>
|
||||||
|
<td>Init IpAclManager class.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IpAclManager.__get_acl">__get_acl</a></td>
|
||||||
|
<td>Getter fuer den rohen ACL-String.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IpAclManager.__refullmatch">__refullmatch</a></td>
|
||||||
|
<td>re.fullmatch wegen alter python version aus wheezy nachgebaut.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IpAclManager.__set_acl">__set_acl</a></td>
|
||||||
|
<td>Uebernimmt neue ACL-Liste fuer die Ausertung der Level.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IpAclManager.get_acllevel">get_acllevel</a></td>
|
||||||
|
<td>Prueft IP gegen ACL List und gibt ACL-Wert aus.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Static Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<a NAME="IpAclManager.__init__" ID="IpAclManager.__init__"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
IpAclManager (Constructor)</h3>
|
||||||
|
<b>IpAclManager</b>(<i>acl=None, minlevel=0, maxlevel=1</i>)
|
||||||
|
<p>
|
||||||
|
Init IpAclManager class.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>acl</i></dt>
|
||||||
|
<dd>
|
||||||
|
ACL Liste fuer Berechtigungen als <class 'str'>
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="IpAclManager.__get_acl" ID="IpAclManager.__get_acl"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
IpAclManager.__get_acl</h3>
|
||||||
|
<b>__get_acl</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Getter fuer den rohen ACL-String.
|
||||||
|
return ACLs als <class 'str'>
|
||||||
|
</p><a NAME="IpAclManager.__refullmatch" ID="IpAclManager.__refullmatch"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
IpAclManager.__refullmatch</h3>
|
||||||
|
<b>__refullmatch</b>(<i>regex, string</i>)
|
||||||
|
<p>
|
||||||
|
re.fullmatch wegen alter python version aus wheezy nachgebaut.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>regex</i></dt>
|
||||||
|
<dd>
|
||||||
|
RegEx Statement
|
||||||
|
</dd><dt><i>string</i></dt>
|
||||||
|
<dd>
|
||||||
|
Zeichenfolge gegen die getestet wird
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn komplett passt sonst False
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="IpAclManager.__set_acl" ID="IpAclManager.__set_acl"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
IpAclManager.__set_acl</h3>
|
||||||
|
<b>__set_acl</b>(<i>value</i>)
|
||||||
|
<p>
|
||||||
|
Uebernimmt neue ACL-Liste fuer die Ausertung der Level.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>value</i></dt>
|
||||||
|
<dd>
|
||||||
|
Neue ACL-Liste als <class 'str'>
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="IpAclManager.get_acllevel" ID="IpAclManager.get_acllevel"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
IpAclManager.get_acllevel</h3>
|
||||||
|
<b>get_acllevel</b>(<i>ipaddress</i>)
|
||||||
|
<p>
|
||||||
|
Prueft IP gegen ACL List und gibt ACL-Wert aus.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>ipaddress</i></dt>
|
||||||
|
<dd>
|
||||||
|
zum pruefen
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
int() ACL Wert oder -1 wenn nicht gefunden
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="_ipmatch" ID="_ipmatch"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">_ipmatch</h2>
|
||||||
|
<b>_ipmatch</b>(<i>ipaddress, dict_acl</i>)
|
||||||
|
<p>
|
||||||
|
Prueft IP gegen ACL List und gibt ACL aus.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>ipaddress</i></dt>
|
||||||
|
<dd>
|
||||||
|
zum pruefen
|
||||||
|
</dd><dt><i>dict_acl</i></dt>
|
||||||
|
<dd>
|
||||||
|
ACL Dict gegen die IP zu pruefen ist
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
int() ACL Wert oder -1 wenn nicht gefunden
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="_setuprt" ID="_setuprt"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">_setuprt</h2>
|
||||||
|
<b>_setuprt</b>(<i>pid, evt_exit</i>)
|
||||||
|
<p>
|
||||||
|
Konfiguriert Programm fuer den RT-Scheduler.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>pid</i></dt>
|
||||||
|
<dd>
|
||||||
|
PID, der angehoben werden soll
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
None
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="_zeroprocimg" ID="_zeroprocimg"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">_zeroprocimg</h2>
|
||||||
|
<b>_zeroprocimg</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Setzt Prozessabbild auf NULL.
|
||||||
|
</p>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="refullmatch" ID="refullmatch"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">refullmatch</h2>
|
||||||
|
<b>refullmatch</b>(<i>regex, string</i>)
|
||||||
|
<p>
|
||||||
|
re.fullmatch wegen alter python version aus wheezy nachgebaut.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>regex</i></dt>
|
||||||
|
<dd>
|
||||||
|
RegEx Statement
|
||||||
|
</dd><dt><i>string</i></dt>
|
||||||
|
<dd>
|
||||||
|
Zeichenfolge gegen die getestet wird
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn komplett passt sonst False
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr />
|
||||||
|
</body></html>
|
||||||
@@ -13,6 +13,9 @@ Table of contents</h1>
|
|||||||
Modules</h3>
|
Modules</h3>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="helper.html">helper</a></td>
|
||||||
|
<td>Helperfunktionen fuer das gesamte RevPiPyLoad-System.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="logsystem.html">logsystem</a></td>
|
<td><a style="color:#0000FF" href="logsystem.html">logsystem</a></td>
|
||||||
<td>Modul fuer die Verwaltung der Logdateien.</td>
|
<td>Modul fuer die Verwaltung der Logdateien.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -30,6 +33,9 @@ Modules</h3>
|
|||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="revpipyload.html">revpipyload</a></td>
|
<td><a style="color:#0000FF" href="revpipyload.html">revpipyload</a></td>
|
||||||
<td>Revolution Pi Python PLC Loader.</td>
|
<td>Revolution Pi Python PLC Loader.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="xrpcserver.html">xrpcserver</a></td>
|
||||||
|
<td>XML-RPC Server anpassungen fuer Absicherung.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body></html>
|
</body></html>
|
||||||
@@ -23,12 +23,6 @@ Classes</h3>
|
|||||||
Functions</h3>
|
Functions</h3>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a style="color:#0000FF" href="#_setuprt">_setuprt</a></td>
|
|
||||||
<td>Konfiguriert Programm fuer den RT-Scheduler.</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td><a style="color:#0000FF" href="#_zeroprocimg">_zeroprocimg</a></td>
|
|
||||||
<td>Setzt Prozessabbild auf NULL.</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td><a style="color:#0000FF" href="#cleanup">cleanup</a></td>
|
<td><a style="color:#0000FF" href="#cleanup">cleanup</a></td>
|
||||||
<td>Clean up program.</td>
|
<td>Clean up program.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -37,32 +31,6 @@ Functions</h3>
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<hr /><hr />
|
<hr /><hr />
|
||||||
<a NAME="_setuprt" ID="_setuprt"></a>
|
|
||||||
<h2 style="background-color:#FFFFFF;color:#0000FF">_setuprt</h2>
|
|
||||||
<b>_setuprt</b>(<i>pid, evt_exit</i>)
|
|
||||||
<p>
|
|
||||||
Konfiguriert Programm fuer den RT-Scheduler.
|
|
||||||
</p><dl>
|
|
||||||
<dt><i>pid</i></dt>
|
|
||||||
<dd>
|
|
||||||
PID, der angehoben werden soll
|
|
||||||
</dd>
|
|
||||||
</dl><dl>
|
|
||||||
<dt>Returns:</dt>
|
|
||||||
<dd>
|
|
||||||
None
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
|
||||||
<hr /><hr />
|
|
||||||
<a NAME="_zeroprocimg" ID="_zeroprocimg"></a>
|
|
||||||
<h2 style="background-color:#FFFFFF;color:#0000FF">_zeroprocimg</h2>
|
|
||||||
<b>_zeroprocimg</b>(<i></i>)
|
|
||||||
<p>
|
|
||||||
Setzt Prozessabbild auf NULL.
|
|
||||||
</p>
|
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
|
||||||
<hr /><hr />
|
|
||||||
<a NAME="cleanup" ID="cleanup"></a>
|
<a NAME="cleanup" ID="cleanup"></a>
|
||||||
<h2 style="background-color:#FFFFFF;color:#0000FF">cleanup</h2>
|
<h2 style="background-color:#FFFFFF;color:#0000FF">cleanup</h2>
|
||||||
<b>cleanup</b>(<i></i>)
|
<b>cleanup</b>(<i></i>)
|
||||||
|
|||||||
@@ -45,13 +45,7 @@ Classes</h3>
|
|||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Functions</h3>
|
Functions</h3>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr><td>None</td></tr>
|
||||||
<td><a style="color:#0000FF" href="#_ipmatch">_ipmatch</a></td>
|
|
||||||
<td>Prueft IP gegen ACL List und gibt ACL aus.</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td><a style="color:#0000FF" href="#refullmatch">refullmatch</a></td>
|
|
||||||
<td>re.fullmatch wegen alter python version aus wheezy nachgebaut.</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
</table>
|
||||||
<hr /><hr />
|
<hr /><hr />
|
||||||
<a NAME="RevPiPyLoad" ID="RevPiPyLoad"></a>
|
<a NAME="RevPiPyLoad" ID="RevPiPyLoad"></a>
|
||||||
@@ -505,47 +499,5 @@ Statuscode:
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
<hr /><hr />
|
|
||||||
<a NAME="_ipmatch" ID="_ipmatch"></a>
|
|
||||||
<h2 style="background-color:#FFFFFF;color:#0000FF">_ipmatch</h2>
|
|
||||||
<b>_ipmatch</b>(<i>ipaddress, dict_acl</i>)
|
|
||||||
<p>
|
|
||||||
Prueft IP gegen ACL List und gibt ACL aus.
|
|
||||||
</p><dl>
|
|
||||||
<dt><i>ipaddress</i></dt>
|
|
||||||
<dd>
|
|
||||||
zum pruefen
|
|
||||||
</dd><dt><i>dict_acl</i></dt>
|
|
||||||
<dd>
|
|
||||||
ACL Dict gegen die IP zu pruefen ist
|
|
||||||
</dd>
|
|
||||||
</dl><dl>
|
|
||||||
<dt>Returns:</dt>
|
|
||||||
<dd>
|
|
||||||
int() ACL Wert oder -1 wenn nicht gefunden
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
|
||||||
<hr /><hr />
|
|
||||||
<a NAME="refullmatch" ID="refullmatch"></a>
|
|
||||||
<h2 style="background-color:#FFFFFF;color:#0000FF">refullmatch</h2>
|
|
||||||
<b>refullmatch</b>(<i>regex, string</i>)
|
|
||||||
<p>
|
|
||||||
re.fullmatch wegen alter python version aus wheezy nachgebaut.
|
|
||||||
</p><dl>
|
|
||||||
<dt><i>regex</i></dt>
|
|
||||||
<dd>
|
|
||||||
RegEx Statement
|
|
||||||
</dd><dt><i>string</i></dt>
|
|
||||||
<dd>
|
|
||||||
Zeichenfolge gegen die getestet wird
|
|
||||||
</dd>
|
|
||||||
</dl><dl>
|
|
||||||
<dt>Returns:</dt>
|
|
||||||
<dd>
|
|
||||||
True, wenn komplett passt sonst False
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
|
||||||
<hr />
|
<hr />
|
||||||
</body></html>
|
</body></html>
|
||||||
151
doc/xrpcserver.html
Normal file
151
doc/xrpcserver.html
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<title>xrpcserver</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
</head>
|
||||||
|
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
|
||||||
|
<h1 style="background-color:#FFFFFF;color:#0000FF">
|
||||||
|
xrpcserver</h1>
|
||||||
|
<p>
|
||||||
|
XML-RPC Server anpassungen fuer Absicherung.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Global Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Classes</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#SaveXMLRPCRequestHandler">SaveXMLRPCRequestHandler</a></td>
|
||||||
|
<td>Verwaltet die XML-Requests und prueft Berechtigungen.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#SaveXMLRPCServer">SaveXMLRPCServer</a></td>
|
||||||
|
<td>Erstellt einen erweiterten XMLRPCServer.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Functions</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="SaveXMLRPCRequestHandler" ID="SaveXMLRPCRequestHandler"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">SaveXMLRPCRequestHandler</h2>
|
||||||
|
<p>
|
||||||
|
Verwaltet die XML-Requests und prueft Berechtigungen.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Derived from</h3>
|
||||||
|
SimpleXMLRPCRequestHandler
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#SaveXMLRPCRequestHandler.parse_request">parse_request</a></td>
|
||||||
|
<td>Berechtigungen pruefen.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Static Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<a NAME="SaveXMLRPCRequestHandler.parse_request" ID="SaveXMLRPCRequestHandler.parse_request"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
SaveXMLRPCRequestHandler.parse_request</h3>
|
||||||
|
<b>parse_request</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Berechtigungen pruefen.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn Parsen erfolgreich war
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="SaveXMLRPCServer" ID="SaveXMLRPCServer"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">SaveXMLRPCServer</h2>
|
||||||
|
<p>
|
||||||
|
Erstellt einen erweiterten XMLRPCServer.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Derived from</h3>
|
||||||
|
SimpleXMLRPCServer
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>aclmgr</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#SaveXMLRPCServer.__init__">SaveXMLRPCServer</a></td>
|
||||||
|
<td>Init SaveXMLRPCServer class.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#SaveXMLRPCServer.isAlive">isAlive</a></td>
|
||||||
|
<td>Prueft ob der XML RPC Server laeuft.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#SaveXMLRPCServer.start">start</a></td>
|
||||||
|
<td>Startet den XML-RPC Server.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#SaveXMLRPCServer.stop">stop</a></td>
|
||||||
|
<td>Stoppt den XML-RPC Server.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Static Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<a NAME="SaveXMLRPCServer.__init__" ID="SaveXMLRPCServer.__init__"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
SaveXMLRPCServer (Constructor)</h3>
|
||||||
|
<b>SaveXMLRPCServer</b>(<i>addr, logRequests=True, allow_none=False, use_builtin_types=False, acl=""</i>)
|
||||||
|
<p>
|
||||||
|
Init SaveXMLRPCServer class.
|
||||||
|
</p><a NAME="SaveXMLRPCServer.isAlive" ID="SaveXMLRPCServer.isAlive"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
SaveXMLRPCServer.isAlive</h3>
|
||||||
|
<b>isAlive</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Prueft ob der XML RPC Server laeuft.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn Server noch laeuft
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="SaveXMLRPCServer.start" ID="SaveXMLRPCServer.start"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
SaveXMLRPCServer.start</h3>
|
||||||
|
<b>start</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Startet den XML-RPC Server.
|
||||||
|
</p><a NAME="SaveXMLRPCServer.stop" ID="SaveXMLRPCServer.stop"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
SaveXMLRPCServer.stop</h3>
|
||||||
|
<b>stop</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Stoppt den XML-RPC Server.
|
||||||
|
</p>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr />
|
||||||
|
</body></html>
|
||||||
@@ -1,3 +1,13 @@
|
|||||||
|
helper.IpAclManager.__get_acl?6()
|
||||||
|
helper.IpAclManager.__refullmatch?6(regex, string)
|
||||||
|
helper.IpAclManager.__set_acl?6(value)
|
||||||
|
helper.IpAclManager.acl?7
|
||||||
|
helper.IpAclManager.get_acllevel?4(ipaddress)
|
||||||
|
helper.IpAclManager?1(acl=None, minlevel=0, maxlevel=1)
|
||||||
|
helper._ipmatch?5(ipaddress, dict_acl)
|
||||||
|
helper._setuprt?5(pid, evt_exit)
|
||||||
|
helper._zeroprocimg?5()
|
||||||
|
helper.refullmatch?4(regex, string)
|
||||||
logsystem.LogReader.closeall?4()
|
logsystem.LogReader.closeall?4()
|
||||||
logsystem.LogReader.load_applog?4(start, count)
|
logsystem.LogReader.load_applog?4(start, count)
|
||||||
logsystem.LogReader.load_plclog?4(start, count)
|
logsystem.LogReader.load_plclog?4(start, count)
|
||||||
@@ -31,8 +41,6 @@ procimgserver.ProcimgServer.start?4()
|
|||||||
procimgserver.ProcimgServer.stop?4()
|
procimgserver.ProcimgServer.stop?4()
|
||||||
procimgserver.ProcimgServer.values?4()
|
procimgserver.ProcimgServer.values?4()
|
||||||
procimgserver.ProcimgServer?1(xmlserver, aclmode)
|
procimgserver.ProcimgServer?1(xmlserver, aclmode)
|
||||||
proginit._setuprt?5(pid, evt_exit)
|
|
||||||
proginit._zeroprocimg?5()
|
|
||||||
proginit.cleanup?4()
|
proginit.cleanup?4()
|
||||||
proginit.configure?4()
|
proginit.configure?4()
|
||||||
proginit.forked?7
|
proginit.forked?7
|
||||||
@@ -74,7 +82,11 @@ revpipyload.RevPiPyLoad.xml_reload?4()
|
|||||||
revpipyload.RevPiPyLoad.xml_setconfig?4(dc, loadnow=False)
|
revpipyload.RevPiPyLoad.xml_setconfig?4(dc, loadnow=False)
|
||||||
revpipyload.RevPiPyLoad.xml_setpictoryrsc?4(filebytes, reset=False)
|
revpipyload.RevPiPyLoad.xml_setpictoryrsc?4(filebytes, reset=False)
|
||||||
revpipyload.RevPiPyLoad?1()
|
revpipyload.RevPiPyLoad?1()
|
||||||
revpipyload._ipmatch?5(ipaddress, dict_acl)
|
|
||||||
revpipyload.pyloadversion?7
|
revpipyload.pyloadversion?7
|
||||||
revpipyload.re_ipacl?7
|
revpipyload.re_ipacl?7
|
||||||
revpipyload.refullmatch?4(regex, string)
|
xrpcserver.SaveXMLRPCRequestHandler.parse_request?4()
|
||||||
|
xrpcserver.SaveXMLRPCServer.aclmgr?7
|
||||||
|
xrpcserver.SaveXMLRPCServer.isAlive?4()
|
||||||
|
xrpcserver.SaveXMLRPCServer.start?4()
|
||||||
|
xrpcserver.SaveXMLRPCServer.stop?4()
|
||||||
|
xrpcserver.SaveXMLRPCServer?1(addr, logRequests=True, allow_none=False, use_builtin_types=False, acl="")
|
||||||
|
|||||||
@@ -2,3 +2,5 @@ PipeLogwriter Thread
|
|||||||
RevPiPlc Thread
|
RevPiPlc Thread
|
||||||
RevPiSlave Thread
|
RevPiSlave Thread
|
||||||
RevPiSlaveDev Thread
|
RevPiSlaveDev Thread
|
||||||
|
SaveXMLRPCRequestHandler SimpleXMLRPCRequestHandler
|
||||||
|
SaveXMLRPCServer SimpleXMLRPCServer
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||||
<!-- eric project file for project revpipyload -->
|
<!-- eric project file for project revpipyload -->
|
||||||
<!-- Saved: 2018-03-08, 10:30:46 -->
|
<!-- Saved: 2018-03-08, 10:56:15 -->
|
||||||
<!-- Copyright (C) 2018 Sven Sager, akira@narux.de -->
|
<!-- Copyright (C) 2018 Sven Sager, akira@narux.de -->
|
||||||
<Project version="5.1">
|
<Project version="5.1">
|
||||||
<Language>en_US</Language>
|
<Language>en_US</Language>
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
<Source>revpipyload/logsystem.py</Source>
|
<Source>revpipyload/logsystem.py</Source>
|
||||||
<Source>revpipyload/plcsystem.py</Source>
|
<Source>revpipyload/plcsystem.py</Source>
|
||||||
<Source>revpipyload/picontrolserver.py</Source>
|
<Source>revpipyload/picontrolserver.py</Source>
|
||||||
<Source>revpipyload/xmlinterface.py</Source>
|
|
||||||
<Source>revpipyload/helper.py</Source>
|
<Source>revpipyload/helper.py</Source>
|
||||||
|
<Source>revpipyload/xrpcserver.py</Source>
|
||||||
</Sources>
|
</Sources>
|
||||||
<Forms/>
|
<Forms/>
|
||||||
<Translations/>
|
<Translations/>
|
||||||
|
|||||||
@@ -12,6 +12,72 @@ from re import match as rematch
|
|||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
|
|
||||||
|
|
||||||
|
class IpAclManager():
|
||||||
|
|
||||||
|
"""Verwaltung fuer IP Adressen und deren ACL Level."""
|
||||||
|
|
||||||
|
def __init__(self, acl=None, minlevel=0, maxlevel=1):
|
||||||
|
"""Init IpAclManager class.
|
||||||
|
@param acl ACL Liste fuer Berechtigungen als <class 'str'>"""
|
||||||
|
if minlevel >= maxlevel:
|
||||||
|
raise ValueError("minlevel is smaller or equal than maxlevel")
|
||||||
|
|
||||||
|
self.__dict_acl = {}
|
||||||
|
self.__rawacl = ""
|
||||||
|
self.__re_ipacl = "(([\\d\\*]{1,3}\\.){3}[\\d\\*]{1,3},[" \
|
||||||
|
+ str(minlevel) + "-" + str(maxlevel) + "] ?)*"
|
||||||
|
|
||||||
|
# Liste erstellen, wenn übergeben
|
||||||
|
if acl is not None:
|
||||||
|
self.__set_acl(acl)
|
||||||
|
|
||||||
|
def __get_acl(self):
|
||||||
|
"""Getter fuer den rohen ACL-String.
|
||||||
|
return ACLs als <class 'str'>"""
|
||||||
|
return self.__rawacl
|
||||||
|
|
||||||
|
def __refullmatch(self, regex, string):
|
||||||
|
"""re.fullmatch wegen alter python version aus wheezy nachgebaut.
|
||||||
|
|
||||||
|
@param regex RegEx Statement
|
||||||
|
@param string Zeichenfolge gegen die getestet wird
|
||||||
|
@return True, wenn komplett passt sonst False
|
||||||
|
|
||||||
|
"""
|
||||||
|
m = rematch(regex, string)
|
||||||
|
return m is not None and m.end() == len(string)
|
||||||
|
|
||||||
|
def __set_acl(self, value):
|
||||||
|
"""Uebernimmt neue ACL-Liste fuer die Ausertung der Level.
|
||||||
|
@param value Neue ACL-Liste als <class 'str'>"""
|
||||||
|
if type(value) != str:
|
||||||
|
raise ValueError("parameter acl must be <class 'str'>")
|
||||||
|
|
||||||
|
if not self.__refullmatch(self.__re_ipacl, value):
|
||||||
|
raise ValueError("acl format ist not okay - 1.2.3.4,0 5.6.7.8,1")
|
||||||
|
|
||||||
|
# Klassenwerte übernehmen
|
||||||
|
self.__dict_acl = {}
|
||||||
|
self.__rawacl = value
|
||||||
|
|
||||||
|
# Liste neu füllen mit regex Strings
|
||||||
|
for ip_level in value.split():
|
||||||
|
ip, level = ip_level.split(",", 1)
|
||||||
|
ip = ip.replace(".", "\\.").replace("*", "\\d{1,3}")
|
||||||
|
self.__dict_acl[ip] = int(level)
|
||||||
|
|
||||||
|
def get_acllevel(self, ipaddress):
|
||||||
|
"""Prueft IP gegen ACL List und gibt ACL-Wert aus.
|
||||||
|
@param ipaddress zum pruefen
|
||||||
|
@return int() ACL Wert oder -1 wenn nicht gefunden"""
|
||||||
|
for aclip in sorted(self.__dict_acl, reverse=True):
|
||||||
|
if self.__refullmatch(aclip, ipaddress):
|
||||||
|
return self.__dict_acl[aclip]
|
||||||
|
return -1
|
||||||
|
|
||||||
|
acl = property(__get_acl, __set_acl)
|
||||||
|
|
||||||
|
|
||||||
def _ipmatch(ipaddress, dict_acl):
|
def _ipmatch(ipaddress, dict_acl):
|
||||||
"""Prueft IP gegen ACL List und gibt ACL aus.
|
"""Prueft IP gegen ACL List und gibt ACL aus.
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import os
|
|||||||
import signal
|
import signal
|
||||||
import tarfile
|
import tarfile
|
||||||
import zipfile
|
import zipfile
|
||||||
from concurrent import futures
|
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from helper import refullmatch
|
from helper import refullmatch
|
||||||
from json import loads as jloads
|
from json import loads as jloads
|
||||||
@@ -48,7 +47,7 @@ from tempfile import mkstemp
|
|||||||
from threading import Event
|
from threading import Event
|
||||||
from time import asctime
|
from time import asctime
|
||||||
from xmlrpc.client import Binary
|
from xmlrpc.client import Binary
|
||||||
from xmlrpc.server import SimpleXMLRPCServer
|
from xrpcserver import SaveXMLRPCServer
|
||||||
|
|
||||||
pyloadversion = "0.6.0"
|
pyloadversion = "0.6.0"
|
||||||
re_ipacl = "(([\\d\\*]{1,3}\\.){3}[\\d\\*]{1,3},[0-1] ?)*"
|
re_ipacl = "(([\\d\\*]{1,3}\\.){3}[\\d\\*]{1,3},[0-1] ?)*"
|
||||||
@@ -76,7 +75,6 @@ class RevPiPyLoad():
|
|||||||
self.plc = None
|
self.plc = None
|
||||||
self.plc_pause = False
|
self.plc_pause = False
|
||||||
self.tfile = {}
|
self.tfile = {}
|
||||||
self.tpe = None
|
|
||||||
self.xsrv = None
|
self.xsrv = None
|
||||||
self.xml_ps = None
|
self.xml_ps = None
|
||||||
|
|
||||||
@@ -172,13 +170,14 @@ class RevPiPyLoad():
|
|||||||
# XMLRPC-Server Instantiieren und konfigurieren
|
# XMLRPC-Server Instantiieren und konfigurieren
|
||||||
if self.xmlrpc >= 1:
|
if self.xmlrpc >= 1:
|
||||||
proginit.logger.debug("create xmlrpc server")
|
proginit.logger.debug("create xmlrpc server")
|
||||||
self.xsrv = SimpleXMLRPCServer(
|
self.xsrv = SaveXMLRPCServer(
|
||||||
(
|
(
|
||||||
"",
|
"",
|
||||||
int(self.globalconfig["DEFAULT"].get("xmlrpcport", 55123))
|
int(self.globalconfig["DEFAULT"].get("xmlrpcport", 55123))
|
||||||
),
|
),
|
||||||
logRequests=False,
|
logRequests=False,
|
||||||
allow_none=True
|
allow_none=True,
|
||||||
|
acl=self.xmlrpcacl
|
||||||
)
|
)
|
||||||
self.xsrv.register_introspection_functions()
|
self.xsrv.register_introspection_functions()
|
||||||
self.xsrv.register_multicall_functions()
|
self.xsrv.register_multicall_functions()
|
||||||
@@ -387,8 +386,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
if self.xmlrpc >= 1:
|
if self.xmlrpc >= 1:
|
||||||
proginit.logger.info("start xmlrpc-server")
|
proginit.logger.info("start xmlrpc-server")
|
||||||
self.tpe = futures.ThreadPoolExecutor(max_workers=1)
|
self.xsrv.start()
|
||||||
self.tpe.submit(self.xsrv.serve_forever)
|
|
||||||
|
|
||||||
if self.plcslave:
|
if self.plcslave:
|
||||||
# Slaveausfuehrung übergeben
|
# Slaveausfuehrung übergeben
|
||||||
@@ -450,9 +448,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
if self.xmlrpc >= 1:
|
if self.xmlrpc >= 1:
|
||||||
proginit.logger.info("shutting down xmlrpc-server")
|
proginit.logger.info("shutting down xmlrpc-server")
|
||||||
self.xsrv.shutdown()
|
self.xsrv.stop()
|
||||||
self.tpe.shutdown()
|
|
||||||
self.xsrv.server_close()
|
|
||||||
|
|
||||||
# Logreader schließen
|
# Logreader schließen
|
||||||
self.logr.closeall()
|
self.logr.closeall()
|
||||||
|
|||||||
88
revpipyload/xrpcserver.py
Normal file
88
revpipyload/xrpcserver.py
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# RevPiPyLoad
|
||||||
|
#
|
||||||
|
# Webpage: https://revpimodio.org/revpipyplc/
|
||||||
|
# (c) Sven Sager, License: LGPLv3
|
||||||
|
#
|
||||||
|
"""XML-RPC Server anpassungen fuer Absicherung."""
|
||||||
|
from helper import IpAclManager
|
||||||
|
from concurrent import futures
|
||||||
|
from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
|
||||||
|
|
||||||
|
|
||||||
|
class SaveXMLRPCServer(SimpleXMLRPCServer):
|
||||||
|
|
||||||
|
"""Erstellt einen erweiterten XMLRPCServer."""
|
||||||
|
|
||||||
|
aclmgr = IpAclManager()
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, addr, logRequests=True, allow_none=False,
|
||||||
|
use_builtin_types=False, acl=""):
|
||||||
|
"""Init SaveXMLRPCServer class."""
|
||||||
|
|
||||||
|
SaveXMLRPCServer.aclmgr.acl = acl
|
||||||
|
|
||||||
|
# Vererbte Klasse instantiieren
|
||||||
|
super().__init__(
|
||||||
|
addr=addr,
|
||||||
|
requestHandler=SaveXMLRPCRequestHandler,
|
||||||
|
logRequests=logRequests,
|
||||||
|
allow_none=allow_none,
|
||||||
|
encoding="utf-8",
|
||||||
|
bind_and_activate=False,
|
||||||
|
use_builtin_types=use_builtin_types
|
||||||
|
)
|
||||||
|
|
||||||
|
# Klassenvariablen
|
||||||
|
self.tpe = futures.ThreadPoolExecutor(max_workers=1)
|
||||||
|
self.fut = None
|
||||||
|
|
||||||
|
def isAlive(self):
|
||||||
|
"""Prueft ob der XML RPC Server laeuft.
|
||||||
|
@return True, wenn Server noch laeuft"""
|
||||||
|
return False if self.fut is None else self.fut.running()
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
"""Startet den XML-RPC Server."""
|
||||||
|
if self.fut is None:
|
||||||
|
self.server_bind()
|
||||||
|
self.server_activate()
|
||||||
|
self.fut = self.tpe.submit(self.serve_forever)
|
||||||
|
else:
|
||||||
|
raise RuntimeError("savexmlrpcservers can only be started once")
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
"""Stoppt den XML-RPC Server."""
|
||||||
|
if self.fut is not None:
|
||||||
|
self.shutdown()
|
||||||
|
self.tpe.shutdown()
|
||||||
|
self.server_close()
|
||||||
|
else:
|
||||||
|
raise RuntimeError("save xml rpc server was not started")
|
||||||
|
|
||||||
|
|
||||||
|
class SaveXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
|
|
||||||
|
"""Verwaltet die XML-Requests und prueft Berechtigungen."""
|
||||||
|
|
||||||
|
def parse_request(self):
|
||||||
|
"""Berechtigungen pruefen.
|
||||||
|
@return True, wenn Parsen erfolgreich war"""
|
||||||
|
# Request parsen und ggf. schon abbrechen
|
||||||
|
if not super().parse_request():
|
||||||
|
return False
|
||||||
|
|
||||||
|
# IP-Adresse prüfen
|
||||||
|
int_acl = SaveXMLRPCServer.aclmgr.get_acllevel(self.address_string())
|
||||||
|
if int_acl >= 0:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
self.send_error(
|
||||||
|
401,
|
||||||
|
"IP '{}' not allowed with acl level '{}'"
|
||||||
|
"".format(self.address_string(), int_acl)
|
||||||
|
)
|
||||||
|
|
||||||
|
return False
|
||||||
Reference in New Issue
Block a user