Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login
    1. Home
    2. nklein
    N
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 3
    • Posts 10
    • Groups 0

    nklein

    @nklein

    0
    Reputation
    154
    Profile views
    10
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online
    Age 24

    nklein Unfollow Follow

    Latest posts made by nklein

    • RE: Eintrag in einer Multi-Value-Kategorie per API

      Hallo,

      leider kann ich keinen grundsätzlichen Fehler feststellen. Allerdings beschränkt sich mein Wissen im Grunde auf die funktionierenden Befehlen die ich durch ausprobieren der API und das Auswerten der cmdb.read-responses erarbeitet habe bzw. durch hilfreiche Tipps hier aus dem Forum. Aus der Doku unter https://kb.i-doit.com/pages/viewpage.action?pageId=7831613 werde ich nur bedingt schlau.

      Bei meinem letzten Problem (https://forum.i-doit.org/index.php/topic,4986.msg15377.html#msg15377) war mir die Antwort des json-requests leider keine große Hilfe, da ich immer "success" zurück bekam obwohl ich bewusst falsche Werte übergeben habe. Daher ist mein Vertrauen in die Fehlermeldung etwas getrübt ;).

      Bezüglich der "category_id". Es existiert noch kein Eintrag in der Multi-Value-Kategorie, also müsste ich in Verbindung mit cmd.create auch keine category_id angeben, oder?. Ich probiere nachher mal cmdb.update in Verbindung mit einer category_id, indem ich vorher manuell einen Eintrag über die WebGUI erstelle und schaue was passiert.

      Gruß,

      nklein

      posted in Betrieb
      N
      nklein
    • Eintrag in einer Multi-Value-Kategorie per API

      Hallo,

      ich versuche einen neuen Eintrag in eine Multi-Value-Kategorie per API zu erstellen. Bei einer normalen Kategorie funktioniert das bei mir folgendermaßen:

      
      curl -s -H "Content-Type:application/json" -H "X-RPC-Auth-Session:$session_id" https://$idoitServer/idoit/src/jsonrpc.php \
         --data-ascii '{"version": "2.0","params": {"language": "de", "apikey": "'$apikey'", "category": "C__CATG__CUSTOM_FIELDS_OPENVAS_C", 
         "objID": "'$id'", "data": { "f_text_c_1490699768263":"'$group_timeslot'", "f_text_c_1490699791291":"'$next_time_hour'", "f_popup_c_1491468241437":"'$next_time_date'", "f_text_c_1490699801403":"'$target_id'","f_text_c_1490699806285":"'$schedule_id'","f_text_c_1491804201857":"0"}}, 
         "id": 1, "method": "cmdb.category.update" }' --noproxy $idoitServer -k > json_update_response.tmp
      
      

      Versuche ich das gleiche aber mit einem Multi-Value-Kategorie:

      
      curl -s -H "Content-Type:application/json" -H "X-RPC-Auth-Session:$session_id" https://$idoitServer/idoit/src/jsonrpc.php \
          --data-ascii '{"version": "2.0","params": {"language": "de", "apikey": "'$apikey'", "category": "C__CATG__CUSTOM_FIELDS_OPENVAS_E", 
          "objID": "'$id'", "data": { "f_text_c_1494509969047":"'$cvss'","f_text_c_1490001717552":"'$high'","f_text_c_1490001708884":"'$medium'","f_text_c_1490001700208":"'$low'","f_text_c_1490001591982":"'$log'","f_text_c_1491460705077":"'$scanstart'","f_text_c_1491460727523":"'$scanend'","f_text_c_1491460732290":"'$Dauer'","f_link_c_1493713325789":"'$link'"}}, 
          "id": 1, "method": "cmdb.category.update" }' --noproxy $idoitServer -k > json_update_response_arti.tmp
      
      

      bekomme ich

      
      {"jsonrpc":"2.0","error":{"code":-32099,"message":"i-doit system error","data":{"error":"General error: Syntax error, malformed JSON"}},"id":0}
      
      

      zurück. Ich habe es auch schon mit "cmdb.category.create" probiert. In der "i-doit JSON-RPC API" habe ich leider nichts bezüglich Multi-Value-Feldern gefunden.

      Hat hier jemand einen Tipp?

      Mfg,

      Niklas

      posted in Betrieb
      N
      nklein
    • RE: Ändern von Feldern einer eigenen Kategorie über die API

      Ok, ich habe eine Möglichkeit gefunden, es klappt wenn ich statt allen Unterattributen nur eines angebe also z.B den Titel oder die ID:

      {"version": "2.0","params": {"language": "de", "apikey": "fqq6cqd50", "category": 
      "C__CATG__CUSTOM_FIELDS_OPENVAS_C","objID":"1329862", "data": {"f_popup_c_1490785150354":"schonend"}},"id": 1, "method": "cmdb.category.update"}
      
      {"version": "2.0","params": {"language": "de", "apikey": "fqq6cqd50", "category": 
      "C__CATG__CUSTOM_FIELDS_OPENVAS_C","objID":"1329862", "data": {"f_popup_c_1490785150354":"246"}},"id": 1, "method": "cmdb.category.update"}
      

      Gebe ich mehrere in einem Array an klappt es nicht, obowhl ich bei einem cmdb.category.read auch ein Array zurückbekomme (s. erster Post).

      {"version": "2.0","params": {"language": "de", "apikey": "fqq6cqd50", "category": "C__CATG__CUSTOM_FIELDS_OPENVAS_C","objID":"1329862", "data": 
      {"f_link_c_1490004450164":"testgruppe", "f_popup_c_1490785150354":{"id":"246", "title":"normal"}}},"id": 1, "method": "cmdb.category.update"}
      

      Es wird dann sogar der aktuelle Eintrag ersetzt und das Feld zurückgesetzt. (Eintrag:"-")

      posted in Betrieb
      N
      nklein
    • RE: Ändern von Feldern einer eigenen Kategorie über die API

      Ja, das macht Sinn. Ich habe jetzt den Befehl abgeändert und den Attributnamen mit ins data-Feld genommen:

      curl -s -H "Content-Type:application/json" -H "X-RPC-Auth-Session:$session_id" https://$idoitServer/idoit/src/jsonrpc.php \
         --data-ascii '{"version": "2.0","params": {"language": "de", "apikey": "'$apikey'", "category": "C__CATG__CUSTOM_FIELDS_OPENVAS_C", 
         "objID": "'$id'", "data": { "f_popup_c_1490785150354": {"id":"246", "title":"normal", "const":"SCAN_MODE_NORMAL", "title_lang":"normal", "identifier":"openvas_scan_mode" }}}, 
         "id": 1, "method": "cmdb.category.update" }' --noproxy $idoitServer -k
      

      Leider bleibt das Verhalten gleich. Zurück kommt wieder:

      {"jsonrpc":"2.0","result":{"success":true,"message":"Category entry successfully saved"},"id":1}
      

      Und die Felder sind weiter unverändert. Die Methode "cmdb.category.update" ist aber soweit korrekt? Es gibt noch "cmdb.object.update" aber damit kann ich, soweit ich das gesehen habe, nur die Daten in der Kategorie "General" bearbeiten.

      Ich habe zum Test auch die Werte innerhalb des data-Feldes manipuliert und an die API geschickt:

      "data": { "f_popup_c_1490785150354": {"foo":"bar", "fubar":"normal", "const":"NOT_EXISTENT_CONST", "title_kurz":"normal", "identifier":"openwas_scan_mode" }}
      

      Obwohl die Daten ungültig sind, weil diese Felder nicht existieren, bekomme ich die gleiche "success"-Message als Antwort zurück. Dementsprechend kann man auf die Antworten, die die API zurück gibt, in diesem Fall wohl nichts geben. Ich werde mich mal auf die Suche nach einer log-file für die API auf dem Server machen.

      posted in Betrieb
      N
      nklein
    • Ändern von Feldern einer eigenen Kategorie über die API

      Hallo,

      ich versuche momentan folgendes:

      Ich frage mit folgendem Befehl ab, was in meiner selbst erstellten Kategorie an Werten für ein bestimmtes Objekt gesetzt ist:

      curl -s -H "Content-Type:application/json" -H "X-RPC-Auth-Session:$session_id" https://$idoitServer/idoit/src/jsonrpc.php \
         --data-ascii '{"version": "2.0","params": {"language": "de", "apikey": "'$apikey'", "category": "C__CATG__CUSTOM_FIELDS_OPENVAS_C", "objID": "'$id'"}, 
         "id": 1, "method": "cmdb.category.read" }' --noproxy $idoitServer -k > json_read_response.tmp
      

      Dabei kommt, sofern ich die Werte bereits von Hand gesetzt habe folgendes heraus:

      {"jsonrpc":"2.0","result":[{"id":"1659","objID":"1329862","html_c_1490004458057":null,"f_link_c_1490004450164":"testgruppe","f_popup_c_1490785150354":
      {"id":"246","title":"normal","const":"SCAN_MODE_NORMAL","title_lang":"normal","identifier":"openvas_scan_mode"},"f_popup_c_1490606309970":
      {"id":"240","title":"mittel","const":"RISC_LEVEL_MEDIUM","title_lang":"mittel","identifier":"openvas_risc_level"},"f_text_c_1490699768263":null,"f_text_c_149069979
      1291":null,"f_popup_c_1491468241437":
      {"prop_type":"calendar"},"f_text_c_1490699795836":null,"f_text_c_1490699801403":null,"f_text_c_1490699806285":null,"f_text_c_1491804201857":null,"description
      ":null}],"id":1}
      

      Wie man sieht, sind die Werte SCAN_MODE_NORMAL und RISC_LEVEL_MEDIUM gesetzt.

      Allerdings möchte ich Sie nicht von Hand setzen, sondern automatisch erkennen ob Sie fehlen und dann setzen lassen. Daher, wenn ich obigen curl-Befehl nochmal absetze und die Werte nicht bereits per Hand eingetragen habe, kommt folgende response-Nachricht:

      {"jsonrpc":"2.0","result":
      [{"id":"1659","objID":"1329862","html_c_1490004458057":null,"f_link_c_1490004450164":"testgruppe","f_popup_c_1490785150354":
      [],"f_popup_c_1490606309970":[],"f_text_c_1490699768263":null,"f_text_c_1490699791291":null,"f_popup_c_1491468241437":
      {"prop_type":"calendar"},"f_text_c_1490699795836":null,"f_text_c_1490699801403":null,"f_text_c_1490699806285":null,"f_text_c_1491804201857":null,"description
      ":null}],"id":1}
      

      Die Werte sind sind wie gesagt noch nicht gesetzt, also alles ok. Mein Bash-Script merkt das und möchte nun z.B. den Wert

      "f_popup_c_1490785150354":
      {"id":"246","title":"normal","const":"SCAN_MODE_NORMAL","title_lang":"normal","identifier":"openvas_scan_mode"}
      

      mit folgendem Befehl setzen:

      curl -s -H "Content-Type:application/json" -H "X-RPC-Auth-Session:$session_id" https://$idoitServer/idoit/src/jsonrpc.php \
         --data-ascii '{"version": "2.0","params": {"language": "de", "apikey": "'$apikey'", "category": "C__CATG__CUSTOM_FIELDS_OPENVAS_C", 
         "objID": "'$id'", "data": { "id":"246", "title":"normal", "const":"SCAN_MODE_NORMAL", "title_lang":"normal", "identifier":"openvas_scan_mode" }}, 
         "id": 1, "method": "cmdb.category.update" }' --noproxy $idoitServer -k
      

      Als Antwort vom Server kommt:

      {"jsonrpc":"2.0","result":{"success":true,"message":"Category entry successfully saved"},"id":1}
      

      Und jetzt die Überraschung: Die Werte sind in Idoit nicht gesetzt.

      Wo habe ich etwas falsch gemacht?

      Gruß,

      Niklas Klein

      posted in Betrieb
      N
      nklein
    • RE: Authentifizierung JSON API

      Ich denke ich habe das Problem gefunden. Ich habe bis jetzt für alle Requests den Advanced REST Client als Chrome-Erweiterung verwendet. Dieser scheint mit der Authentifizierung über X-RPC nicht zusammenzuarbeiten. Sobald ich den Befehl

      curl -H 'Content-Type: application/json' -H 'X-RPC-Auth-Username: api_user' -H 'X-RPC-Auth-Password: api_pass' http://idoit-demo.sv.nr/idoit/src/jsonrpc.php \
      --data-ascii '{"version": "2.0","params": {"apikey": "fqq6cqd50"}, "id": "1", "method": "idoit.login" }'
      

      per curl aus einem Linux-Terminal verschicke bekomme ich eine Session-ID zurück…

      Schon etwas komisch, da mein REST Client wunderbar mit der JSON-Schnittstelle reden kann, WENN die Authentifizierung serverseitig ausgeschaltet ist.

      Ich bedanke mich hiermit bei allen Beteiligten für die Unterstützung!

      Gruß,

      Niklas Klein

      posted in Betrieb
      N
      nklein
    • RE: Authentifizierung JSON API

      Hallo,

      ja das funktioniert auch soweit:

      
      ## Apache Environment
      
      | Variable | Value |
      | HTTPS  | on  |
      | SSL_TLS_SNI  | idoit-demo.sv.nr  |
      | HTTP_HOST  | idoit-demo.sv.nr  |
      | CONTENT_TYPE  | application  |
      | HTTP_X_RPC_AUTH_USERNAME  | api_user  |
      | HTTP_X_RPC_AUTH_PASSWORD  | api_pass  |
      | HTTP_COOKIE  | PHPSESSID=l7974pvji93s10n7qinmpvhsf0  |
      | CONTENT_LENGTH  | 0  |
      | PATH  | /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  |
      | SERVER_SIGNATURE  | <address>Apache/2.4.10 (Debian) Server at idoit-demo.sv.nr Port 443</address> |
      
      
      posted in Betrieb
      N
      nklein
    • RE: Authentifizierung JSON API

      Hallo Herr Nagel,

      Ich habe mal versucht nachzuprüfen ob bei uns PHP als Apache mod_php oder als CGI/FastCGI verwendet wird. Leider habe ich den Server nicht selbst aufgesetzt und weiß es daher nicht und habe auch keine Erfahrung mit PHP.

      In der Liste installierter Pakete ist sowohl ein Paket für Apache als auch eines mit CGI aufgeführt.

      libapache2-mod-php5/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      libphp-pclzip/stable,now 2.8.2-3 all [installed]
      php-pclzip/stable,now 2.8.2-3 all [installed,automatic]
      php5/stable,now 5.6.30+dfsg-0+deb8u1 all [installed]
      php5-cgi/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed,automatic]
      php5-cli/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-common/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed,automatic]
      php5-curl/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-gd/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-json/stable,now 1.3.6-1 amd64 [installed,automatic]
      php5-ldap/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-mcrypt/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-memcache/stable,now 3.0.8-5 amd64 [installed]
      php5-mysqlnd/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-pgsql/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-readline/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed,automatic]
      php5-snmp/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      php5-xmlrpc/stable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
      

      Um zu sehen was jetzt tatsächlich vom Webserver verwendet wird habe ich mir eine php-File mit der phpinfo()-Funktion angelegt, dabei kommt folgendes heraus:

      System	Linux lx-idoit-demo 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64
      Build Date	Feb 8 2017 08:50:48
      Server API	Apache 2.0 Handler
      Virtual Directory Support	disabled
      Configuration File (php.ini) Path	/etc/php5/apache2
      Loaded Configuration File	/etc/php5/apache2/php.ini
      Scan this dir for additional .ini files	/etc/php5/apache2/conf.d
      Additional .ini files parsed	/etc/php5/apache2/conf.d/05-opcache.ini, /etc/php5/apache2/conf.d/10-mysqlnd.ini, /etc/php5/apache2/conf.d/10-pdo.ini, /etc/php5/apache2/conf.d/20-curl.ini, /etc/php5/apache2/conf.d/20-gd.ini, /etc/php5/apache2/conf.d/20-json.ini, /etc/php5/apache2/conf.d/20-ldap.ini, /etc/php5/apache2/conf.d/20-mcrypt.ini, /etc/php5/apache2/conf.d/20-memcache.ini, /etc/php5/apache2/conf.d/20-mysql.ini, /etc/php5/apache2/conf.d/20-mysqli.ini, /etc/php5/apache2/conf.d/20-pdo_mysql.ini, /etc/php5/apache2/conf.d/20-pdo_pgsql.ini, /etc/php5/apache2/conf.d/20-pgsql.ini, /etc/php5/apache2/conf.d/20-readline.ini, /etc/php5/apache2/conf.d/20-snmp.ini, /etc/php5/apache2/conf.d/20-xmlrpc.ini
      PHP API	20131106
      PHP Extension	20131226
      Zend Extension	220131226
      Zend Extension Build	API220131226,NTS
      PHP Extension Build	API20131226,NTS
      Debug Build	no
      Thread Safety	disabled
      Zend Signal Handling	disabled
      Zend Memory Manager	enabled
      Zend Multibyte Support	provided by mbstring
      IPv6 Support	enabled
      DTrace Support	enabled
      Registered PHP Streams	https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
      Registered Stream Socket Transports	tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
      Registered Stream Filters	zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, mcrypt.*, mdecrypt.*
      

      Ich interpretiere das so, dass Apache die PHP-Anfragen bearbeitet also php_mod verwendet wird, korrekt?

      posted in Betrieb
      N
      nklein
    • RE: Authentifizierung JSON API

      Hallo Benjamin,

      schon einmal vielen Dank für deine Hilfe, leider haben mich deine Beispiele nicht weiter gebracht. Wie da du ja auch schon gesagt hast sieht grundsätzlich bei meinem Header/Body alles gut aus.

      Ich habe mittlerweile noch ausprobiert ob es mit einem lokalen User funktioniert (Die User bis jetzt waren alle über LDAP), leider ohne Erfolg. Wenn ich die Authentifizierung allerdings serverseitig ausschalte kann ich die API problemlos verwenden.

      Ich habe mein Anliegen jetzt an den Advanced Support weitergegeben. Mal sehen was die dazu sagen.

      Gruß,

      Niklas

      posted in Betrieb
      N
      nklein
    • Authentifizierung JSON API

      Hallo,

      ich versuche gerade mich über die JSON API zu authentifizieren. Folgende Dinge habe ich bereits ausprobiert:

      Basic HTTP Authentication:

      Header:

      Content-Type: application/json
      Authorization: Basic dXNlcjpwYXNz
      
      

      Body:

      {
          "jsonrpc": "2.0",
          "method": "idoit.login",
          "params": 
        	{
              "apikey": "2aeouee7qu"
          },
          "id": 1
      }
      

      Response:

      {
      "jsonrpc": "2.0",
      "error": {
      "code": -32604,
      "message": "Authentication error",
      "data": {
      "error": "Please specify a user by RPC Session header or HTTP Basic Authentication."
      }
      },
      "id": 1
      }
      

      X-RPC Authentifizierung:

      Hier habe ich einmal versucht den Username und das Password gleichzeitig in einem Header zu übertragen oder zuerst nur den Usernamen. Beides hat nicht funktioniert.

      Header:

      Content-Type: application/json
      X-RPC-Auth-Username: user
      X-RPC-Auth-Password: pass
      
      

      Body:

      {
          "jsonrpc": "2.0",
          "method": "idoit.login",
          "params": 
        	{
              "apikey": "2aeouee7qu"
          },
          "id": 1
      }
      

      Response:

      {
      "jsonrpc": "2.0",
      "error": {
      "code": -32604,
      "message": "Authentication error",
      "data": {
      "error": "Please specify a user by RPC Session header or HTTP Basic Authentication."
      }
      },
      "id": 1
      }
      

      Das kann doch nicht so schwer sein, schließlich habe ich nirgends sonst jemanden gefunden der danach gefragt hat 😉 Ich würde mich freuen, wenn mir jemand für beide Anmeldemethoden jeweils ein Beispiel für Header und Body liefern könnte und mir auch noch sagt ob method.login überhaupt bei einer Anmeldung in den Body gehört (Lasse ich den Body komplett weg gibt es auch eine Fehlermeldung, daher habe ich die Methode Login als mMn sinnvollste genommen).

      Gruß,

      Niklas

      posted in Betrieb
      N
      nklein