Project

General

Profile

Actions

Task #523

closed

Klient nemůže přijímat všechny zprávy

Added by Pavel Kácha over 12 years ago. Updated about 12 years ago.

Status:
Closed
Priority:
Urgent
Assignee:
Tomáš Plesník
Category:
-
Target version:
Start date:
07/30/2012
Due date:
08/12/2012
% Done:

0%

Estimated time:

Description

Server klientům je schopen filtrovat data podle jednoho typu zprávy, neumožňuje přijímat všechny (ani filtrovat podle více typů, ale 'všechny' je typický případ analytických klientů). Je třeba navrhnout a implementovat změnu reprezentace nebo schématu db a souvisejících postupů (registrace).

Actions #1

Updated by Pavel Kácha over 12 years ago

  • Due date set to 08/12/2012
  • Assignee set to Tomáš Plesník
  • Priority changed from Normal to Urgent

Speciální hodnota v clients.type, např. "_all_" bude znamenat, že klient chce všechny zprávy.
Bude potřeba upravit i dokumentace (při registraci může žadatel uvést, že chce vše).

Actions #2

Updated by Tomáš Plesník over 12 years ago

Pro prehlednost doplnuji mailovou komunikaci mezi TP a PK:

Ahoj,

   jasně, pcapové filtry znám, v podstatě obvyklé logické výrazy a trochou
syntaktického cukru pro sítě.
   Takový jazyk ale znamená gramatiku, parser a AST s implementací
operátorů, je otázka, jestli tak daleko chceme jít.  Na druhou stranu už se
do takové věci pouštíme v Mentatu (s ambicí na Coddovy podmínky), pokud
bychom došli k tomu, že je to pro Warden rozumné, půjde to využít.

-- ph

> From: Tomas Plesnik <plesnik@ics.muni.cz>, Date: Jul 31, 2012
>
> Cau Pavle,
>
> tak jsem se na to dival a v podstate se jedna o tcpdump (pcap) filter.
> Je mi jasne, ze tento filter pro nas neni vhodny, ale na druhou stranu
> si myslim, ze si z nej muzeme vzit co se nam libi a zbytek zahodit.
> Ukazka je na strance http://nfdump.sourceforge.net/ pod nadpisem Filter
> Syntax.
>
> Tom
>
> On 31.7.2012 18:02, Pavel Kácha wrote:
>> Ahoj,
>>
>>    pošli mi pls odkaz nebo jméno toho filtrování, o kterém jsi mluvil (v
>> souvislosti s netflow).
>>
>> -- ph
>>

Actions #3

Updated by Tomáš Plesník over 12 years ago

Pro prehlednost doplnuji mailovou komunikaci mezi TP a PK ohledne zpusobu pouzivani "any" jakozto identifikatoru pro prijem vsech typu zprav:

   Záleží na úhlu pohledu. Jako 'nestandardní typ' ano. Jako 'interní
placeholder' ne.
   V zásadě bych byl pro, ale to bychom bývali museli udělat už na začátku.
Teď je to v dokumentaci, v databázi událostí, lidi jsou na to zvyklí... 
   Naopak _any_ je interní věc, která se nebude vyskytovat mimo databázi
klientů, resp.  to do ní bude zadávat jen správce při vytváření klienta, a
je snadné ji v případě potřeby změnit.  Takže bych se teď v 2.X nesnažil být
konzistentní na úkor práce s dokumentací a přeučováním lidí na _test_, když
se stejně _any_ velmi pravděpodobně měnit bude.

   A jinak myslím, že přesně takovéhle diskuse můžou být součástí tasků,
když už jsme je začali - pak budou zadokumentované motivace k některým
rozhodnutím.

-- ph

> From: Tomas Plesnik <plesnik@ics.muni.cz>, Date: Aug 02, 2012
>
> Jasny rozumím. Ve  své podstatě aby se oddělil jakoby řidiči znak. Ok, beru. Tím padem to bude vypadat následovně: "_any_". Ještě me tak napadlo, jestli by nebylo dobře tímto zpusobem používat i "test" který slouží k identifikaci testovacích zpráv. 
>
> Tom
>
> Tomas Plesnik                                                            plesnik@ics.muni.cz
> CSIRT-MU, Network Security Department            http://www.muni.cz/csirt
> Institute of Computer Science, Masaryk University, Brno, Czech Republic
> PGP key ID: 0x9D3722F3
>
> 1. 8. 2012 v 16:57, Pavel Kácha <ph@cesnet.cz>:
>
>>> From: Tomas Plesnik <plesnik@ics.muni.cz>, Date: Aug 01, 2012
>>>
>>> Super. Jinak jsem premyslel jak nejlepe representovat volbu stahovani
>>> vsech typu zprav. Ve sve podstate jako pouzitelne se zdaji byt:
>>>
>>> - all
>>> - _all_
>>> - ALL
>>> - _ALL_
>>> - *
>>> - null
>>> - any
>>> -_any_
>>>
>>> Me osbone se nejvice libi a priklanim se k "any".
>>
>>   Podtržítka jsem tam strčil jen proto, aby bylo na první pohled zřejmé, že
>> se jedná o zvláštní volbu proti ostatním, zvaž.  A "any" je ok.
>>
>> -- ph

Actions #4

Updated by Tomáš Plesník over 12 years ago

Prave jsem do serveru pridal podporu "ridiciho znaku" any aby bylo mozne ze serveru stahnout vsechny typy udalosti. Upravil jsem dokumentaci, kod bezi na serveru warden-dev. Uprava je do GITu nakomitovana pod Revizi 078fc14f.

Actions #5

Updated by Pavel Kácha over 12 years ago

Díky. Vystřelil jsem any z dokumentace (824646d1), je to interní záležitost. Je potřeba upravit dokumentaci registerReceiver.pl, aby vytvářející správce věděl, co použít.

Actions #6

Updated by Tomáš Plesník over 12 years ago

Do README a helpu skriptu registerReceiver.pl jsem doplnil popis

_any_
Revize cca30802.

Actions #7

Updated by Pavel Kácha over 12 years ago

  • Status changed from New to Resolved
Actions #8

Updated by Pavel Kácha over 12 years ago

  • Status changed from Resolved to Feedback

Kostějovy připomínky jsou validní, mrkni na to a dej vědět.

use List::Util 'first'; # check validity of event attributes - TYPE
my $valid_types_ref = $VALID_STRINGS{'type'};
my valid_types = $valid_types_ref;
my $match = first { /$type/ } @valid_types;

Snazte se pouzivat nativni funkce misto novych modulu, navrhuji:

my $match = grep /$type/, @{$VALID_STRINGS{'type'}};

Zkouseli jste funkcionalitu prijimace, pokud je prijimaci klient registrovany
jako any? Co kdyz bude chtit jen nejaky typ zpravy, projde procesem autorizace,
na prvni pohled se mi zda, ze ne. Pletu se?

Actions #9

Updated by Pavel Kácha over 12 years ago

Moje poznámka k registraci na any - osobně si myslím, že parametr $requested_type v getNewEvents je pozůstatek z návrhu a bude rozumné se ho v budoucnu zbavit - filtr je definován při registraci klienta a dosud nebyl měnitelný (parametr musel být při volání stejný, jako je uveden v db) a při any je řada možností chování. Jaký je Tvůj názor?

Actions #10

Updated by Pavel Kácha over 12 years ago

Eh, sorry, první část (List::Util) patří k #524.

Actions #11

Updated by Tomáš Plesník over 12 years ago

V aktualnim stavu je to tak, ze klient by musel mit dve registrace, jednu pro any a druhou pro zvoleny 'type'. Neni problem udelat drobnou upravu tak, aby klient, ktery ma zaregistrovany typ any a prijde pouze s konkretnim typem aby jej take dostal, jelikoz pro any to vlastne znamena, ze ma pristup ke vsem typum udalosti.

Na druhou stranu je ale pravda, ze promenna $requested_type je v podstate zbytecna a muze se dotahovat z db registrovanych klientu. Takze bych ji pri major verzi vyhodil...

Actions #12

Updated by Pavel Kácha over 12 years ago

Už se z db stejně tahá (protože se proti ní autorizuje $requested_type dodaná klientem), byl bych pro to, udělat $requested_type ještě ve 2.1 verzi volitelný, označit v dokumentaci „deprecated“ a prdět na něj (tj. použít rovnou ten vytažený z db). Je to poziční parametr, a je druhý, takže ho volající může bezbolestně vynechat. Tebe se týká server, klienta může udělat Suki. Co si o tom myslíš?

Actions #13

Updated by Tomáš Plesník over 12 years ago

Souhlasim a nemam s tim problem. Pokud mi jej ale nekdo i presto ze u nej bude popisek "deprecated" vyplni, tak jej na serveru zahodit a stejne si jej vytahnout s DB?

Actions #14

Updated by Pavel Kácha over 12 years ago

Byl bych pro. Kód bude jednodušší, a pokud bude explicitně řečeno, že je deprecated a nepoužívá se, je to korektní.

Actions #15

Updated by Tomáš Plesník over 12 years ago

Dobra poznamka od Kosteje:

Takze moznost, kdy si klient natahne jen pozadovany typ (pokud jich ma registrovanych vice), uz nebude k dispozici? To je zvlastni.

Kostej ma v tomto pravdu. Pokud bude mit nekdo zaregistrovanych vice klientu (pro stahovani vice typu udalosti) a ja na serveru zahodim $requested_type, tak nebudu vedet ktere zpravy (zpravy jakeho typu) mu mam vlastne poslat, protoze v db klientu bude mit vic registraci na ruzne typy udalosti. Resenim tohoto problemu by mohla byt kontrola, ze pokud prijde s nejakym konkretnim typem, tak se podivam zdali jej ma zaregistrovany a dam mu udalosti odpovidajici tomuto konkretnimu typu. Pokud nema registraci pro tento konkretni typ, tak bych se podival jestli ma zaregistrovany any, pokud ano tak mu je muzu taky dat. Pokud ale nema ani jedno, tak mu nedam nic.

Actions #16

Updated by Tomáš Plesník over 12 years ago

Tomáš Plesník wrote:

Dobra poznamka od Kosteje:

[...]

Kostej ma v tomto pravdu. Pokud bude mit nekdo zaregistrovanych vice klientu (pro stahovani vice typu udalosti) a ja na serveru zahodim $requested_type, tak nebudu vedet ktere zpravy (zpravy jakeho typu) mu mam vlastne poslat, protoze v db klientu bude mit vic registraci na ruzne typy udalosti. Resenim tohoto problemu by mohla byt kontrola, ze pokud prijde s nejakym konkretnim typem, tak se podivam zdali jej ma zaregistrovany a dam mu udalosti odpovidajici tomuto konkretnimu typu. Pokud nema registraci pro tento konkretni typ, tak bych se podival jestli ma zaregistrovany any, pokud ano tak mu je muzu taky dat. Pokud ale nema ani jedno, tak mu nedam nic.

Toto reseni ale znamena, ze $requested_type budeme pouzivat i nadale.

Actions #17

Updated by Pavel Kácha over 12 years ago

Jo, má pravdu, to jsem přehlédl.

V zásadě jsem se chtěl hlavně zbavit nutnosti uvádět "_all_", protože to je věc, kterou by klienti neměli vidět, a vycházel jsem z dojmu, že máme jen klienty, stahující jeden typ zpráv, nebo všechny typy.

To domýšlení typu v jednom případě a v druhém ne už se mi příliš nezdá, není to konzistentní. Jednodušší verze - neuvedený typ nebo undef = all?

Actions #18

Updated by Tomáš Plesník over 12 years ago

Pavel Kácha wrote:

Jo, má pravdu, to jsem přehlédl.

V zásadě jsem se chtěl hlavně zbavit nutnosti uvádět "_all_", protože to je věc, kterou by klienti neměli vidět, a vycházel jsem z dojmu, že máme jen klienty, stahující jeden typ zpráv, nebo všechny typy.

To domýšlení typu v jednom případě a v druhém ne už se mi příliš nezdá, není to konzistentní. Jednodušší verze - neuvedený typ nebo undef = all?

Pouzil bych undef, pokud je typ nastaven na undef, tak se to na serveru prelozi jako all.

Actions #19

Updated by Pavel Kácha over 12 years ago

Ok, pokud přijde nedefinovaný (tj. klient ho neuvedl, nebo zavolal s undef), přelož ho na all. Pak to přehodím na Sukiho, zkontrolujeme, jestli v klientovi není někde zádrhel.

Actions #20

Updated by Tomáš Plesník over 12 years ago

Hotovo a ulozeno do GITu.

Actions #21

Updated by Pavel Kácha over 12 years ago

Otestoval jsi to?

Useless use of a constant (any) in void context at Warden.pm line 251.

Opravdu bude potřeba || nebo závorky.

Actions #22

Updated by Tomáš Plesník over 12 years ago

or jsem vymenil za || a uz to funguje. Neotestovany rychli preklep. Pardon a diky za upozorneni.

Actions #23

Updated by Pavel Kácha over 12 years ago

  • Status changed from Feedback to Resolved
Actions #24

Updated by Pavel Kácha about 12 years ago

  • Status changed from Resolved to Closed
Actions

Also available in: Atom PDF