|  | @@ -9,25 +9,52 @@ function check_login($user, $pass, $app_passwd_data = false, $extra = null) {
 | 
	
		
			
				|  |  |    // Try validate admin
 | 
	
		
			
				|  |  |    if (!isset($role) || $role == "admin") {
 | 
	
		
			
				|  |  |      $result = admin_login($user, $pass);
 | 
	
		
			
				|  |  | -    if ($result !== false) return $result;
 | 
	
		
			
				|  |  | +    if ($result !== false){
 | 
	
		
			
				|  |  | +      return $result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Try validate domain admin
 | 
	
		
			
				|  |  |    if (!isset($role) || $role == "domain_admin") {
 | 
	
		
			
				|  |  |      $result = domainadmin_login($user, $pass);
 | 
	
		
			
				|  |  | -    if ($result !== false) return $result;
 | 
	
		
			
				|  |  | +    if ($result !== false) {
 | 
	
		
			
				|  |  | +      return $result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  // Try validate user
 | 
	
		
			
				|  |  | -  if (!isset($role) || $role == "user") {
 | 
	
		
			
				|  |  | -    $result = user_login($user, $pass);
 | 
	
		
			
				|  |  | -    if ($result !== false) return $result;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Try validate app password
 | 
	
		
			
				|  |  |    if (!isset($role) || $role == "app") {
 | 
	
		
			
				|  |  |      $result = apppass_login($user, $pass, $app_passwd_data);
 | 
	
		
			
				|  |  | -    if ($result !== false) return $result;
 | 
	
		
			
				|  |  | +    if ($result !== false) {
 | 
	
		
			
				|  |  | +      if ($app_passwd_data['eas'] === true) {
 | 
	
		
			
				|  |  | +        $service = 'EAS';
 | 
	
		
			
				|  |  | +      } elseif ($app_passwd_data['dav'] === true) {
 | 
	
		
			
				|  |  | +        $service = 'DAV';
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        $service = 'NONE';
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      $real_rip = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);
 | 
	
		
			
				|  |  | +      set_sasl_log($user, $real_rip, $service, $pass);
 | 
	
		
			
				|  |  | +      return $result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Try validate user
 | 
	
		
			
				|  |  | +  if (!isset($role) || $role == "user") {
 | 
	
		
			
				|  |  | +    $result = user_login($user, $pass);
 | 
	
		
			
				|  |  | +    if ($result !== false) {
 | 
	
		
			
				|  |  | +      if ($app_passwd_data['eas'] === true) {
 | 
	
		
			
				|  |  | +        $service = 'EAS';
 | 
	
		
			
				|  |  | +      } elseif ($app_passwd_data['dav'] === true) {
 | 
	
		
			
				|  |  | +        $service = 'DAV';
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        $service = 'MAILCOWUI';
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      $real_rip = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);
 | 
	
		
			
				|  |  | +      set_sasl_log($user, $real_rip, $service);
 | 
	
		
			
				|  |  | +      return $result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // skip log and only return false if it's an internal request
 | 
	
	
		
			
				|  | @@ -415,21 +442,7 @@ function apppass_login($user, $pass, $app_passwd_data, $extra = null){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // verify password
 | 
	
		
			
				|  |  |      if (verify_hash($row['password'], $pass) !== false) {
 | 
	
		
			
				|  |  | -      if ($is_internal){
 | 
	
		
			
				|  |  | -        $remote_addr = $extra['remote_addr'];
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        $remote_addr = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      $service = strtoupper($is_app_passwd);
 | 
	
		
			
				|  |  | -      $stmt = $pdo->prepare("REPLACE INTO sasl_log (`service`, `app_password`, `username`, `real_rip`) VALUES (:service, :app_id, :username, :remote_addr)");
 | 
	
		
			
				|  |  | -      $stmt->execute(array(
 | 
	
		
			
				|  |  | -        ':service' => $service,
 | 
	
		
			
				|  |  | -        ':app_id' => $row['app_passwd_id'],
 | 
	
		
			
				|  |  | -        ':username' => $user,
 | 
	
		
			
				|  |  | -        ':remote_addr' => $remote_addr
 | 
	
		
			
				|  |  | -      ));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +      $_SESSION['app_passwd_id'] = $row['app_passwd_id'];
 | 
	
		
			
				|  |  |        unset($_SESSION['ldelay']);
 | 
	
		
			
				|  |  |        return "user";
 | 
	
		
			
				|  |  |      }
 |