<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>If the adaptor needs to use <em>Live Authentication</em> to connect 
  to SharePoint, then add these additional configuration options 
  to <code>adaptor-config.properties</code>:
  <pre>sharepoint.username=<b>AdaptorUser Live Authentication Id</b>
sharepoint.password=<b>uS3R_passWoRD</b>
sharepoint.useLiveAuthentication=<b>true</b></pre>
  
  <li>If the adaptor needs to use <em>ADFS Authentication</em> to connect 
  to SharePoint, then add these additional configuration options 
  to <code>adaptor-config.properties</code>:
  <pre>sharepoint.username=<b>AdaptorUser@yourdomain.com</b>
sharepoint.password=<b>uS3R_passWoRD</b>
sharepoint.sts.endpoint=<b>https://adfs.exaple.com/adfs/services/trust/2005/usernamemixed
</b>sharepoint.sts.realm=<b>urn:myserver:sharepoint</b> or <b>https://yoursharepoint.example.com/_trust</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>
  <dt>
  <code>adaptor.docHeaderTimeoutSecs</code>
  </dt>
  <dd>
  Number of seconds adaptor has to start sending content before it is 
  interrupted. Defaults to 30 seconds. Also used as connection timeout value for
  establishing connection with SharePoint server for making web service calls.
  </dd>
  <dt>
  <code>adaptor.docContentTimeoutSecs</code>
  </dt>
  <dd>
  Number of seconds adaptor has to complete sending content before it is 
  interrupted. Timing starts when sending content starts.
  Defaults to 180 seconds. Also used as request timeout value while making
  SharePoint web service call to complete a particular web service call.
  </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>If the adaptor needs to use <em>Live Authentication</em> to connect 
  to SharePoint, then add these additional configuration options 
  to <code>adaptor-config.properties</code>:
  <pre>sharepoint.username=<b>AdaptorUser Live Authentication Id</b>
sharepoint.password=<b>uS3R_passWoRD</b>
sharepoint.useLiveAuthentication=<b>true</b></pre>
  
  <li>If the adaptor needs to use <em>ADFS Authentication</em> to connect 
  to SharePoint, then add these additional configuration options 
  to <code>adaptor-config.properties</code>:
  <pre>sharepoint.username=<b>AdaptorUser@yourdomain.com</b>
sharepoint.password=<b>uS3R_passWoRD</b>
sharepoint.sts.endpoint=<b>https://adfs.exaple.com/adfs/services/trust/2005/usernamemixed
</b>sharepoint.sts.realm=<b>urn:myserver:sharepoint</b> or <b>https://yoursharepoint.example.com/_trust</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>
  <dt>
  <code>adaptor.docHeaderTimeoutSecs</code>
  </dt>
  <dd>
  Number of seconds adaptor has to start sending content before it is 
  interrupted. Defaults to 30 seconds. Also used as connection timeout value for
  establishing connection with SharePoint server for making web service calls.
  </dd>
  <dt>
  <code>adaptor.docContentTimeoutSecs</code>
  </dt>
  <dd>
  Number of seconds adaptor has to complete sending content before it is 
  interrupted. Timing starts when sending content starts.
  Defaults to 180 seconds. Also used as request timeout value while making
  SharePoint web service call to complete a particular web service call.
  </dd>
</dl>
</body>
