diff --git a/data/web/autodiscover.php b/data/web/autodiscover.php
index 224f94f71..fe1e8e910 100644
--- a/data/web/autodiscover.php
+++ b/data/web/autodiscover.php
@@ -60,97 +60,25 @@ $pdo = new PDO($dsn, $database_user, $database_pass, $opt);
$iam_provider = identity_provider('init');
$iam_settings = identity_provider('get');
-$login_user = strtolower(trim($_SERVER['PHP_AUTH_USER']));
-$login_pass = trim(htmlspecialchars_decode($_SERVER['PHP_AUTH_PW']));
+// Passwordless autodiscover - no authentication required
+// Email will be extracted from the request body
+$login_user = null;
+$login_role = null;
-if (empty($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW'])) {
- $json = json_encode(
- array(
- "time" => time(),
- "ua" => $_SERVER['HTTP_USER_AGENT'],
- "user" => "none",
- "ip" => $_SERVER['REMOTE_ADDR'],
- "service" => "Error: must be authenticated"
- )
- );
- $redis->lPush('AUTODISCOVER_LOG', $json);
- header('WWW-Authenticate: Basic realm="' . $_SERVER['HTTP_HOST'] . '"');
- header('HTTP/1.0 401 Unauthorized');
- exit(0);
-}
-
-$login_role = check_login($login_user, $login_pass, array('eas' => TRUE));
-
-if ($login_role === "user") {
- header("Content-Type: application/xml");
- echo '' . PHP_EOL;
+header("Content-Type: application/xml");
+echo '' . PHP_EOL;
?>
time(),
- "ua" => $_SERVER['HTTP_USER_AGENT'],
- "user" => $_SERVER['PHP_AUTH_USER'],
- "ip" => $_SERVER['REMOTE_ADDR'],
- "service" => "Error: invalid or missing request data"
- )
- );
- $redis->lPush('AUTODISCOVER_LOG', $json);
- $redis->lTrim('AUTODISCOVER_LOG', 0, 100);
- }
- catch (RedisException $e) {
- $_SESSION['return'][] = array(
- 'type' => 'danger',
- 'msg' => 'Redis: '.$e
- );
- return false;
- }
- list($usec, $sec) = explode(' ', microtime());
-?>
-
-
- 600
- Invalid Request
-
-
-
-
-Request->EMailAddress;
- } catch (Exception $e) {
- $email = $_SERVER['PHP_AUTH_USER'];
- }
-
- $username = trim($email);
- try {
- $stmt = $pdo->prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username");
- $stmt->execute(array(':username' => $username));
- $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
- }
- catch(PDOException $e) {
- die("Failed to determine name from SQL");
- }
- if (!empty($MailboxData['name'])) {
- $displayname = $MailboxData['name'];
- }
- else {
- $displayname = $email;
- }
+if(!$data) {
try {
$json = json_encode(
array(
"time" => time(),
"ua" => $_SERVER['HTTP_USER_AGENT'],
- "user" => $_SERVER['PHP_AUTH_USER'],
+ "user" => "none",
"ip" => $_SERVER['REMOTE_ADDR'],
- "service" => $autodiscover_config['autodiscoverType']
+ "service" => "Error: invalid or missing request data"
)
);
$redis->lPush('AUTODISCOVER_LOG', $json);
@@ -163,7 +91,127 @@ if ($login_role === "user") {
);
return false;
}
- if ($autodiscover_config['autodiscoverType'] == 'imap') {
+ list($usec, $sec) = explode(' ', microtime());
+?>
+
+
+ 600
+ Invalid Request
+
+
+
+
+Request->EMailAddress;
+} catch (Exception $e) {
+ // If parsing fails, return error
+ try {
+ $json = json_encode(
+ array(
+ "time" => time(),
+ "ua" => $_SERVER['HTTP_USER_AGENT'],
+ "user" => "none",
+ "ip" => $_SERVER['REMOTE_ADDR'],
+ "service" => "Error: could not parse email from request"
+ )
+ );
+ $redis->lPush('AUTODISCOVER_LOG', $json);
+ $redis->lTrim('AUTODISCOVER_LOG', 0, 100);
+ }
+ catch (RedisException $e) {
+ // Silently fail
+ }
+ list($usec, $sec) = explode(' ', microtime());
+?>
+
+
+ 600
+ Invalid Request
+
+
+
+
+prepare("SELECT `name`, `active` FROM `mailbox`
+ INNER JOIN `domain` ON `mailbox`.`domain` = `domain`.`domain`
+ WHERE `mailbox`.`username` = :username
+ AND `mailbox`.`active` = '1'
+ AND `domain`.`active` = '1'");
+ $stmt->execute(array(':username' => $username));
+ $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
+}
+catch(PDOException $e) {
+ die("Failed to determine name from SQL");
+}
+
+// Mailbox not found or not active - return error
+if (empty($MailboxData)) {
+ try {
+ $json = json_encode(
+ array(
+ "time" => time(),
+ "ua" => $_SERVER['HTTP_USER_AGENT'],
+ "user" => $email,
+ "ip" => $_SERVER['REMOTE_ADDR'],
+ "service" => "Error: mailbox not found or inactive"
+ )
+ );
+ $redis->lPush('AUTODISCOVER_LOG', $json);
+ $redis->lTrim('AUTODISCOVER_LOG', 0, 100);
+ }
+ catch (RedisException $e) {
+ // Silently fail
+ }
+ list($usec, $sec) = explode(' ', microtime());
+?>
+
+
+ 600
+ Mailbox not found
+
+
+
+
+ time(),
+ "ua" => $_SERVER['HTTP_USER_AGENT'],
+ "user" => $email,
+ "ip" => $_SERVER['REMOTE_ADDR'],
+ "service" => $autodiscover_config['autodiscoverType']
+ )
+ );
+ $redis->lPush('AUTODISCOVER_LOG', $json);
+ $redis->lTrim('AUTODISCOVER_LOG', 0, 100);
+}
+catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'msg' => 'Redis: '.$e
+ );
+ return false;
+}
+if ($autodiscover_config['autodiscoverType'] == 'imap') {
?>
@@ -238,6 +286,3 @@ if ($login_role === "user") {
}
?>
-