Bug 18254 - Info mit Pattern zu UCR Variablen wird nur angezeigt, wenn die Variablen gesetzt sind
Info mit Pattern zu UCR Variablen wird nur angezeigt, wenn die Variablen gese...
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: UCR - Info Files
UCS 2.3
Other Linux
: P5 normal (vote)
: UCS 3.1
Assigned To: Philipp Hahn
Stefan Gohmann
: interim-1
: 28563 (view as bug list)
Depends on:
Blocks: 28563 33662
  Show dependency treegraph
 
Reported: 2010-04-27 12:11 CEST by Felix Botner
Modified: 2013-12-05 11:36 CET (History)
2 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Felix Botner univentionstaff 2010-04-27 12:11:24 CEST
Z.B. univention-pam

univention-pam.univention-config-registry-variables:
[nscd/.*/persistent]
Description[de]=Definiert, ob die Cache-Daten bei einem Neustart erhalten bleiben sollen
Description[en]=Specifies if the content of the cache should be kept over restarts
Type=bool
Categories=system-base

-> ucr search nscd/group/persistent

-> ucr set nscd/group/persistent=yes

-> ucr search nscd/group/persistent
nscd/group/persistent: yes
 Specifies if the content of the cache should be kept over restarts
 Categories: system-base
Comment 1 Philipp Hahn univentionstaff 2012-08-03 22:12:54 CEST
(In reply to comment #0)
> [nscd/.*/persistent]
...
> -> ucr search nscd/group/persistent

UCR funktioniert derzeit so, daß es für die Beschreibungen in den Info-Dateien eine Fallunterscheidung gibt: Wird darin kein .* verwendet, gilt die Beschreibung für genau eine Variable, die damit dann auch bekannt ist. Bei Verwendung der Pattern wird die Beschreibung an die UCR-Variablen angehängt, die im System gesetzt sind. Mehr macht auch keinen Sinn, denn jeder reguläre Ausdruck beschreibt unendliche viele UCR-Variablen.

Das Problem bei der gewünschten Suche ist, daß dabei zwei reguläre Ausdrücke verglichen werden: Sowohl das Argument bei "search" alsauch die info-Sektion sind jeweils reguläre Ausdrücke.

Deutlicher wird das ggf. an folgendem Beispiel:
  [aaa.*]  ← die eckigen Klammern kommen vom Format der INI-Datei
  [bbb.*]

  ucr search .*
Hier würden beide Variablenmöglichkeiten angezeigt werden.

  ucr search '[abc]{10,10}'
Hier wird nach exakt 10 'a's, 'b's, 'c's, gesucht. Die ersten beiden Beschreibungen würden durch obige Patterns abgedeckt werden, allerdings fängt der 'search' Ausdruck hier nicht direkt mit 'a' oder 'b' an, sondern mit der eckigen Klammer, weshalb hier die Suche in beiden Richtungen nicht funktioniert: Weder die info-Pattern passt auf den Suchausdruck, noch passt der Suchausdruck auf eine der beiden info-Pattern!
Trotzdem gibt es eine nicht-leere-Schnittmenge der beiden regulären Sprachen.

Das ganze ist ein Problem der theoretischen Informatik, nämlich ob die Schnittmenge zweier regulärer Sprachen nicht-leer ist. Das Problem ist prinzipiell lösbar, aber ob man den Algorithmus wirklich in UCR braucht halte ich persönlich eher für fraglich und steht vermutlich in keinem Verhältnis zum Aufwand.

Soll heißen: Das ist nicht einfach umsetzbar, weil es keine fertige Python-Funktion gibt, mit der man das annähernd mal eben schnell umsetzen könnte. Hier wäre eine eigene Bibliothek für das Umsetzen von RegExps in Automaten zzgl. die Implementierung des eigentlichen Algorithmus zur Bestimmung des Schnittmenge notwendig. Auch ist das maximale, was man bekommen kann, dann etwa folgendes bei einer Suche nach "^interfaces/":
  "Für den gesuchten Ausdruck gibt es direkt keine derzeit gesetzt UCR-Variable, aber folgende Beschreibungen _könnten_ passen:
  [interfaces/eth.*/address]
  [interfaces/eth.*/broadcast]
  [interfaces/eth.*/mac]
  [interfaces/eth.*/netmask]
  [interfaces/eth.*/network]
  [interfaces/eth.*/type]
  [interfaces/eth.*/hosts]
  [interfaces/eth.*/route/.*]
  [interfaces/eth.*/options/.*]
  [interfaces/eth.*/ipv6/.*/address]
  [interfaces/eth.*/ipv6/.*/prefix]
  [interfaces/eth.*/ipv6/acceptRA]
  [interfaces/restart/auto]
  [interfaces/handler]

Das ganze wurde jetzt so umgesetzt, das auf den Suchausdruck die Patterns aus den .info-Dateien angewandt wird und die Treffer zusätzlich angezeigt werden. --non-empty und -shell blenden solche Ergebnisse wieder aus.

Sollte das nicht reichen, sind hier die Grundlagen aus der theoretischen Informatik zu finden bzw. gibt es bereits Implementierungen in Python:
<http://www.coder-wiki.de/HowTos/Theorie-Schnittmenge-mehrerer-Automaten>
<http://qntm.org/greenery>
<http://osteele.com/software/python/fsa/>

svn34618, univention-config-registry_8.0.1-1.389.201208032206
Comment 2 Stefan Gohmann univentionstaff 2012-09-17 08:52:51 CEST
Changelog: OK

Funktioniert wie beschrieben:

root@master141:~# ucr search nscd/group/persistent
nscd/.*/persistent: <empty>
 Specifies if the content of the cache should be kept over restarts

root@master141:~# ucr set nscd/group/persistent=yes
Create nscd/group/persistent
File: /etc/nscd.conf
root@master141:~# ucr search nscd/group/persistent
nscd/.*/persistent: <empty>
 Specifies if the content of the cache should be kept over restarts

nscd/group/persistent: yes
 Specifies if the content of the cache should be kept over restarts

root@master141:~# ucr search --non-empty nscd/group/persistent
nscd/group/persistent: yes
 Specifies if the content of the cache should be kept over restarts

root@master141:~#
Comment 3 Philipp Hahn univentionstaff 2012-09-18 13:01:30 CEST
*** Bug 28563 has been marked as a duplicate of this bug. ***
Comment 4 Stefan Gohmann univentionstaff 2012-12-12 21:10:47 CET
UCS 3.1-0 has been released: 
 http://forum.univention.de/viewtopic.php?f=54&t=2125

If this error occurs again, please use "Clone This Bug".