You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/03/22 20:34:17 UTC
svn commit: r1459947 [2/2] - in /manifoldcf/trunk: ./ connectors/livelink/
connectors/livelink/build-stub/src/main/java/com/opentext/api/
connectors/livelink/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/livelink/
connectors/livelink...
Modified: manifoldcf/trunk/connectors/livelink/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/livelink/LivelinkConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/livelink/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/livelink/LivelinkConnector.java?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/livelink/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/livelink/LivelinkConnector.java (original)
+++ manifoldcf/trunk/connectors/livelink/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/livelink/LivelinkConnector.java Fri Mar 22 19:34:17 2013
@@ -132,10 +132,16 @@ public class LivelinkConnector extends o
private int LLCATWK_ID;
// Parameter values we need
+ private String serverProtocol = null;
private String serverName = null;
private int serverPort = -1;
private String serverUsername = null;
private String serverPassword = null;
+ private String serverHTTPCgi = null;
+ private String serverHTTPNTLMDomain = null;
+ private String serverHTTPNTLMUsername = null;
+ private String serverHTTPNTLMPassword = null;
+ private IKeystoreManager serverHTTPSKeystore = null;
private String ingestProtocol = null;
private String ingestPort = null;
@@ -146,13 +152,12 @@ public class LivelinkConnector extends o
private String viewPort = null;
private String viewCgiPath = null;
- private String ntlmDomain = null;
- private String ntlmUsername = null;
- private String ntlmPassword = null;
-
- // SSL support
- private String keystoreData = null;
- private IKeystoreManager keystoreManager = null;
+ private String ingestNtlmDomain = null;
+ private String ingestNtlmUsername = null;
+ private String ingestNtlmPassword = null;
+
+ // SSL support for ingestion
+ private IKeystoreManager ingestKeystoreManager = null;
// Connection management
private ClientConnectionManager connectionManager = null;
@@ -223,7 +228,10 @@ public class LivelinkConnector extends o
try
{
// Create the session
- llServer = new LLSERVER(serverName,serverPort,serverUsername,serverPassword);
+ llServer = new LLSERVER(!serverProtocol.equals("internal"),serverProtocol.equals("https"),
+ serverName,serverPort,serverUsername,serverPassword,
+ serverHTTPCgi,serverHTTPNTLMDomain,serverHTTPNTLMUsername,serverHTTPNTLMPassword,
+ serverHTTPSKeystore);
LLDocs = new LAPI_DOCUMENTS(llServer.getLLSession());
LLAttributes = new LAPI_ATTRIBUTES(llServer.getLLSession());
@@ -306,13 +314,18 @@ public class LivelinkConnector extends o
viewPort = params.getParameter(LiveLinkParameters.viewPort);
viewCgiPath = params.getParameter(LiveLinkParameters.viewCgiPath);
- ntlmDomain = params.getParameter(LiveLinkParameters.ntlmDomain);
- ntlmUsername = params.getParameter(LiveLinkParameters.ntlmUsername);
- ntlmPassword = params.getObfuscatedParameter(LiveLinkParameters.ntlmPassword);
+ ingestNtlmDomain = params.getParameter(LiveLinkParameters.ingestNtlmDomain);
+ ingestNtlmUsername = params.getParameter(LiveLinkParameters.ingestNtlmUsername);
+ ingestNtlmPassword = params.getObfuscatedParameter(LiveLinkParameters.ingestNtlmPassword);
+ serverProtocol = params.getParameter(LiveLinkParameters.serverProtocol);
String serverPortString = params.getParameter(LiveLinkParameters.serverPort);
serverUsername = params.getParameter(LiveLinkParameters.serverUsername);
serverPassword = params.getObfuscatedParameter(LiveLinkParameters.serverPassword);
+ serverHTTPCgi = params.getParameter(LiveLinkParameters.serverHTTPCgiPath);
+ serverHTTPNTLMDomain = params.getParameter(LiveLinkParameters.serverHTTPNTLMDomain);
+ serverHTTPNTLMUsername = params.getParameter(LiveLinkParameters.serverHTTPNTLMUsername);
+ serverHTTPNTLMPassword = params.getObfuscatedParameter(LiveLinkParameters.serverHTTPNTLMPassword);
if (ingestProtocol == null || ingestProtocol.length() == 0)
ingestProtocol = "http";
@@ -373,44 +386,69 @@ public class LivelinkConnector extends o
if (viewCgiPath == null || viewCgiPath.length() == 0)
viewCgiPath = ingestCgiPath;
- if (ntlmDomain != null && ntlmDomain.length() == 0)
- ntlmDomain = null;
- if (ntlmDomain == null)
+ if (ingestNtlmDomain != null && ingestNtlmDomain.length() == 0)
+ ingestNtlmDomain = null;
+ if (ingestNtlmDomain == null)
{
- ntlmUsername = null;
- ntlmPassword = null;
+ ingestNtlmUsername = null;
+ ingestNtlmPassword = null;
}
else
{
- if (ntlmUsername == null || ntlmUsername.length() == 0)
+ if (ingestNtlmUsername == null || ingestNtlmUsername.length() == 0)
{
- ntlmUsername = serverUsername;
- if (ntlmPassword == null || ntlmPassword.length() == 0)
- ntlmPassword = serverPassword;
+ ingestNtlmUsername = serverUsername;
+ if (ingestNtlmPassword == null || ingestNtlmPassword.length() == 0)
+ ingestNtlmPassword = serverPassword;
}
else
{
- if (ntlmPassword == null)
- ntlmPassword = "";
+ if (ingestNtlmPassword == null)
+ ingestNtlmPassword = "";
}
}
- // First, create server object (llServer)
+ // Server parameter processing
+ if (serverProtocol == null || serverProtocol.length() == 0)
+ serverProtocol = "internal";
+
if (serverPortString == null)
serverPort = 2099;
else
serverPort = new Integer(serverPortString).intValue();
+
+ if (serverHTTPNTLMDomain != null && serverHTTPNTLMDomain.length() == 0)
+ serverHTTPNTLMDomain = null;
+ if (serverHTTPNTLMUsername == null || serverHTTPNTLMUsername.length() == 0)
+ {
+ serverHTTPNTLMUsername = serverUsername;
+ if (serverHTTPNTLMPassword == null || serverHTTPNTLMPassword.length() == 0)
+ serverHTTPNTLMPassword = serverPassword;
+ }
+ else
+ {
+ if (serverHTTPNTLMUsername == null)
+ serverHTTPNTLMUsername = "";
+ if (serverHTTPNTLMPassword == null)
+ serverHTTPNTLMPassword = "";
+ }
// Set up connection manager
PoolingClientConnectionManager localConnectionManager = new PoolingClientConnectionManager();
localConnectionManager.setMaxTotal(1);
- // Set up ssl if indicated
- keystoreData = params.getParameter(LiveLinkParameters.livelinkKeystore);
- if (keystoreData != null)
+
+ // Set up server ssl if indicated
+ String serverHTTPSKeystoreData = params.getParameter(LiveLinkParameters.serverHTTPSKeystore);
+ if (serverHTTPSKeystoreData != null)
+ serverHTTPSKeystore = KeystoreManagerFactory.make("",serverHTTPSKeystoreData);
+
+ // Set up ingest ssl if indicated
+ String ingestKeystoreData = params.getParameter(LiveLinkParameters.ingestKeystore);
+ if (ingestKeystoreData != null)
{
- keystoreManager = KeystoreManagerFactory.make("",keystoreData);
- SSLSocketFactory myFactory = new SSLSocketFactory(keystoreManager.getSecureSocketFactory(),
+ ingestKeystoreManager = KeystoreManagerFactory.make("",ingestKeystoreData);
+ SSLSocketFactory myFactory = new SSLSocketFactory(ingestKeystoreManager.getSecureSocketFactory(),
new BrowserCompatHostnameVerifier());
Scheme myHttpsProtocol = new Scheme("https", 443, myFactory);
localConnectionManager.getSchemeRegistry().register(myHttpsProtocol);
@@ -441,10 +479,10 @@ public class LivelinkConnector extends o
localHttpClient.setRedirectStrategy(new DefaultRedirectStrategy());
// Set up authentication to use
- if (ntlmDomain != null)
+ if (ingestNtlmDomain != null)
{
localHttpClient.getCredentialsProvider().setCredentials(AuthScope.ANY,
- new NTCredentials(ntlmUsername,ntlmPassword,currentHost,ntlmDomain));
+ new NTCredentials(ingestNtlmUsername,ingestNtlmPassword,currentHost,ingestNtlmDomain));
}
httpClient = localHttpClient;
@@ -619,14 +657,19 @@ public class LivelinkConnector extends o
llServer = null;
LLDocs = null;
LLAttributes = null;
- keystoreData = null;
- keystoreManager = null;
+ ingestKeystoreManager = null;
ingestPortNumber = -1;
+ serverProtocol = null;
serverName = null;
serverPort = -1;
serverUsername = null;
serverPassword = null;
+ serverHTTPCgi = null;
+ serverHTTPNTLMDomain = null;
+ serverHTTPNTLMUsername = null;
+ serverHTTPNTLMPassword = null;
+ serverHTTPSKeystore = null;
ingestPort = null;
ingestProtocol = null;
@@ -639,9 +682,9 @@ public class LivelinkConnector extends o
viewBasePath = null;
- ntlmDomain = null;
- ntlmUsername = null;
- ntlmPassword = null;
+ ingestNtlmDomain = null;
+ ingestNtlmUsername = null;
+ ingestNtlmPassword = null;
if (connectionManager != null)
connectionManager.shutdown();
@@ -1436,23 +1479,44 @@ public class LivelinkConnector extends o
out.print(
"<script type=\"text/javascript\">\n"+
"<!--\n"+
-"function LLDeleteCertificate(aliasName)\n"+
+"function ServerDeleteCertificate(aliasName)\n"+
+"{\n"+
+" editconnection.serverkeystorealias.value = aliasName;\n"+
+" editconnection.serverconfigop.value = \"Delete\";\n"+
+" postForm();\n"+
+"}\n"+
+"\n"+
+"function ServerAddCertificate()\n"+
+"{\n"+
+" if (editconnection.servercertificate.value == \"\")\n"+
+" {\n"+
+" alert(\""+Messages.getBodyJavascriptString(locale,"LivelinkConnector.ChooseACertificateFile")+"\");\n"+
+" editconnection.servercertificate.focus();\n"+
+" }\n"+
+" else\n"+
+" {\n"+
+" editconnection.serverconfigop.value = \"Add\";\n"+
+" postForm();\n"+
+" }\n"+
+"}\n"+
+"\n"+
+"function IngestDeleteCertificate(aliasName)\n"+
"{\n"+
-" editconnection.llkeystorealias.value = aliasName;\n"+
-" editconnection.configop.value = \"Delete\";\n"+
+" editconnection.ingestkeystorealias.value = aliasName;\n"+
+" editconnection.ingestconfigop.value = \"Delete\";\n"+
" postForm();\n"+
"}\n"+
"\n"+
-"function LLAddCertificate()\n"+
+"function IngestAddCertificate()\n"+
"{\n"+
-" if (editconnection.llcertificate.value == \"\")\n"+
+" if (editconnection.ingestcertificate.value == \"\")\n"+
" {\n"+
" alert(\""+Messages.getBodyJavascriptString(locale,"LivelinkConnector.ChooseACertificateFile")+"\");\n"+
-" editconnection.llcertificate.focus();\n"+
+" editconnection.ingestcertificate.focus();\n"+
" }\n"+
" else\n"+
" {\n"+
-" editconnection.configop.value = \"Add\";\n"+
+" editconnection.ingestconfigop.value = \"Add\";\n"+
" postForm();\n"+
" }\n"+
"}\n"+
@@ -1496,6 +1560,20 @@ public class LivelinkConnector extends o
" editconnection.serverport.focus();\n"+
" return false;\n"+
" }\n"+
+" if (editconnection.serverhttpcgipath.value == \"\")\n"+
+" {\n"+
+" alert(\""+Messages.getBodyJavascriptString(locale,"LivelinkConnector.EnterTheServerCgiPathToLivelink")+"\");\n"+
+" SelectTab(\"" + Messages.getBodyJavascriptString(locale,"LivelinkConnector.Server") + "\");\n"+
+" editconnection.serverhttpcgipath.focus();\n"+
+" return false;\n"+
+" }\n"+
+" if (editconnection.serverhttpcgipath.value.substring(0,1) != \"/\")\n"+
+" {\n"+
+" alert(\""+Messages.getBodyJavascriptString(locale,"LivelinkConnector.TheServerCgiPathMustBeginWithACharacter")+"\");\n"+
+" SelectTab(\"" + Messages.getBodyJavascriptString(locale,"LivelinkConnector.Server") + "\");\n"+
+" editconnection.serverhttpcgipath.focus();\n"+
+" return false;\n"+
+" }\n"+
" if (editconnection.ingestcgipath.value == \"\")\n"+
" {\n"+
" alert(\""+Messages.getBodyJavascriptString(locale,"LivelinkConnector.EnterTheCrawlCgiPathToLivelink")+"\");\n"+
@@ -1539,64 +1617,109 @@ public class LivelinkConnector extends o
Locale locale, ConfigParams parameters, String tabName)
throws ManifoldCFException, IOException
{
- String ingestProtocol = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ingestProtocol);
+
+ // LAPI parameters
+ String serverProtocol = parameters.getParameter(LiveLinkParameters.serverProtocol);
+ if (serverProtocol == null)
+ serverProtocol = "internal";
+ String serverName = parameters.getParameter(LiveLinkParameters.serverName);
+ if (serverName == null)
+ serverName = "localhost";
+ String serverPort = parameters.getParameter(LiveLinkParameters.serverPort);
+ if (serverPort == null)
+ serverPort = "2099";
+ String serverUserName = parameters.getParameter(LiveLinkParameters.serverUsername);
+ if (serverUserName == null)
+ serverUserName = "";
+ String serverPassword = parameters.getObfuscatedParameter(LiveLinkParameters.serverPassword);
+ if (serverPassword == null)
+ serverPassword = "";
+ String serverHTTPCgiPath = parameters.getParameter(LiveLinkParameters.serverHTTPCgiPath);
+ if (serverHTTPCgiPath == null)
+ serverHTTPCgiPath = "/livelink/livelink.exe";
+ String serverHTTPNTLMDomain = parameters.getParameter(LiveLinkParameters.serverHTTPNTLMDomain);
+ if (serverHTTPNTLMDomain == null)
+ serverHTTPNTLMDomain = "";
+ String serverHTTPNTLMUserName = parameters.getParameter(LiveLinkParameters.serverHTTPNTLMUsername);
+ if (serverHTTPNTLMUserName == null)
+ serverHTTPNTLMUserName = "";
+ String serverHTTPNTLMPassword = parameters.getObfuscatedParameter(LiveLinkParameters.serverHTTPNTLMPassword);
+ if (serverHTTPNTLMPassword == null)
+ serverHTTPNTLMPassword = "";
+ String serverHTTPSKeystore = parameters.getParameter(LiveLinkParameters.serverHTTPSKeystore);
+ IKeystoreManager localServerHTTPSKeystore;
+ if (serverHTTPSKeystore == null)
+ localServerHTTPSKeystore = KeystoreManagerFactory.make("");
+ else
+ localServerHTTPSKeystore = KeystoreManagerFactory.make("",serverHTTPSKeystore);
+
+ // Document access parameters
+ String ingestProtocol = parameters.getParameter(LiveLinkParameters.ingestProtocol);
if (ingestProtocol == null)
ingestProtocol = "http";
- String ingestPort = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ingestPort);
+ String ingestPort = parameters.getParameter(LiveLinkParameters.ingestPort);
if (ingestPort == null)
ingestPort = "";
- String ingestCgiPath = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ingestCgiPath);
+ String ingestCgiPath = parameters.getParameter(LiveLinkParameters.ingestCgiPath);
if (ingestCgiPath == null)
ingestCgiPath = "/livelink/livelink.exe";
- String viewProtocol = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewProtocol);
+ String ingestNtlmUsername = parameters.getParameter(LiveLinkParameters.ingestNtlmUsername);
+ if (ingestNtlmUsername == null)
+ ingestNtlmUsername = "";
+ String ingestNtlmPassword = parameters.getObfuscatedParameter(LiveLinkParameters.ingestNtlmPassword);
+ if (ingestNtlmPassword == null)
+ ingestNtlmPassword = "";
+ String ingestNtlmDomain = parameters.getParameter(LiveLinkParameters.ingestNtlmDomain);
+ if (ingestNtlmDomain == null)
+ ingestNtlmDomain = "";
+ String ingestKeystore = parameters.getParameter(LiveLinkParameters.ingestKeystore);
+ IKeystoreManager localIngestKeystore;
+ if (ingestKeystore == null)
+ localIngestKeystore = KeystoreManagerFactory.make("");
+ else
+ localIngestKeystore = KeystoreManagerFactory.make("",ingestKeystore);
+
+ // Document view parameters
+ String viewProtocol = parameters.getParameter(LiveLinkParameters.viewProtocol);
if (viewProtocol == null)
viewProtocol = "";
- String viewServerName = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewServerName);
+ String viewServerName = parameters.getParameter(LiveLinkParameters.viewServerName);
if (viewServerName == null)
viewServerName = "";
- String viewPort = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewPort);
+ String viewPort = parameters.getParameter(LiveLinkParameters.viewPort);
if (viewPort == null)
viewPort = "";
- String viewCgiPath = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewCgiPath);
+ String viewCgiPath = parameters.getParameter(LiveLinkParameters.viewCgiPath);
if (viewCgiPath == null)
viewCgiPath = "";
- String serverName = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverName);
- if (serverName == null)
- serverName = "localhost";
- String serverPort = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverPort);
- if (serverPort == null)
- serverPort = "2099";
- String serverUserName = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverUsername);
- if (serverUserName == null)
- serverUserName = "";
- String serverPassword = parameters.getObfuscatedParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverPassword);
- if (serverPassword == null)
- serverPassword = "";
- String ntlmUsername = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ntlmUsername);
- if (ntlmUsername == null)
- ntlmUsername = "";
- String ntlmPassword = parameters.getObfuscatedParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ntlmPassword);
- if (ntlmPassword == null)
- ntlmPassword = "";
- String ntlmDomain = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ntlmDomain);
- if (ntlmDomain == null)
- ntlmDomain = "";
- String livelinkKeystore = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.livelinkKeystore);
- IKeystoreManager localKeystore;
- if (livelinkKeystore == null)
- localKeystore = KeystoreManagerFactory.make("");
- else
- localKeystore = KeystoreManagerFactory.make("",livelinkKeystore);
+
+ // The "Server" tab
+ // Always pass the whole keystore as a hidden.
out.print(
-"<input name=\"configop\" type=\"hidden\" value=\"Continue\"/>\n"
+"<input name=\"serverconfigop\" type=\"hidden\" value=\"Continue\"/>\n"
);
- // The "Server" tab
+ if (serverHTTPSKeystore != null)
+ {
+ out.print(
+"<input type=\"hidden\" name=\"serverhttpskeystoredata\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPSKeystore)+"\"/>\n"
+ );
+ }
if (tabName.equals(Messages.getString(locale,"LivelinkConnector.Server")))
{
out.print(
"<table class=\"displaytable\">\n"+
" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
" <tr>\n"+
+" <td class=\"description\">"+Messages.getBodyString(locale,"LivelinkConnector.ServerProtocol")+"</td>\n"+
+" <td class=\"value\">\n"+
+" <select name=\"serverprotocol\" size=\"2\">\n"+
+" <option value=\"internal\" "+((serverProtocol.equals("internal"))?"selected=\"selected\"":"")+">"+Messages.getBodyString(locale,"LivelinkConnector.internal")+"</option>\n"+
+" <option value=\"http\" "+((serverProtocol.equals("http"))?"selected=\"selected\"":"")+">http</option>\n"+
+" <option value=\"https\" "+((serverProtocol.equals("https"))?"selected=\"selected\"":"")+">https</option>\n"+
+" </select>\n"+
+" </td>\n"+
+" </tr>\n"+
+" <tr>\n"+
" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.ServerName")+"</nobr></td>\n"+
" <td class=\"value\"><input type=\"text\" size=\"64\" name=\"servername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverName)+"\"/></td>\n"+
" </tr>\n"+
@@ -1612,6 +1735,72 @@ public class LivelinkConnector extends o
" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.ServerPassword")+"</nobr></td>\n"+
" <td class=\"value\"><input type=\"password\" size=\"32\" name=\"serverpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverPassword)+"\"/></td>\n"+
" </tr>\n"+
+" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.ServerHTTPCGIPath")+"</nobr></td>\n"+
+" <td class=\"value\"><input type=\"text\" size=\"32\" name=\"serverhttpcgipath\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPCgiPath)+"\"/></td>\n"+
+" </tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.ServerHTTPNTLMDomain")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfNTLMAuthDesired")+"</nobr></td>\n"+
+" <td class=\"value\">\n"+
+" <input type=\"text\" size=\"32\" name=\"serverhttpntlmdomain\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPNTLMDomain)+"\"/>\n"+
+" </td>\n"+
+" </tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.ServerHTTPNTLMUserName")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfDifferentFromServerUserName")+"</nobr></td>\n"+
+" <td class=\"value\">\n"+
+" <input type=\"text\" size=\"32\" name=\"serverhttpntlmusername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPNTLMUserName)+"\"/>\n"+
+" </td>\n"+
+" </tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.ServerHTTPNTLMPassword")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfDifferentFromServerPassword")+"</nobr></td>\n"+
+" <td class=\"value\">\n"+
+" <input type=\"password\" size=\"32\" name=\"serverhttpntlmpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPNTLMPassword)+"\"/>\n"+
+" </td>\n"+
+" </tr>\n"+
+" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
+ );
+ out.print(
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.ServerSSLCertificateList")+"</nobr></td>\n"+
+" <td class=\"value\">\n"+
+" <input type=\"hidden\" name=\"serverkeystorealias\" value=\"\"/>\n"+
+" <table class=\"displaytable\">\n"
+ );
+ // List the individual certificates in the store, with a delete button for each
+ String[] contents = localServerHTTPSKeystore.getContents();
+ if (contents.length == 0)
+ {
+ out.print(
+" <tr><td class=\"message\" colspan=\"2\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.NoCertificatesPresent")+"</nobr></td></tr>\n"
+ );
+ }
+ else
+ {
+ int i = 0;
+ while (i < contents.length)
+ {
+ String alias = contents[i];
+ String description = localServerHTTPSKeystore.getDescription(alias);
+ if (description.length() > 128)
+ description = description.substring(0,125) + "...";
+ out.print(
+" <tr>\n"+
+" <td class=\"value\"><input type=\"button\" onclick='Javascript:ServerDeleteCertificate(\""+org.apache.manifoldcf.ui.util.Encoder.attributeJavascriptEscape(alias)+"\")' alt=\""+Messages.getAttributeString(locale,"LivelinkConnector.DeleteCert")+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(alias)+"\" value=\""+Messages.getAttributeString(locale,"LivelinkConnector.Delete")+"\"/></td>\n"+
+" <td>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(description)+"</td>\n"+
+" </tr>\n"
+ );
+ i++;
+ }
+ }
+ out.print(
+" </table>\n"+
+" <input type=\"button\" onclick='Javascript:ServerAddCertificate()' alt=\""+Messages.getAttributeString(locale,"LivelinkConnector.AddCert")+"\" value=\""+Messages.getAttributeString(locale,"LivelinkConnector.Add")+"\"/> \n"+
+" "+Messages.getBodyString(locale,"LivelinkConnector.Certificate")+"<input name=\"servercertificate\" size=\"50\" type=\"file\"/>\n"+
+" </td>\n"+
+" </tr>\n"
+ );
+ out.print(
"</table>\n"
);
}
@@ -1619,19 +1808,27 @@ public class LivelinkConnector extends o
{
// Hiddens for Server tab
out.print(
+"<input type=\"hidden\" name=\"serverprotocol\" value=\""+serverProtocol+"\"/>\n"+
"<input type=\"hidden\" name=\"servername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverName)+"\"/>\n"+
"<input type=\"hidden\" name=\"serverport\" value=\""+serverPort+"\"/>\n"+
"<input type=\"hidden\" name=\"serverusername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverUserName)+"\"/>\n"+
-"<input type=\"hidden\" name=\"serverpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverPassword)+"\"/>\n"
+"<input type=\"hidden\" name=\"serverpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverPassword)+"\"/>\n"+
+"<input type=\"hidden\" name=\"serverhttpcgipath\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPCgiPath)+"\"/>\n"+
+"<input type=\"hidden\" name=\"serverhttpntlmdomain\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPNTLMDomain)+"\"/>\n"+
+"<input type=\"hidden\" name=\"serverhttpntlmusername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPNTLMUserName)+"\"/>\n"+
+"<input type=\"hidden\" name=\"serverhttpntlmpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(serverHTTPNTLMPassword)+"\"/>\n"
);
}
// The "Document Access" tab
// Always pass the whole keystore as a hidden.
- if (livelinkKeystore != null)
+ out.print(
+"<input name=\"ingestconfigop\" type=\"hidden\" value=\"Continue\"/>\n"
+ );
+ if (ingestKeystore != null)
{
out.print(
-"<input type=\"hidden\" name=\"keystoredata\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(livelinkKeystore)+"\"/>\n"
+"<input type=\"hidden\" name=\"ingestkeystoredata\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestKeystore)+"\"/>\n"
);
}
if (tabName.equals(Messages.getString(locale,"LivelinkConnector.DocumentAccess")))
@@ -1652,14 +1849,40 @@ public class LivelinkConnector extends o
" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchPort")+"</nobr></td>\n"+
" <td class=\"value\"><input type=\"text\" size=\"5\" name=\"ingestport\" value=\""+ingestPort+"\"/></td>\n"+
" </tr>\n"+
+" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchCGIPath")+"</nobr></td>\n"+
+" <td class=\"value\"><input type=\"text\" size=\"32\" name=\"ingestcgipath\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestCgiPath)+"\"/></td>\n"+
+" </tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchNTLMDomain")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfNTLMAuthDesired")+"</nobr></td>\n"+
+" <td class=\"value\">\n"+
+" <input type=\"text\" size=\"32\" name=\"ingestntlmdomain\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestNtlmDomain)+"\"/>\n"+
+" </td>\n"+
+" </tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchNTLMUserName")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfDifferentFromServerUserName")+"</nobr></td>\n"+
+" <td class=\"value\">\n"+
+" <input type=\"text\" size=\"32\" name=\"ingestntlmusername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestNtlmUsername)+"\"/>\n"+
+" </td>\n"+
+" </tr>\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchNTLMPassword")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfDifferentFromServerPassword")+"</nobr></td>\n"+
+" <td class=\"value\">\n"+
+" <input type=\"password\" size=\"32\" name=\"ingestntlmpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestNtlmPassword)+"\"/>\n"+
+" </td>\n"+
+" </tr>\n"+
+" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
+ );
+ out.print(
" <tr>\n"+
" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchSSLCertificateList")+"</nobr></td>\n"+
" <td class=\"value\">\n"+
-" <input type=\"hidden\" name=\"llkeystorealias\" value=\"\"/>\n"+
+" <input type=\"hidden\" name=\"ingestkeystorealias\" value=\"\"/>\n"+
" <table class=\"displaytable\">\n"
);
// List the individual certificates in the store, with a delete button for each
- String[] contents = localKeystore.getContents();
+ String[] contents = localIngestKeystore.getContents();
if (contents.length == 0)
{
out.print(
@@ -1672,12 +1895,12 @@ public class LivelinkConnector extends o
while (i < contents.length)
{
String alias = contents[i];
- String description = localKeystore.getDescription(alias);
+ String description = localIngestKeystore.getDescription(alias);
if (description.length() > 128)
description = description.substring(0,125) + "...";
out.print(
" <tr>\n"+
-" <td class=\"value\"><input type=\"button\" onclick='Javascript:LLDeleteCertificate(\""+org.apache.manifoldcf.ui.util.Encoder.attributeJavascriptEscape(alias)+"\")' alt=\""+Messages.getAttributeString(locale,"LivelinkConnector.DeleteCert")+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(alias)+"\" value=\"Delete\"/></td>\n"+
+" <td class=\"value\"><input type=\"button\" onclick='Javascript:IngestDeleteCertificate(\""+org.apache.manifoldcf.ui.util.Encoder.attributeJavascriptEscape(alias)+"\")' alt=\""+Messages.getAttributeString(locale,"LivelinkConnector.DeleteCert")+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(alias)+"\" value=\""+Messages.getAttributeString(locale,"LivelinkConnector.Delete")+"\"/></td>\n"+
" <td>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(description)+"</td>\n"+
" </tr>\n"
);
@@ -1686,32 +1909,12 @@ public class LivelinkConnector extends o
}
out.print(
" </table>\n"+
-" <input type=\"button\" onclick='Javascript:LLAddCertificate()' alt=\""+Messages.getAttributeString(locale,"LivelinkConnector.AddCert")+"\" value=\"Add\"/> \n"+
-" "+Messages.getBodyString(locale,"LivelinkConnector.Certificate")+"<input name=\"llcertificate\" size=\"50\" type=\"file\"/>\n"+
+" <input type=\"button\" onclick='Javascript:IngestAddCertificate()' alt=\""+Messages.getAttributeString(locale,"LivelinkConnector.AddCert")+"\" value=\""+Messages.getAttributeString(locale,"LivelinkConnector.Add")+"\"/> \n"+
+" "+Messages.getBodyString(locale,"LivelinkConnector.Certificate")+"<input name=\"ingestcertificate\" size=\"50\" type=\"file\"/>\n"+
" </td>\n"+
-" </tr>\n"+
-" <tr>\n"+
-" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchCGIPath")+"</nobr></td>\n"+
-" <td class=\"value\"><input type=\"text\" size=\"32\" name=\"ingestcgipath\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestCgiPath)+"\"/></td>\n"+
-" </tr>\n"+
-" <tr>\n"+
-" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchNTLMDomain")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfNTLMAuthDesired")+"</nobr></td>\n"+
-" <td class=\"value\">\n"+
-" <input type=\"text\" size=\"32\" name=\"ntlmdomain\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ntlmDomain)+"\"/>\n"+
-" </td>\n"+
-" </tr>\n"+
-" <tr>\n"+
-" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchNTLMUserName")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfDifferentFromServerUserName")+"</nobr></td>\n"+
-" <td class=\"value\">\n"+
-" <input type=\"text\" size=\"32\" name=\"ntlmusername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ntlmUsername)+"\"/>\n"+
-" </td>\n"+
-" </tr>\n"+
-" <tr>\n"+
-" <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.DocumentFetchNTLMPassword")+"</nobr><br/><nobr>"+Messages.getBodyString(locale,"LivelinkConnector.SetIfDifferentFromServerPassword")+"</nobr></td>\n"+
-" <td class=\"value\">\n"+
-" <input type=\"password\" size=\"32\" name=\"ntlmpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ntlmPassword)+"\"/>\n"+
-" </td>\n"+
-" </tr>\n"+
+" </tr>\n"
+ );
+ out.print(
"</table>\n"
);
}
@@ -1722,9 +1925,9 @@ public class LivelinkConnector extends o
"<input type=\"hidden\" name=\"ingestprotocol\" value=\""+ingestProtocol+"\"/>\n"+
"<input type=\"hidden\" name=\"ingestport\" value=\""+ingestPort+"\"/>\n"+
"<input type=\"hidden\" name=\"ingestcgipath\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestCgiPath)+"\"/>\n"+
-"<input type=\"hidden\" name=\"ntlmusername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ntlmUsername)+"\"/>\n"+
-"<input type=\"hidden\" name=\"ntlmpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ntlmPassword)+"\"/>\n"+
-"<input type=\"hidden\" name=\"ntlmdomain\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ntlmDomain)+"\"/>\n"
+"<input type=\"hidden\" name=\"ingestntlmusername\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestNtlmUsername)+"\"/>\n"+
+"<input type=\"hidden\" name=\"ingestntlmpassword\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestNtlmPassword)+"\"/>\n"+
+"<input type=\"hidden\" name=\"ingestntlmdomain\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(ingestNtlmDomain)+"\"/>\n"
);
}
@@ -1785,75 +1988,153 @@ public class LivelinkConnector extends o
Locale locale, ConfigParams parameters)
throws ManifoldCFException
{
- String serverName = variableContext.getParameter("servername");
- if (serverName != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverName,serverName);
- String serverPort = variableContext.getParameter("serverport");
- if (serverPort != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverPort,serverPort);
- String ingestProtocol = variableContext.getParameter("ingestprotocol");
- if (ingestProtocol != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ingestProtocol,ingestProtocol);
- String ingestPort = variableContext.getParameter("ingestport");
- if (ingestPort != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ingestPort,ingestPort);
- String ingestCgiPath = variableContext.getParameter("ingestcgipath");
- if (ingestCgiPath != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ingestCgiPath,ingestCgiPath);
+ // View parameters
String viewProtocol = variableContext.getParameter("viewprotocol");
if (viewProtocol != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewProtocol,viewProtocol);
+ parameters.setParameter(LiveLinkParameters.viewProtocol,viewProtocol);
String viewServerName = variableContext.getParameter("viewservername");
if (viewServerName != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewServerName,viewServerName);
+ parameters.setParameter(LiveLinkParameters.viewServerName,viewServerName);
String viewPort = variableContext.getParameter("viewport");
if (viewPort != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewPort,viewPort);
+ parameters.setParameter(LiveLinkParameters.viewPort,viewPort);
String viewCgiPath = variableContext.getParameter("viewcgipath");
if (viewCgiPath != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.viewCgiPath,viewCgiPath);
+ parameters.setParameter(LiveLinkParameters.viewCgiPath,viewCgiPath);
+
+ // Server parameters
+ String serverProtocol = variableContext.getParameter("serverprotocol");
+ if (serverProtocol != null)
+ parameters.setParameter(LiveLinkParameters.serverProtocol,serverProtocol);
+ String serverName = variableContext.getParameter("servername");
+ if (serverName != null)
+ parameters.setParameter(LiveLinkParameters.serverName,serverName);
+ String serverPort = variableContext.getParameter("serverport");
+ if (serverPort != null)
+ parameters.setParameter(LiveLinkParameters.serverPort,serverPort);
String serverUserName = variableContext.getParameter("serverusername");
if (serverUserName != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverUsername,serverUserName);
+ parameters.setParameter(LiveLinkParameters.serverUsername,serverUserName);
String serverPassword = variableContext.getParameter("serverpassword");
if (serverPassword != null)
- parameters.setObfuscatedParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.serverPassword,serverPassword);
- String ntlmDomain = variableContext.getParameter("ntlmdomain");
- if (ntlmDomain != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ntlmDomain,ntlmDomain);
- String ntlmUsername = variableContext.getParameter("ntlmusername");
- if (ntlmUsername != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ntlmUsername,ntlmUsername);
- String ntlmPassword = variableContext.getParameter("ntlmpassword");
- if (ntlmPassword != null)
- parameters.setObfuscatedParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.ntlmPassword,ntlmPassword);
- String keystoreValue = variableContext.getParameter("keystoredata");
- if (keystoreValue != null)
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.livelinkKeystore,keystoreValue);
+ parameters.setObfuscatedParameter(LiveLinkParameters.serverPassword,serverPassword);
+ String serverHTTPCgiPath = variableContext.getParameter("serverhttpcgipath");
+ if (serverHTTPCgiPath != null)
+ parameters.setParameter(LiveLinkParameters.serverHTTPCgiPath,serverHTTPCgiPath);
+ String serverHTTPNTLMDomain = variableContext.getParameter("serverhttpntlmdomain");
+ if (serverHTTPNTLMDomain != null)
+ parameters.setParameter(LiveLinkParameters.serverHTTPNTLMDomain,serverHTTPNTLMDomain);
+ String serverHTTPNTLMUserName = variableContext.getParameter("serverhttpntlmusername");
+ if (serverHTTPNTLMUserName != null)
+ parameters.setParameter(LiveLinkParameters.serverHTTPNTLMUsername,serverHTTPNTLMUserName);
+ String serverHTTPNTLMPassword = variableContext.getParameter("serverhttpntlmpassword");
+ if (serverHTTPNTLMPassword != null)
+ parameters.setObfuscatedParameter(LiveLinkParameters.serverHTTPNTLMPassword,serverHTTPNTLMPassword);
+ String serverHTTPSKeystoreValue = variableContext.getParameter("serverhttpskeystoredata");
+ if (serverHTTPSKeystoreValue != null)
+ parameters.setParameter(LiveLinkParameters.serverHTTPSKeystore,serverHTTPSKeystoreValue);
+
+ String serverConfigOp = variableContext.getParameter("serverconfigop");
+ if (serverConfigOp != null)
+ {
+ if (serverConfigOp.equals("Delete"))
+ {
+ String alias = variableContext.getParameter("serverkeystorealias");
+ serverHTTPSKeystoreValue = parameters.getParameter(LiveLinkParameters.serverHTTPSKeystore);
+ IKeystoreManager mgr;
+ if (serverHTTPSKeystoreValue != null)
+ mgr = KeystoreManagerFactory.make("",serverHTTPSKeystoreValue);
+ else
+ mgr = KeystoreManagerFactory.make("");
+ mgr.remove(alias);
+ parameters.setParameter(LiveLinkParameters.serverHTTPSKeystore,mgr.getString());
+ }
+ else if (serverConfigOp.equals("Add"))
+ {
+ String alias = IDFactory.make(threadContext);
+ byte[] certificateValue = variableContext.getBinaryBytes("servercertificate");
+ serverHTTPSKeystoreValue = parameters.getParameter(LiveLinkParameters.serverHTTPSKeystore);
+ IKeystoreManager mgr;
+ if (serverHTTPSKeystoreValue != null)
+ mgr = KeystoreManagerFactory.make("",serverHTTPSKeystoreValue);
+ else
+ mgr = KeystoreManagerFactory.make("");
+ java.io.InputStream is = new java.io.ByteArrayInputStream(certificateValue);
+ String certError = null;
+ try
+ {
+ mgr.importCertificate(alias,is);
+ }
+ catch (Throwable e)
+ {
+ certError = e.getMessage();
+ }
+ finally
+ {
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ // Eat this exception
+ }
+ }
+
+ if (certError != null)
+ {
+ return "Illegal certificate: "+certError;
+ }
+ parameters.setParameter(LiveLinkParameters.serverHTTPSKeystore,mgr.getString());
+ }
+ }
- String configOp = variableContext.getParameter("configop");
- if (configOp != null)
+ // Ingest parameters
+ String ingestProtocol = variableContext.getParameter("ingestprotocol");
+ if (ingestProtocol != null)
+ parameters.setParameter(LiveLinkParameters.ingestProtocol,ingestProtocol);
+ String ingestPort = variableContext.getParameter("ingestport");
+ if (ingestPort != null)
+ parameters.setParameter(LiveLinkParameters.ingestPort,ingestPort);
+ String ingestCgiPath = variableContext.getParameter("ingestcgipath");
+ if (ingestCgiPath != null)
+ parameters.setParameter(LiveLinkParameters.ingestCgiPath,ingestCgiPath);
+ String ingestNtlmDomain = variableContext.getParameter("ingestntlmdomain");
+ if (ingestNtlmDomain != null)
+ parameters.setParameter(LiveLinkParameters.ingestNtlmDomain,ingestNtlmDomain);
+ String ingestNtlmUsername = variableContext.getParameter("ingestntlmusername");
+ if (ingestNtlmUsername != null)
+ parameters.setParameter(LiveLinkParameters.ingestNtlmUsername,ingestNtlmUsername);
+ String ingestNtlmPassword = variableContext.getParameter("ingestntlmpassword");
+ if (ingestNtlmPassword != null)
+ parameters.setObfuscatedParameter(LiveLinkParameters.ingestNtlmPassword,ingestNtlmPassword);
+ String ingestKeystoreValue = variableContext.getParameter("ingestkeystoredata");
+ if (ingestKeystoreValue != null)
+ parameters.setParameter(LiveLinkParameters.ingestKeystore,ingestKeystoreValue);
+
+ String ingestConfigOp = variableContext.getParameter("ingestconfigop");
+ if (ingestConfigOp != null)
{
- if (configOp.equals("Delete"))
+ if (ingestConfigOp.equals("Delete"))
{
- String alias = variableContext.getParameter("llkeystorealias");
- keystoreValue = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.livelinkKeystore);
+ String alias = variableContext.getParameter("ingestkeystorealias");
+ ingestKeystoreValue = parameters.getParameter(LiveLinkParameters.ingestKeystore);
IKeystoreManager mgr;
- if (keystoreValue != null)
- mgr = KeystoreManagerFactory.make("",keystoreValue);
+ if (ingestKeystoreValue != null)
+ mgr = KeystoreManagerFactory.make("",ingestKeystoreValue);
else
mgr = KeystoreManagerFactory.make("");
mgr.remove(alias);
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.livelinkKeystore,mgr.getString());
+ parameters.setParameter(LiveLinkParameters.ingestKeystore,mgr.getString());
}
- else if (configOp.equals("Add"))
+ else if (ingestConfigOp.equals("Add"))
{
String alias = IDFactory.make(threadContext);
- byte[] certificateValue = variableContext.getBinaryBytes("llcertificate");
- keystoreValue = parameters.getParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.livelinkKeystore);
+ byte[] certificateValue = variableContext.getBinaryBytes("ingestcertificate");
+ ingestKeystoreValue = parameters.getParameter(LiveLinkParameters.ingestKeystore);
IKeystoreManager mgr;
- if (keystoreValue != null)
- mgr = KeystoreManagerFactory.make("",keystoreValue);
+ if (ingestKeystoreValue != null)
+ mgr = KeystoreManagerFactory.make("",ingestKeystoreValue);
else
mgr = KeystoreManagerFactory.make("");
java.io.InputStream is = new java.io.ByteArrayInputStream(certificateValue);
@@ -1882,7 +2163,7 @@ public class LivelinkConnector extends o
{
return "Illegal certificate: "+certError;
}
- parameters.setParameter(org.apache.manifoldcf.crawler.connectors.livelink.LiveLinkParameters.livelinkKeystore,mgr.getString());
+ parameters.setParameter(LiveLinkParameters.ingestKeystore,mgr.getString());
}
}
@@ -1918,7 +2199,8 @@ public class LivelinkConnector extends o
" <nobr>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(param)+"=********</nobr><br/>\n"
);
}
- else if (param.length() >="keystore".length() && param.substring(param.length()-"keystore".length()).equalsIgnoreCase("keystore"))
+ else if (param.length() >="keystore".length() && param.substring(param.length()-"keystore".length()).equalsIgnoreCase("keystore") ||
+ param.length() > "truststore".length() && param.substring(param.length()-"truststore".length()).equalsIgnoreCase("truststore"))
{
IKeystoreManager kmanager = KeystoreManagerFactory.make("",value);
out.print(
@@ -2446,7 +2728,7 @@ public class LivelinkConnector extends o
// Find the path-value mapping data
i = 0;
- org.apache.manifoldcf.crawler.connectors.livelink.MatchMap matchMap = new org.apache.manifoldcf.crawler.connectors.livelink.MatchMap();
+ MatchMap matchMap = new MatchMap();
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i++);
@@ -3553,7 +3835,7 @@ public class LivelinkConnector extends o
);
// Find the path-value mapping data
i = 0;
- org.apache.manifoldcf.crawler.connectors.livelink.MatchMap matchMap = new org.apache.manifoldcf.crawler.connectors.livelink.MatchMap();
+ MatchMap matchMap = new MatchMap();
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i++);
@@ -6691,10 +6973,14 @@ public class LivelinkConnector extends o
e instanceof com.opentext.api.LLWebAuthInitException
)
{
-
String details = llServer.getErrors();
throw new ManifoldCFException("Livelink API error: "+e.getMessage()+((details==null)?"":"; "+details),e);
}
+ else if (e instanceof com.opentext.api.LLSSLNotAvailableException)
+ {
+ String details = llServer.getErrors();
+ throw new ManifoldCFException("Missing llssl.jar error: "+e.getMessage()+((details==null)?"":"; "+details),e);
+ }
else if (e instanceof com.opentext.api.LLIllegalOperationException)
{
// This usually means that LAPI has had a minor communication difficulty but hasn't reported it accurately.
@@ -6702,8 +6988,11 @@ public class LivelinkConnector extends o
String details = llServer.getErrors();
return assessRetry(sanityRetryCount,new ManifoldCFException("Livelink API illegal operation error: "+e.getMessage()+((details==null)?"":"; "+details),e));
}
- else if (e instanceof com.opentext.api.LLIOException)
+ else if (e instanceof com.opentext.api.LLIOException || (e instanceof RuntimeException && e.getClass().getName().startsWith("com.opentext.api.")))
{
+ // Catching obfuscated and unspecified opentext runtime exceptions now too - these come from llssl.jar. We
+ // have to presume these are SSL connection errors; nothing else to go by unfortunately. UGH.
+
// Treat this as a transient error; try again in 5 minutes, and only fail after 12 hours of trying
// LAPI is returning errors that are not terribly explicit, and I don't have control over their wording, so check that server can be resolved by DNS,
Modified: manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_en_US.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_en_US.properties?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_en_US.properties (original)
+++ manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_en_US.properties Fri Mar 22 19:34:17 2013
@@ -53,7 +53,7 @@ LivelinkConnector.DocumentFetchSSLCertif
LivelinkConnector.NoCertificatesPresent=No certificates present
LivelinkConnector.DeleteCert=Delete cert
LivelinkConnector.AddCert=Add cert
-LivelinkConnector.Certificate=Certificate:
+LivelinkConnector.Certificate=Certificate:
LivelinkConnector.DocumentFetchCGIPath=Document fetch CGI path:
LivelinkConnector.DocumentFetchNTLMDomain=Document fetch NTLM domain:
LivelinkConnector.SetIfNTLMAuthDesired=(set if NTLM auth desired)
@@ -132,3 +132,14 @@ LivelinkConnector.CacheLifetimeMustBeAnI
LivelinkConnector.CacheLRUSizeCannotBeNull=Cache LRU size cannot be null
LivelinkConnector.CacheLRUSizeMustBeAnInteger=Cache LRU size must be an integer
+LivelinkConnector.ServerProtocol=Server protocol:
+LivelinkConnector.internal=internal
+LivelinkConnector.ServerHTTPCGIPath=Server HTTP CGI path:
+LivelinkConnector.ServerHTTPNTLMDomain=Server HTTP domain:
+LivelinkConnector.ServerHTTPNTLMUserName=Server HTTP NTLM user name:
+LivelinkConnector.ServerHTTPNTLMPassword=Server HTTP NTLM password:
+LivelinkConnector.ServerSSLCertificateList=Server SSL certificate list:
+LivelinkConnector.EnterTheServerCgiPathToLivelink=Enter the server CGI path to reach Livelink
+LivelinkConnector.TheServerCgiPathMustBeginWithACharacter=The server CGI path must begin with a '/' character
+LivelinkConnector.Delete=Delete
+LivelinkConnector.Add=Add
Modified: manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_ja_JP.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_ja_JP.properties?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_ja_JP.properties (original)
+++ manifoldcf/trunk/connectors/livelink/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/livelink/common_ja_JP.properties Fri Mar 22 19:34:17 2013
@@ -99,7 +99,7 @@ LivelinkConnector.DeleteMetadata=�
LivelinkConnector.NoMetadataSpecified=ã¡ã¿ãã¼ã¿ã¯é¸æããã¦ãã¾ãã
LivelinkConnector.AddMetadataItem=ã¡ã¿ãã¼ã¿ã追å
LivelinkConnector.BackUpMetadataPath=ããã¯ã¢ããã¡ã¿ãã¼ã¿ãã¹
-LivelinkConnector.AllAttributesInThisCategory= ã«ãã´ãªã®ãã¹ã¦ã®å±æ§
+LivelinkConnector.AllAttributesInThisCategory=ã«ãã´ãªã®ãã¹ã¦ã®å±æ§
LivelinkConnector.PickAttributes=-- å±æ§ãé¸æãã¦ãã ãã --
LivelinkConnector.AddToMetadataPath=ã¡ã¿ãã¼ã¿ãã¹ã«è¿½å
LivelinkConnector.PickWorkspace=-- ã¯ã¼ã¯ã¹ãã¼ã¹ãé¸æãã¦ãã ãã --
@@ -131,3 +131,15 @@ LivelinkConnector.CacheLifetimeCannotBeN
LivelinkConnector.CacheLifetimeMustBeAnInteger=ãã£ãã·ã¥ã©ã¤ãã¿ã¤ã ã«ã¯æ´æ°ãå
¥åãã¦ãã ãã
LivelinkConnector.CacheLRUSizeCannotBeNull=ãã£ãã·ã¥LRUãµã¤ãºãå
¥åãã¦ãã ãã
LivelinkConnector.CacheLRUSizeMustBeAnInteger=ãã£ãã·ã¥LRUãµã¤ãºã«ã¯æ´æ°ãå
¥åãã¦ãã ãã
+
+LivelinkConnector.ServerProtocol=Server protocol:
+LivelinkConnector.internal=internal
+LivelinkConnector.ServerHTTPCGIPath=Server HTTP CGI path:
+LivelinkConnector.ServerHTTPNTLMDomain=Server HTTP domain:
+LivelinkConnector.ServerHTTPNTLMUserName=Server HTTP NTLM user name:
+LivelinkConnector.ServerHTTPNTLMPassword=Server HTTP NTLM password:
+LivelinkConnector.ServerSSLCertificateList=Server SSL certificate list:
+LivelinkConnector.EnterTheServerCgiPathToLivelink=Enter the server CGI path to reach Livelink
+LivelinkConnector.TheServerCgiPathMustBeginWithACharacter=The server CGI path must begin with a '/' character
+LivelinkConnector.Delete=Delete
+LivelinkConnector.Add=Add
Modified: manifoldcf/trunk/connectors/livelink/lib-proprietary/README.txt
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/livelink/lib-proprietary/README.txt?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/livelink/lib-proprietary/README.txt (original)
+++ manifoldcf/trunk/connectors/livelink/lib-proprietary/README.txt Fri Mar 22 19:34:17 2013
@@ -13,9 +13,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-The LiveLink connector requires a client library from OpenText in order to function.
-The client jar is call lapi.jar, and the version we have tested against can be found
-in the LAPI 9.7.1 package from OpenText. Copy that jar to this directory, and build the
+The LiveLink connector requires a client library from OpenText in order
+to function. The client jar is call lapi.jar, and the version we have
+tested against can be found in the LAPI 9.7.1 package from OpenText.
+For some modes of operation, the jar llssl.jar from the same package
+may also be required. Copy these jars to this directory, and build the
connector using the standard ant build process. More can be found in the
"how-to-build-and-deploy.html" documentation page.
Modified: manifoldcf/trunk/connectors/livelink/proprietary-library-instructions.txt
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/livelink/proprietary-library-instructions.txt?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/livelink/proprietary-library-instructions.txt (original)
+++ manifoldcf/trunk/connectors/livelink/proprietary-library-instructions.txt Fri Mar 22 19:34:17 2013
@@ -16,13 +16,15 @@
The LiveLink connector requires a client library from OpenText in
order to function. The client jar is call lapi.jar, and the version we
have tested against can be found in the LAPI 9.7.1 package from
-OpenText. Copy that jar to this directory, and run ManifoldCF
-using the appropriate means.
+OpenText. For some modes of operation, you may also need llssl.jar
+from the same package. Copy those jars to this directory, and run
+ManifoldCF using the appropriate means.
If you find there are incompatibilities between your version of lapi.jar
and the one your release of ManifoldCF was built against, you must build
-ManifoldCF yourself, and include a copy of your lapi.jar prior to building,
+ManifoldCF yourself, and include a copy of your jars prior to building,
in the directory "connectors/livelink/lib-proprietary".
-More can be found in the "how-to-build-and-deploy.html" documentation page.
+More can be found in the "how-to-build-and-deploy.html"
+documentation page.
Modified: manifoldcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java (original)
+++ manifoldcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java Fri Mar 22 19:34:17 2013
@@ -397,21 +397,23 @@ public class ManifoldCF
}
/** Recursive delete: for cleaning up company folder.
- *@param directoryPath is the File describing the directory to be removed.
+ *@param directoryPath is the File describing the directory or file to be removed.
*/
- protected static void recursiveDelete(File directoryPath)
+ public static void recursiveDelete(File directoryPath)
{
- File[] children = directoryPath.listFiles();
- if (children != null)
+ if (!directoryPath.exists())
+ return;
+ if (directoryPath.isDirectory())
{
- int i = 0;
- while (i < children.length)
+ File[] children = directoryPath.listFiles();
+ if (children != null)
{
- File x = children[i++];
- if (x.isDirectory())
+ int i = 0;
+ while (i < children.length)
+ {
+ File x = children[i++];
recursiveDelete(x);
- else
- x.delete();
+ }
}
}
directoryPath.delete();
@@ -718,6 +720,39 @@ public class ManifoldCF
master.dropUserAndDatabase(masterUsername,masterPassword,null);
}
+ /** Create temporary directory.
+ */
+ public static File createTempDir(String prefix, String suffix)
+ throws ManifoldCFException
+ {
+ String tempDirLocation = System.getProperty("java.io.tmpdir");
+ if (tempDirLocation == null)
+ throw new ManifoldCFException("Can't find temporary directory!");
+ File tempDir = new File(tempDirLocation);
+ // Start with current timestamp, and generate a hash, then look for collision
+ long currentFileID = System.currentTimeMillis();
+ long currentFileHash = (currentFileID << 5) ^ (currentFileID >> 3);
+ int raceConditionRepeat = 0;
+ while (raceConditionRepeat < 1000)
+ {
+ File tempCertDir = new File(tempDir,prefix+currentFileHash+suffix);
+ if (tempCertDir.mkdir())
+ {
+ return tempCertDir;
+ }
+ if (tempCertDir.exists())
+ {
+ currentFileHash++;
+ continue;
+ }
+ // Doesn't exist but couldn't create either. COULD be a race condition; we'll only know if we retry
+ // lots and nothing changes.
+ raceConditionRepeat++;
+ Thread.yield();
+ }
+ throw new ManifoldCFException("Temporary directory appears to be unwritable");
+ }
+
/** Add a file to the tracking system. */
public static void addFile(File f)
{
@@ -1194,8 +1229,8 @@ public class ManifoldCF
/** Class that tracks files that need to be cleaned up on exit */
protected static class FileTrack implements IShutdownHook
{
- /** Key and value are both File objects */
- protected Map<File,File> filesToDelete = new HashMap<File,File>();
+ /** Set of File objects */
+ protected Set<File> filesToDelete = new HashSet<File>();
/** Constructor */
public FileTrack()
@@ -1207,7 +1242,7 @@ public class ManifoldCF
{
synchronized (this)
{
- filesToDelete.put(f,f);
+ filesToDelete.add(f);
}
}
@@ -1216,12 +1251,12 @@ public class ManifoldCF
{
// Because we never reuse file names, it is OK to delete twice.
// So the delete() can be outside the synchronizer.
- f.delete();
+ recursiveDelete(f);
synchronized (this)
{
filesToDelete.remove(f);
}
- }
+ }
/** Delete all remaining files */
public void doCleanup()
@@ -1229,10 +1264,10 @@ public class ManifoldCF
{
synchronized (this)
{
- Iterator iter = filesToDelete.keySet().iterator();
+ Iterator<File> iter = filesToDelete.iterator();
while (iter.hasNext())
{
- File f = (File)iter.next();
+ File f = iter.next();
f.delete();
}
filesToDelete.clear();
Modified: manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_en_US.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_en_US.properties?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_en_US.properties (original)
+++ manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_en_US.properties Fri Mar 22 19:34:17 2013
@@ -766,7 +766,7 @@ viewauthority.EditThisAuthorityConnectio
viewauthority.Delete=Delete
viewauthority.DeleteThisAuthorityConnection=Delete this authority connection
viewauthority.ApacheManifoldCFViewAuthorityConnectionStatus=Apache ManifoldCF: View Authority Connection Status
-viewauthority.Deleteconnection=Delete connection
+viewauthority.DeleteConnection=Delete connection
viewauthority.Connectorisnotinstalled=Connector is not installed.
viewauthority.uninstalled=(uninstalled)
viewauthority.Threwexception=Threw exception:
Modified: manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_ja_JP.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_ja_JP.properties?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_ja_JP.properties (original)
+++ manifoldcf/trunk/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_ja_JP.properties Fri Mar 22 19:34:17 2013
@@ -767,7 +767,7 @@ viewauthority.EditThisAuthorityConnectio
viewauthority.Delete=åé¤
viewauthority.DeleteThisAuthorityConnection=権éã³ãã¯ã·ã§ã³ãåé¤
viewauthority.ApacheManifoldCFViewAuthorityConnectionStatus=Apache ManifoldCF: 権éã³ãã¯ã·ã§ã³ç¶æ
ã®è¡¨ç¤º
-viewauthority.Deleteconnection=Delete connection
+viewauthority.DeleteConnection=Delete connection
viewauthority.Connectorisnotinstalled=Connector is not installed.
viewauthority.uninstalled=(uninstalled)
viewauthority.Threwexception=Threw exception:
Modified: manifoldcf/trunk/site/src/documentation/content/xdocs/en_US/how-to-build-and-deploy.xml
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/site/src/documentation/content/xdocs/en_US/how-to-build-and-deploy.xml?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/site/src/documentation/content/xdocs/en_US/how-to-build-and-deploy.xml (original)
+++ manifoldcf/trunk/site/src/documentation/content/xdocs/en_US/how-to-build-and-deploy.xml Fri Mar 22 19:34:17 2013
@@ -177,9 +177,9 @@
<p>This connector needs OpenText's LAPI package in order to be run. It is usually built against a set of stubs. The stubs, however, mimic the
class structure of LAPI 9.7.1. Later versions (such as 10.x) have a different class structure. Therefore, you may need to rebuild ManifoldCF
against your lapi.jar, in order for the connector to work properly.</p>
- <p>If you need to supply your own lapi.jar at build time, copy it to the source directory <em>connectors/livelink/lib-proprietary</em>, and build using "ant build".
+ <p>If you need to supply your own lapi.jar and llssl.jar at build time, copy it to the source directory <em>connectors/livelink/lib-proprietary</em>, and build using "ant build".
The lapi.jar will be copied into the right place in your <em>dist</em> directory automatically.</p>
- <p>If you do not wish to build, simply copy your lapi.jar into the binary distribution's <em>connector-lib-proprietary</em>
+ <p>If you do not wish to build, simply copy your lapi.jar and llssl.jar into the binary distribution's <em>connector-lib-proprietary</em>
directory, and uncomment the LiveLink-related connector lines in <em>connectors.xml</em> file.</p>
<p></p>
</section>
Modified: manifoldcf/trunk/site/src/documentation/content/xdocs/ja_JP/how-to-build-and-deploy.xml
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/site/src/documentation/content/xdocs/ja_JP/how-to-build-and-deploy.xml?rev=1459947&r1=1459946&r2=1459947&view=diff
==============================================================================
--- manifoldcf/trunk/site/src/documentation/content/xdocs/ja_JP/how-to-build-and-deploy.xml (original)
+++ manifoldcf/trunk/site/src/documentation/content/xdocs/ja_JP/how-to-build-and-deploy.xml Fri Mar 22 19:34:17 2013
@@ -177,9 +177,9 @@
<p>This connector needs OpenText's LAPI package in order to be run. It is usually built against a set of stubs. The stubs, however, mimic the
class structure of LAPI 9.7.1. Later versions (such as 10.x) have a different class structure. Therefore, you may need to rebuild ManifoldCF
against your lapi.jar, in order for the connector to work properly.</p>
- <p>If you need to supply your own lapi.jar at build time, copy it to the source directory <em>connectors/livelink/lib-proprietary</em>, and build using "ant build".
+ <p>If you need to supply your own lapi.jar and llssl.jar at build time, copy it to the source directory <em>connectors/livelink/lib-proprietary</em>, and build using "ant build".
The lapi.jar will be copied into the right place in your <em>dist</em> directory automatically.</p>
- <p>If you do not wish to build, simply copy your lapi.jar into the binary distribution's <em>connector-lib-proprietary</em>
+ <p>If you do not wish to build, simply copy your lapi.jar and llssl.jar into the binary distribution's <em>connector-lib-proprietary</em>
directory, and uncomment the LiveLink-related connector lines in <em>connectors.xml</em> file.</p>
<p></p>
</section>