<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>A single instance of SharePoint adaptor can have GSA index a single 
SharePoint Web Application.  An adaptor instance is needed 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 on Linux;
      1.7u6 or higher on Windows)
  <li>SharePoint adaptor JAR executable
  <li>User account, with Full Read permissions to SharePoint Web
    Application, in the User Policy
  <li>If running adaptor on Windows 7, Windows Server 2008, Windows Server 2008 R2
    or Windows Server 2012 machine:
    <p>
    <b>Specify LAN Manager Authentication Level Policy</b>
    <ol>
    <li>Run <code>secpol.msc</code> on adaptor machine
    <li>Under Security settings, navigate to Local policies > Security options.
    <li>Select <b>Network security: LAN Manager authentication level</b> and 
        set it to <b>Send LM &amp; NTLM - use NTLMv2 session security if negotiated</b>.   
    </ol>
    </p>
</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>server.dashboardPort</code>
  </dt>
  <dd>
  Port on which to view web page showing information
  and diagnostics.  Defaults to "5679".
  </dd>
  <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>A single instance of SharePoint User Profile adaptor can have GSA index
a single User Profile Service Application.  An adaptor instance is needed 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 on Linux;
      1.7u6 or higher on Windows)
  <li>SharePoint User Profile adaptor JAR executable
  <li>User account, with Full Control permissions to SharePoint User
      Profile Service Application
  <li>If running adaptor on Windows 7, Windows Server 2008, Windows Server 2008 R2
    or Windows Server 2012 machine:
    <p>
    <b>Specify LAN Manager Authentication Level Policy</b>
    <ol>
    <li>Run <code>secpol.msc</code> on adaptor machine
    <li>Under Security settings, navigate to Local policies > Security options.
    <li>Select <b>Network security: LAN Manager authentication level</b> and 
        set it to <b>Send LM &amp; NTLM - use NTLMv2 session security if negotiated</b>.   
    </ol>
    </p>
</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>server.dashboardPort</code>
  </dt>
  <dd>
  Port on which to view web page showing information
  and diagnostics.  Defaults to "5679".
  </dd>
  <dt>
  <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>
</body>
