<body>

<h3>Table Of Contents</h3>
<li><a href="#spadaptor">SharePoint Adaptor</a></li>
<li><a href="#spuserprofileadaptor">SharePoint User Profile Adaptor</a></li>

<h3 id="spadaptor">Adaptor for SharePoint Deployment</h3>

<p>Each adaptor instance is only able to support one SharePoint Web Application.
Therefore, you will need to deploy one adaptor instance per Web Applicaton.

<h4>Requirements</h4>
<ul>
  <li>GSA 7.2 or higher
  <li>GSA user authentication configured for authentication system in use
    (typically Active Directory)
  <li>Java JRE on computer that runs adaptor (1.6u27 or higher for linux;
      Java JRE 1.7u6 or higher for windows)
  <li>SharePoint Adaptor JAR executable
  <li>User account for adaptor, with Full Read permissions to SharePoint Web
    Application in the User Policy
  <li>When running Adaptor from Windows 7, Windows Server 2008, 
      Windows Server 2008 R2 or Windows Server 2012 machine, on adaptor machine
      set local security policy for <b>Network security: LAN Manager 
      authentication level</b> to <b>Send LM &amp; NTLM - use NTLMv2 session 
      security if negotiated</b>. Use these <a href="#secpolicy">
      configuration steps</a> to set local security policy.
</ul>

<h4>Configure GSA for Adaptor</h4>
<ol>
  <li>Add the IP address of the computer that hosts the adaptor to the <b>List
    of Trusted IP Addresses</b> on the GSA.
    <p>In the GSA's Admin Console, go to <b>Content Sources &gt; Feeds</b>,
    and scroll down to <b>List of Trusted IP Addresses</b>. Add the IP address
    for the adaptor to the list.
  <li>Add the URLs provided by the adaptor to the <b>Follow Patterns</b> on the GSA.
    <p>In the Admin console, go to <b>Content Sources &gt; Web Crawl &gt; 
    Start and Block URLs</b>, and scroll down to <b>Follow Patterns</b>.
    Add an entry like <code>http://adaptor.example.com:5678/doc/
    </code> where <code>adaptor.example.com</code> is the hostname of the
    machine that hosts the adaptor. By default the adaptor runs on port 5678.
</ol>

<h4>Configure Adaptor</h4>
<ol>
  <li>Create a file named <code>adaptor-config.properties</code> in the
  directory that contains the adaptor binary. Within the file, provide the
  configuration (replacing bolded items with your real configuration):
  <pre>gsa.hostname=<b>yourgsa.example.com</b>
sharepoint.server=<b>http://yoursharepoint.example.com/</b></pre>

  <li>If the adaptor will <em>not</em> be running as the user account that has
  appropriate SharePoint permissions, then add these additional configuration
  options to <code>adaptor-config.properties</code>:
  <pre>sharepoint.username=<b>YOURDOMAIN\\AdaptorUser</b>
sharepoint.password=<b>uS3R_passWoRD</b></pre>

  <li>Create a folder named <code>logs</code> in the same directory.

  <li>Create a file named <code>logging.properties</code> in the same directory
  that contains logging configuration:
  <pre>
.level=INFO
handlers=java.util.logging.FileHandler,java.util.logging.ConsoleHandler
java.util.logging.FileHandler.formatter=com.google.enterprise.adaptor.CustomFormatter
java.util.logging.FileHandler.pattern=logs/adaptor.%g.log
java.util.logging.FileHandler.limit=10485760
java.util.logging.FileHandler.count=20
java.util.logging.ConsoleHandler.formatter=com.google.enterprise.adaptor.CustomFormatter</pre>

  <li>Run the adaptor using cmd.exe:
  <pre>java -Djava.util.logging.config.file=logging.properties -jar adaptor-sharepoint-YYYYMMDD-withlib.jar</pre>
</ol>

<h4>Running as a service</h4>
  <p>Example service creation on Windows with prunsrv:
  <pre>prunsrv install adaptor-sharepoint --StartPath="%CD%" ^
  --Classpath=adaptor-sharepoint-YYYYMMDD-withlib.jar ^
  --StartMode=jvm --StartClass=com.google.enterprise.adaptor.Daemon ^
  --StartMethod=serviceStart --StartParams=com.google.enterprise.adaptor.sharepoint.SharePointAdaptor
  --StopMode=jvm --StopClass=com.google.enterprise.adaptor.Daemon ^
  --StopMethod=serviceStop --StdOutput=stdout.log --StdError=stderr.log ^
  ++JvmOptions=-Djava.util.logging.config.file=logging.properties</pre>

  <p>Example execution on Linux with jsvc:
  <pre>jsvc -pidfile adaptor.pid -cp adaptor-sharepoint-YYYYMMDD-withlib.jar com.google.enterprise.adaptor.Daemon com.google.enterprise.adaptor.sharepoint.SharePointAdaptor</pre>

<h4>Optional <code>adaptor-config.properties</code> fields</h4>
<dl>
  <dt>
  <code>sharepoint.xmlValidation</code>
  </dt>
  <dd>
  Whether to enable strict checking of XML
  responses using the expected schema.
  Defaults to false.
  </dd>
  <dt>
  <code>sharepoint.maxIndexableSize</code>
  </dt>
  <dd>
  Number of bytes of a document that GSA indexes.  Defaults to 2097152.
  </dd>
  <dt>
  <dt>
  <code>adaptor.namespace</code>
  </dt>
  <dd>
  Namespace used for ACLs sent to GSA.  Defaults to "Default".
  </dd>
</dl>

<br>
<!-- SPUP -->
<h3 id="spuserprofileadaptor">Adaptor for SharePoint User Profiles Deployment</h3>

<p>Each adaptor instance is only able to support one User Profile Service 
Application. Therefore, you will need to deploy one adaptor instance per User 
Profile Service Application.

<h4>Requirements</h4>
<ul>
  <li>GSA 7.0 P1 or higher
  <li>GSA user authentication configured for authentication system in use
    (typically Active Directory)
  <li>Java JRE on computer that runs adaptor (1.6u27 or higher for linux;
      Java JRE 1.7u6 or higher for windows)
  <li>SharePoint User Profile Adaptor JAR executable
  <li>User account for adaptor, with Full Control permissions to SharePoint User
      Profile Service Application
  <li>When running Adaptor from Windows 7, Windows Server 2008, 
      Windows Server 2008 R2 or Windows Server 2012 machine, on adaptor machine
      set local security policy for <b>Network security: LAN Manager 
      authentication level</b> to <b>Send LM &amp; NTLM - use NTLMv2 session 
      security if negotiated</b>. Use these <a href="#secpolicy">
      configuration steps</a> to set local security policy.
</ul>

<h4>Configure GSA for Adaptor</h4>
<ol>
  <li>Add the IP address of the computer that hosts the adaptor to the <b>List
    of Trusted IP Addresses</b> on the GSA.
    <p>In the GSA's Admin Console, go to <b>Content Sources &gt; Feeds</b>,
    and scroll down to <b>List of Trusted IP Addresses</b>. Add the IP address
    for the adaptor to the list.
  <li>Add the URLs provided by the adaptor to the <b>Follow Patterns</b> on the GSA.
    <p>In the Admin console, go to <b>Content Sources &gt; Web Crawl &gt; 
    Start and Block URLs</b>, and scroll down to <b>Follow Patterns</b>.
    Add an entry like <code>http://adaptor.example.com:5678/doc/
    </code> where <code>adaptor.example.com</code> is the hostname of the
    machine that hosts the adaptor. By default the adaptor runs on port 5678.
  <li>Create and configure a new result collection for user profile documents.
    <p>In the Admin console, go to <b>Index &gt; Collections</b>, in the
    <b>Create New Collection</b> section specify a unique name for the new
    collection. Select <b>Empty</b> for <b>Initial Configuration</b> and click
    <b>Create</b>.
    <p>Then, in the <b>Current Collections</b> section click <b>Edit</b> for the
    newly-created user profile collection. In the <b>Include Content Matching
    the Following Patterns</b> box, add the URL pattern for the adaptor as used
    in step 2 and click <b>Save</b>.
  <li>Configure the default_collection to exclude user profile documents.
    <p>In the Admin console at <b>Index &gt; Collection</b>, in the <b>Current
    Collections</b> section click <b>Edit</b> for
    <code>default_collection</code>. In the <b>Do Not Include Content Matching
    the Following Patterns</b> box, add the URL pattern for the adaptor as used
    in step 2 and click <b>Save</b>.
</ol>

<h4>Configure Adaptor</h4>
<ol>
  <li>Create a file named <code>adaptor-config.properties</code> in the
  directory that contains the adaptor binary. Within the file, provide the
  configuration (replacing bolded items with your real configuration):
  <pre>gsa.hostname=<b>yourgsa.example.com</b>
sharepoint.server=<b>http://yoursharepoint.example.com/</b></pre>

  <li>If the adaptor will <em>not</em> be running as the user account that has
  appropriate SharePoint permissions, then add these additional configuration
  options to <code>adaptor-config.properties</code>:
  <pre>sharepoint.username=<b>YOURDOMAIN\\AdaptorUser</b>
sharepoint.password=<b>uS3R_passWoRD</b></pre>

  <li>Create a folder named <code>logs</code> in the same directory.

  <li>Create a file named <code>logging.properties</code> in the same directory
  that contains logging configuration:
  <pre>
.level=INFO
handlers=java.util.logging.FileHandler,java.util.logging.ConsoleHandler
java.util.logging.FileHandler.formatter=com.google.enterprise.adaptor.CustomFormatter
java.util.logging.FileHandler.pattern=logs/adaptor.%g.log
java.util.logging.FileHandler.limit=10485760
java.util.logging.FileHandler.count=20
java.util.logging.ConsoleHandler.formatter=com.google.enterprise.adaptor.CustomFormatter</pre>

  <li>Run the adaptor using cmd.exe:
  <pre>java -Djava.util.logging.config.file=logging.properties -jar adaptor-sharepoint-user-profile-YYYYMMDD-withlib.jar</pre>
</ol>

<h4>Running as a service</h4>
  <p>Example service creation on Windows with prunsrv:
  <pre>prunsrv install adaptor-sharepoint-user-profile --StartPath="%CD%" ^
  --Classpath=adaptor-sharepoint-user-profile-YYYYMMDD-withlib.jar ^
  --StartMode=jvm --StartClass=com.google.enterprise.adaptor.Daemon ^
  --StartMethod=serviceStart --StartParams=com.google.enterprise.adaptor.sharepoint.SharePointUserProfileAdaptor
  --StopMode=jvm --StopClass=com.google.enterprise.adaptor.Daemon ^
  --StopMethod=serviceStop --StdOutput=stdout.log --StdError=stderr.log ^
  ++JvmOptions=-Djava.util.logging.config.file=logging.properties</pre>

  <p>Example execution on Linux with jsvc:
  <pre>jsvc -pidfile adaptor.pid -cp adaptor-sharepoint-user-profile-YYYYMMDD-withlib.jar com.google.enterprise.adaptor.Daemon com.google.enterprise.adaptor.sharepoint.SharePointUserProfileAdaptor</pre>

<h4>Optional <code>adaptor-config.properties</code> fields</h4>
<dl>
  <dt>
  <code>profile.setacl</code>
  </dt>
  <dd>
    Whether user profile information is considered restricted
    or public. Defaults to true.
  </dd>
  <dt>
  <code>profile.mysitehost</code>
  </dt>
  <dd>
    Defaults to virtual server.
  </dd>
  <dt>
  <dt>
  <code>adaptor.namespace</code>
  </dt>
  <dd>
  Namespace used for ACLs sent to GSA.  Defaults to "Default".
  </dd>
</dl>

<h4 id="secpolicy">Steps to specify LAN Manager Authentication Level Policy</h4>
<ol>
    <li>Run <code>secpol.msc</code> on Adaptor machine.        
    <li>Under Security settings, navigate to Local policies > Security Options.
    <li>Select Network security: LAN Manager authentication level policy and 
        set it to Send LM &amp; NTLM - use NTLMv2 session security if negotiated.   
</ol>
</body>
