From c2ebc192a6a6c7cb9cff958e412e0cc4aff15ead Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Thu, 14 Aug 2014 14:24:56 +0200
Subject: [PATCH] Make external shares work with imported self-signed
 certificates

---
 apps/files_sharing/lib/external/manager.php |  4 +++-
 apps/files_sharing/lib/external/storage.php | 12 +++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index dda283f495..8176302a86 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -113,9 +113,11 @@ class Manager {
 	 * @return Mount
 	 */
 	protected function mountShare($data) {
+		$user = $this->userSession->getUser();
 		$data['manager'] = $this;
-		$mountPoint = '/' . $this->userSession->getUser()->getUID() . '/files' . $data['mountpoint'];
+		$mountPoint = '/' . $user->getUID() . '/files' . $data['mountpoint'];
 		$data['mountpoint'] = $mountPoint;
+		$data['certificateManager'] = \OC::$server->getCertificateManager($user);
 		$mount = new Mount(self::STORAGE, $mountPoint, $data, $this, $this->storageLoader);
 		$this->mountManager->addMount($mount);
 		return $mount;
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 855be2872b..b3a8bdcc96 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -37,6 +37,11 @@ class Storage extends DAV implements ISharedStorage {
 	 */
 	private $token;
 
+	/**
+	 * @var \OCP\ICertificateManager
+	 */
+	private $certificateManager;
+
 	private $updateChecked = false;
 
 	/**
@@ -46,6 +51,7 @@ class Storage extends DAV implements ISharedStorage {
 
 	public function __construct($options) {
 		$this->manager = $options['manager'];
+		$this->certificateManager = $options['certificateManager'];
 		$this->remote = $options['remote'];
 		$this->remoteUser = $options['owner'];
 		list($protocol, $remote) = explode('://', $this->remote);
@@ -190,7 +196,11 @@ class Storage extends DAV implements ISharedStorage {
 			http_build_query(array('password' => $password)));
 		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
-		$result = curl_exec($ch);
+		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+		curl_setopt($ch, CURLOPT_CAINFO, $this->certificateManager->getCertificateBundle());
+
+			$result = curl_exec($ch);
 
 		$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 		curl_close($ch);
-- 
GitLab