Improve certificate path probing with demo UNC target and remove Sonic container scan.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-29 09:14:25 +02:00
co-authored by Cursor
parent f7e9bd43e2
commit f584fd68fe
16 changed files with 1026 additions and 999 deletions
@@ -1,7 +1,5 @@
import java.lang.reflect.Method;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import javax.management.ObjectName;
@@ -11,14 +9,13 @@ import javax.management.ObjectName;
* Befehle:
* validate - Anmeldung + lesender Container-Zugriff
* restart - Container neu starten (stop/restart)
* list - Container der Domain auflisten
*
* javac -source 8 -target 8 SonicMfContainerTool.java
*/
public final class SonicMfContainerTool
{
public static final String TOOL_VERSION =
"2026-07-29-validate-restart-list";
"2026-07-29-validate-restart";
public static void main(String[] args)
{
@@ -29,16 +26,15 @@ public final class SonicMfContainerTool
Args parsedArguments = Args.parse(args);
if (!"validate".equals(parsedArguments.command)
&& !"restart".equals(parsedArguments.command)
&& !"list".equals(parsedArguments.command))
&& !"restart".equals(parsedArguments.command))
{
fail(
"Usage: SonicMfContainerTool "
+ "<validate|restart|list> "
+ "<validate|restart> "
+ "--domain D "
+ "--url U "
+ "--user U "
+ "[--container C] "
+ "--container C "
+ "[--timeout SEC]");
return;
}
@@ -51,12 +47,7 @@ public final class SonicMfContainerTool
return;
}
boolean needsContainer =
"validate".equals(parsedArguments.command)
|| "restart".equals(parsedArguments.command);
if (needsContainer
&& isBlank(parsedArguments.container))
if (isBlank(parsedArguments.container))
{
fail("container ist Pflicht fuer validate/restart.");
return;
@@ -82,13 +73,7 @@ public final class SonicMfContainerTool
try
{
if ("list".equals(parsedArguments.command))
{
listContainers(
connector,
parsedArguments.domain);
}
else if ("validate".equals(
if ("validate".equals(
parsedArguments.command))
{
validateConnection(
@@ -126,115 +111,6 @@ public final class SonicMfContainerTool
}
}
private static void listContainers(
Object connector,
String domain)
throws Exception
{
Method queryNamesMethod =
findMethod(
connector.getClass(),
"queryNames",
new Class[]
{
ObjectName.class,
javax.management.QueryExp.class
});
if (queryNamesMethod == null)
{
throw new IllegalStateException(
"queryNames(ObjectName, QueryExp) wurde nicht gefunden.");
}
ObjectName pattern =
new ObjectName("*:ID=AGENT");
Object rawResult = queryNamesMethod.invoke(
connector,
new Object[]
{
pattern,
null
});
if (!(rawResult instanceof Set))
{
throw new IllegalStateException(
"queryNames lieferte kein Set.");
}
Set names = (Set) rawResult;
String domainPrefix = domain + ".";
int count = 0;
System.out.println("OK:ContainerListBegin");
Iterator iterator = names.iterator();
while (iterator.hasNext())
{
Object entry = iterator.next();
if (!(entry instanceof ObjectName))
{
continue;
}
ObjectName objectName = (ObjectName) entry;
String canonical = objectName.getCanonicalName();
if (canonical == null)
{
continue;
}
// Erwartet: domain.containerName:ID=AGENT
if (!canonical.regionMatches(
true,
0,
domainPrefix,
0,
domainPrefix.length()))
{
continue;
}
int colon = canonical.indexOf(':');
if (colon <= domainPrefix.length())
{
continue;
}
String containerName =
canonical.substring(
domainPrefix.length(),
colon);
if (isBlank(containerName))
{
continue;
}
System.out.println(
"CONTAINER="
+ containerName.trim());
count++;
}
System.out.println(
"OK:ContainerListEnd count="
+ count
+ " domain="
+ domain
+ " tool="
+ TOOL_VERSION);
System.out.flush();
}
private static Object connect(
String url,
String user,