[perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Hilfe zu OTRS Problemen aller Art
Post Reply
w3sp
Znuny newbie
Posts: 28
Joined: 21 Dec 2017, 19:30
Znuny Version: OTRS5

[perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by w3sp »

Hallo,

bitte nicht hinterfragen warum und wieso :-)

Also:
Zu jedem Ticket gibt es eine dazugehörige Cache Datei. Die Cachedateien sind in /opt/otrs/var/tmp/CacheFileStorable/... gespeichert und haben den Namen eines md5 hashes.

Ich möchte nun letztendlich zu einem Ticket via die Datenbank z.B. anhand der TicketID oder Ticketnummer die dazugehörige Cachedatei finden. Bei Ticketzahlen im mittlerweile X-stelligen Bereich ist die Suche nach Dateiinhalten (dort steht die Ticketnummer im Klartext drin) leider keine Option. In der Datenbank habe ich zu dem Ticket leider in keiner der Tabellen/Spalten den passenden md5 hash gefunden, weshalb ich davon ausgehe, dass dieser nicht in der Datenbank gespeichert wird.

Daher würde ich idealerweise gerne den md5 hash irgendwie selbst reproduzieren, damit ich anhand dessen direkt zur korrekten Cachedatei navigieren kann.

Ich habe mir heute mal den Sourcecode heruntergeladen in der Hoffnung dort etwas zu finden. Ich kann leider kein Perl und meine Kenntnisse in C sind ziemlich rudimentär und eingerostet.

Ich habe diese Datei hier gefunden:

  • FileStorable.pm in \Kernel\System\Cache\


Dort befindet sich u.a. dieses hier in der Get Funktion:

Code: Select all

    my ( $Self, %Param ) = @_;

    # check needed stuff
    for my $Needed (qw(Type Key)) {
        if ( !defined $Param{$Needed} ) {
            $Kernel::OM->Get('Kernel::System::Log')->Log(
                Priority => 'error',
                Message  => "Need $Needed!"
            );
            return;
        }
    }

    my ( $Filename, $CacheDirectory ) = $Self->_GetFilenameAndCacheDirectory(%Param);
Die letzte Zeile lässt mich vermuten, dass %Param sowohl den Ordnernamen als auch den Dateinamen enthält, den ich suche. Darüber steht dann noch ein wenig Code, und mit qw() wird irgendetwas MD5 bezogenes aufgerufen, aber hier komme ich leider nicht mehr weiter :-)

Wäre cool, wenn mich da jemand auf den richtigen Pfad lenken oder gar sagen kann aus welchen Datenbank(?)feldern der Code genau generiert wird, damit ich das so reproduzieren kann.

Viele Grüße :-)

w3sp
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by jojo »

Caches werden aber auch gelöscht wenn sie zu alt sind... Was auch immer Du vor hast, wird wahrscheinlich daran scheitern das nicht immer eine Cache Datei da ist und auch das nicht alle Inhalte im Cache sein werden.
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
w3sp
Znuny newbie
Posts: 28
Joined: 21 Dec 2017, 19:30
Znuny Version: OTRS5

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by w3sp »

Hi jojo,

das wäre kein Problem. Letztendlich will ich die gefundene Cachedatei löschen, um sie anschließend neu zu generieren. Letzteres geschieht ja automatisch im Hintergrund, wenn jmd. das zugehörige Ticket im Browser öffnet: Wenn keine Datei vorhanden --> Datei wird generiert.
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by jojo »

my $Filename = $Param{Key};
$Kernel::OM->Get('Kernel::System::Encode')->EncodeOutput( \$Filename );
$Filename = Digest::MD5::md5_hex($Filename);

In Kernel/System//Cache/FileStorable.pm... Schau Dir aber auch mal die Doku in Kernel/System//Cache.pm bzgl. der API Möglichkeiten an
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
w3sp
Znuny newbie
Posts: 28
Joined: 21 Dec 2017, 19:30
Znuny Version: OTRS5

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by w3sp »

Guten Morgen,

den Codeteil hatte ich gestern Abend bereits gesehen. Da steht aber, sofern ich das richtig verstehe, nur drin, dass $Filename an der Stelle verschlüsselt wird. Ich muss allerdings den Inhalt von $Filename kennen, um das entsprechend simulieren zu können. Dieser müsste wenn ich mich täusche irgendwo in der Nähe von dem Code, den ich im ersten Post kopiert hatte, definiert werden.

...und dann verließen sie ihn :-)

Aber die Doku werde ich gleich mal anschauen, vielleicht finde ich da ja etwas.
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by jojo »

Die Codezeile erzeugt den Namen des Cachfiles. Der Cache Inhalt wird in den jeweiligen Modulen die den Cache benötigen definiert, z.B. in der Ticket.pm
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
w3sp
Znuny newbie
Posts: 28
Joined: 21 Dec 2017, 19:30
Znuny Version: OTRS5

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by w3sp »

Der Inhalt der Cachedateien selbst interessiert mich wiegesagt nicht so sehr.

Ich brauche ja eigentlich doch nur den Inhalt der $Filename Variable zu dem Zeitpunkt, bevor da encoded und gehasht wird, oder?!

Ein Beispielstring oder so würde mir hier ggf. schon genügen, um das entsprechend selbst reproduzieren zu können. In VisualStudio (C/C++) würde ich so Code ja ggf. einfach compilen, ausführen und dann stepbystep debuggen um zu sehen, wann was darin steht. Da ich allerdings von Perl absolut null Ahnung habe, befürchte ich, dass ich hier dann nicht wirklich weiterkomme :-(

PS: Cache.pm Doku hat mir leider nicht weitergeholfen, allerdings hab ich jetzt gelernt, dass via TTL das Expirationdate kontrolliert.
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by jojo »

Erkläre doch mal einfach was Du vorhast und warum? Evtl. gibt es ja eine ganz andere Lösung, das Caching in OTRS ist sehr ausgefeilt und daran "rumzuspielen" könnte zu unschönen Nebeneffekten führen
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
w3sp
Znuny newbie
Posts: 28
Joined: 21 Dec 2017, 19:30
Znuny Version: OTRS5

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by w3sp »

Es geht kurz gesagt darum, ein Ticket (inkl. etwaiger Attachments) nach einer bestimmten Nummer zu durchsuchen, diese dann per Matching in einer anderen Datenbank (andere Software) der korrekten Abteilung/Team zuzuordnen und anschließend per OTRS Datenbank Update direkt in die passende Queue zu schieben sowie den zuständigen Bearbeiter zum Besitzer des Tickets zu machen.

Das Problem, was auftritt, ist, dass sich ein Ticket auf diese Art zwar verschieben usw. lässt, jedoch in der Infobox (rechts) weiterhin die ursprünglichen Informationen stehen. Die Infobox bedient sich aus dem Inhalt der Cachedatei. Also habe ich die dazugehörige Cachedatei ausfindig gemacht, gelöscht und neu generiert (Ticket z.B. neu öffnen). Nun zeigt die Infobox die korrekten Informationen an.

Ich habe das Problem jetzt gelöst bekommen und kann den md5 hash reproduzieren.

PS: Am schönsten bzw. saubersten wäre hier ja eine API wo ich TicketID und neue QueueID reinwerfen kann, aber die gibt es wohl leider nicht.
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: [perl] Woraus wird der md5 hash der CacheFileStorables generiert?

Post by jojo »

Was Du suchst nennt sich TicketUpdate und lässt sich z.B. über den Webservice triggern. Das direkte Schreiben in die Datenbank ist auf alle Fälle kein gangbarer Weg.
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
Post Reply