Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package azure-cli-core for openSUSE:Factory 
checked in at 2025-07-10 22:12:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/azure-cli-core (Old)
 and      /work/SRC/openSUSE:Factory/.azure-cli-core.new.7373 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "azure-cli-core"

Thu Jul 10 22:12:27 2025 rev:83 rq:1291616 version:2.75.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/azure-cli-core/azure-cli-core.changes    
2025-06-11 18:35:28.521476406 +0200
+++ /work/SRC/openSUSE:Factory/.azure-cli-core.new.7373/azure-cli-core.changes  
2025-07-10 22:12:28.376524862 +0200
@@ -1,0 +2,9 @@
+Wed Jul  9 07:21:15 UTC 2025 - John Paul Adrian Glaubitz 
<adrian.glaub...@suse.com>
+
+- New upstream release
+  + Version 2.75.0
+  + For detailed information about changes see the
+    HISTORY.rst file provided with this package
+- Update Requires from setup.py
+
+-------------------------------------------------------------------

Old:
----
  azure_cli_core-2.74.0.tar.gz

New:
----
  azure_cli_core-2.75.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ azure-cli-core.spec ++++++
--- /var/tmp/diff_new_pack.yHDbub/_old  2025-07-10 22:12:29.144556805 +0200
+++ /var/tmp/diff_new_pack.yHDbub/_new  2025-07-10 22:12:29.144556805 +0200
@@ -24,7 +24,7 @@
 %global _sitelibdir %{%{pythons}_sitelib}
 
 Name:           azure-cli-core
-Version:        2.74.0
+Version:        2.75.0
 Release:        0
 Summary:        Microsoft Azure CLI Core Module
 License:        MIT
@@ -52,11 +52,9 @@
 Requires:       %{pythons}-knack >= 0.11.0
 Requires:       %{pythons}-microsoft-security-utilities-secret-masker >= 
1.0.0~b4
 Requires:       %{pythons}-msal < 2.0.0
-Requires:       %{pythons}-msal >= 1.32.3
+Requires:       %{pythons}-msal >= 1.33.0~b1
 Requires:       %{pythons}-msal-extensions < 2.0.0
 Requires:       %{pythons}-msal-extensions >= 1.2.0
-Requires:       %{pythons}-msrestazure < 0.7.0
-Requires:       %{pythons}-msrestazure >= 0.6.4
 Requires:       %{pythons}-packaging >= 20.9
 Requires:       %{pythons}-pip
 Requires:       %{pythons}-pkginfo >= 1.5.0.1

++++++ azure_cli_core-2.74.0.tar.gz -> azure_cli_core-2.75.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/azure_cli_core-2.74.0/HISTORY.rst 
new/azure_cli_core-2.75.0/HISTORY.rst
--- old/azure_cli_core-2.74.0/HISTORY.rst       2025-05-27 11:14:12.000000000 
+0200
+++ new/azure_cli_core-2.75.0/HISTORY.rst       2025-06-24 12:16:29.000000000 
+0200
@@ -3,6 +3,11 @@
 Release History
 ===============
 
+2.75.0
+++++++
+* Resolve CVE-2025-50181 (#31669)
+* Resolve CVE-2025-50182 (#31669)
+
 2.74.0
 ++++++
 * Resolve CVE-2024-13176 (#31503)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/azure_cli_core-2.74.0/PKG-INFO 
new/azure_cli_core-2.75.0/PKG-INFO
--- old/azure_cli_core-2.74.0/PKG-INFO  2025-05-27 11:14:39.939581400 +0200
+++ new/azure_cli_core-2.75.0/PKG-INFO  2025-06-24 12:17:13.254765300 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: azure-cli-core
-Version: 2.74.0
+Version: 2.75.0
 Summary: Microsoft Azure Command-Line Tools Core Module
 Home-page: https://github.com/Azure/azure-cli
 Author: Microsoft Corporation
@@ -28,8 +28,8 @@
 Requires-Dist: knack~=0.11.0
 Requires-Dist: microsoft-security-utilities-secret-masker~=1.0.0b4
 Requires-Dist: msal-extensions==1.2.0
-Requires-Dist: msal[broker]==1.32.3
-Requires-Dist: msrestazure~=0.6.4
+Requires-Dist: msal[broker]==1.33.0b1; sys_platform == "win32"
+Requires-Dist: msal==1.33.0b1; sys_platform != "win32"
 Requires-Dist: packaging>=20.9
 Requires-Dist: pkginfo>=1.5.0.1
 Requires-Dist: psutil>=5.9; sys_platform != "cygwin"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/azure_cli_core-2.74.0/azure/cli/core/__init__.py 
new/azure_cli_core-2.75.0/azure/cli/core/__init__.py
--- old/azure_cli_core-2.74.0/azure/cli/core/__init__.py        2025-05-27 
11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/__init__.py        2025-06-24 
12:16:29.000000000 +0200
@@ -4,7 +4,7 @@
 # 
--------------------------------------------------------------------------------------------
 # pylint: disable=line-too-long
 
-__version__ = "2.74.0"
+__version__ = "2.75.0"
 
 import os
 import sys
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/azure_cli_core-2.74.0/azure/cli/core/_profile.py 
new/azure_cli_core-2.75.0/azure/cli/core/_profile.py
--- old/azure_cli_core-2.74.0/azure/cli/core/_profile.py        2025-05-27 
11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/_profile.py        2025-06-24 
12:16:29.000000000 +0200
@@ -220,69 +220,14 @@
         self._set_subscriptions(consolidated)
         return deepcopy(consolidated)
 
-    def login_with_managed_identity_msrestazure(self, client_id=None, 
object_id=None, resource_id=None,
-                                                allow_no_subscriptions=None):
-        # Old way of using msrestazure for managed identity
-        import jwt
-        from azure.cli.core.auth.adal_authentication import 
MSIAuthenticationWrapper
-        resource = self.cli_ctx.cloud.endpoints.active_directory_resource_id
-
-        id_arg_count = len([arg for arg in (client_id, object_id, resource_id) 
if arg])
-        if id_arg_count > 1:
-            raise CLIError('Usage error: Provide only one of --client-id, 
--object-id, --resource-id.')
-
-        if id_arg_count == 0:
-            identity_type = MsiAccountTypes.system_assigned
-            identity_id = None
-            msi_creds = MSIAuthenticationWrapper(resource=resource)
-        elif client_id:
-            identity_type = MsiAccountTypes.user_assigned_client_id
-            identity_id = client_id
-            msi_creds = MSIAuthenticationWrapper(resource=resource, 
client_id=client_id)
-        elif object_id:
-            identity_type = MsiAccountTypes.user_assigned_object_id
-            identity_id = object_id
-            msi_creds = MSIAuthenticationWrapper(resource=resource, 
object_id=object_id)
-        elif resource_id:
-            identity_type = MsiAccountTypes.user_assigned_resource_id
-            identity_id = resource_id
-            msi_creds = MSIAuthenticationWrapper(resource=resource, 
msi_res_id=resource_id)
-
-        token_entry = msi_creds.token
-        token = token_entry['access_token']
-        logger.info('MSI: token was retrieved. Now trying to initialize local 
accounts...')
-        decode = jwt.decode(token, algorithms=['RS256'], 
options={"verify_signature": False})
-        tenant = decode['tid']
-
-        subscription_finder = SubscriptionFinder(self.cli_ctx)
-        subscriptions = subscription_finder.find_using_specific_tenant(tenant, 
msi_creds)
-        base_name = ('{}-{}'.format(identity_type, identity_id) if identity_id 
else identity_type)
-        user = _USER_ASSIGNED_IDENTITY if identity_id else 
_SYSTEM_ASSIGNED_IDENTITY
-        if not subscriptions:
-            if allow_no_subscriptions:
-                subscriptions = self._build_tenant_level_accounts([tenant])
-            else:
-                raise CLIError('No access was configured for the VM, hence no 
subscriptions were found. '
-                               "If this is expected, use 
'--allow-no-subscriptions' to have tenant level access.")
-
-        consolidated = self._normalize_properties(user, subscriptions, 
is_service_principal=True,
-                                                  
user_assigned_identity_id=base_name)
-        self._set_subscriptions(consolidated)
-        return deepcopy(consolidated)
-
     def login_with_managed_identity(self, client_id=None, object_id=None, 
resource_id=None,
                                     allow_no_subscriptions=None):
-        if not _use_msal_managed_identity(self.cli_ctx):
-            return self.login_with_managed_identity_msrestazure(
-                client_id=client_id, object_id=object_id, 
resource_id=resource_id,
-                allow_no_subscriptions=allow_no_subscriptions)
-
         import jwt
         from .auth.constants import ACCESS_TOKEN
 
-        identity_id_type, identity_id_value = MsiAccountTypes.parse_ids(
+        identity_id_type, identity_id_value = ManagedIdentityAuth.parse_ids(
             client_id=client_id, object_id=object_id, resource_id=resource_id)
-        cred = MsiAccountTypes.msal_credential_factory(identity_id_type, 
identity_id_value)
+        cred = ManagedIdentityAuth.credential_factory(identity_id_type, 
identity_id_value)
         token = cred.acquire_token(self._arm_scope)[ACCESS_TOKEN]
         logger.info('Managed identity: token was retrieved. Now trying to 
initialize local accounts...')
         decode = jwt.decode(token, algorithms=['RS256'], 
options={"verify_signature": False})
@@ -300,7 +245,7 @@
                                "If this is expected, use 
'--allow-no-subscriptions' to have tenant level access.")
 
         consolidated = self._normalize_properties(user, subscriptions, 
is_service_principal=True,
-                                                  
user_assigned_identity_id=base_name)
+                                                  
assigned_identity_info=base_name)
         self._set_subscriptions(consolidated)
         return deepcopy(consolidated)
 
@@ -366,21 +311,14 @@
         if in_cloud_console() and account[_USER_ENTITY].get(_CLOUD_SHELL_ID):
             # Cloud Shell
             from .auth.msal_credentials import CloudShellCredential
-            # The credential must be wrapped by CredentialAdaptor so that it 
can work with Track 1 SDKs.
+            # The credential must be wrapped by CredentialAdaptor so that it 
can work with SDK.
             sdk_cred = CredentialAdaptor(CloudShellCredential())
 
         elif managed_identity_type:
             # managed identity
-            if _use_msal_managed_identity(self.cli_ctx):
-                # The credential must be wrapped by CredentialAdaptor so that 
it can work with Track 1 SDKs.
-                cred = 
MsiAccountTypes.msal_credential_factory(managed_identity_type, 
managed_identity_id)
-                sdk_cred = CredentialAdaptor(cred)
-            else:
-                # The resource is merely used by msrestazure to get the first 
access token.
-                # It is not actually used in an API invocation.
-                sdk_cred = MsiAccountTypes.msi_auth_factory(
-                    managed_identity_type, managed_identity_id,
-                    self.cli_ctx.cloud.endpoints.active_directory_resource_id)
+            # The credential must be wrapped by CredentialAdaptor so that it 
can work with SDK.
+            cred = 
ManagedIdentityAuth.credential_factory(managed_identity_type, 
managed_identity_id)
+            sdk_cred = CredentialAdaptor(cred)
 
         else:
             # user and service principal
@@ -427,39 +365,36 @@
             if tenant:
                 raise CLIError("Tenant shouldn't be specified for Cloud Shell 
account")
             from .auth.msal_credentials import CloudShellCredential
-            sdk_cred = CredentialAdaptor(CloudShellCredential())
+            cred = CloudShellCredential()
 
         elif managed_identity_type:
             # managed identity
             if tenant:
                 raise CLIError("Tenant shouldn't be specified for managed 
identity account")
-            if _use_msal_managed_identity(self.cli_ctx):
-                cred = 
MsiAccountTypes.msal_credential_factory(managed_identity_type, 
managed_identity_id)
-                if credential_out:
-                    credential_out['credential'] = cred
-                sdk_cred = CredentialAdaptor(cred)
-            else:
-                from .auth.util import scopes_to_resource
-                sdk_cred = 
MsiAccountTypes.msi_auth_factory(managed_identity_type, managed_identity_id,
-                                                            
scopes_to_resource(scopes))
+            cred = 
ManagedIdentityAuth.credential_factory(managed_identity_type, 
managed_identity_id)
+            if credential_out:
+                credential_out['credential'] = cred
 
         else:
-            sdk_cred = CredentialAdaptor(self._create_credential(account, 
tenant_id=tenant))
+            cred = self._create_credential(account, tenant_id=tenant)
 
-        sdk_token = sdk_cred.get_token(*scopes)
+        msal_token = cred.acquire_token(scopes)
         # Convert epoch int 'expires_on' to datetime string 'expiresOn' for 
backward compatibility
         # WARNING: expiresOn is deprecated and will be removed in future 
release.
         import datetime
-        expiresOn = 
datetime.datetime.fromtimestamp(sdk_token.expires_on).strftime("%Y-%m-%d 
%H:%M:%S.%f")
+        from .auth.util import now_timestamp
+        from .auth.constants import EXPIRES_IN, ACCESS_TOKEN
+        expires_on = now_timestamp() + msal_token[EXPIRES_IN]
+        expiresOn = 
datetime.datetime.fromtimestamp(expires_on).strftime("%Y-%m-%d %H:%M:%S.%f")
 
         token_entry = {
-            'accessToken': sdk_token.token,
-            'expires_on': sdk_token.expires_on,  # epoch int, like 1605238724
+            'accessToken': msal_token[ACCESS_TOKEN],
+            'expires_on': expires_on,  # epoch int, like 1605238724
             'expiresOn': expiresOn  # datetime string, like "2020-11-12 
13:50:47.114324"
         }
 
         # Build a tuple of (token_type, token, token_entry)
-        token_tuple = 'Bearer', sdk_token.token, token_entry
+        token_tuple = 'Bearer', msal_token[ACCESS_TOKEN], token_entry
 
         # Return a tuple of (token_tuple, subscription, tenant)
         return (token_tuple,
@@ -467,7 +402,7 @@
                 str(tenant if tenant else account[_TENANT_ID]))
 
     def _normalize_properties(self, user, subscriptions, is_service_principal, 
cert_sn_issuer_auth=None,
-                              user_assigned_identity_id=None):
+                              assigned_identity_info=None):
         consolidated = []
         for s in subscriptions:
             subscription_dict = {
@@ -490,8 +425,8 @@
 
             if cert_sn_issuer_auth:
                 
consolidated[-1][_USER_ENTITY][_SERVICE_PRINCIPAL_CERT_SN_ISSUER_AUTH] = True
-            if user_assigned_identity_id:
-                consolidated[-1][_USER_ENTITY][_ASSIGNED_IDENTITY_INFO] = 
user_assigned_identity_id
+            if assigned_identity_info:
+                consolidated[-1][_USER_ENTITY][_ASSIGNED_IDENTITY_INFO] = 
assigned_identity_info
 
         return consolidated
 
@@ -629,16 +564,18 @@
 
     @staticmethod
     def _parse_managed_identity_account(account):
+        # user.name will always exist, so we check it first.
+        # user.userAssignedIdentity will only exist if user.name is 
systemAssignedIdentity or userAssignedIdentity
         user_name = account[_USER_ENTITY][_USER_NAME]
         if user_name == _SYSTEM_ASSIGNED_IDENTITY:
             # The account contains:
-            #   "assignedIdentityInfo": "MSI",
-            #   "name": "systemAssignedIdentity",
-            return MsiAccountTypes.system_assigned, None
+            #   "name": "systemAssignedIdentity"
+            #   "assignedIdentityInfo": "MSI"
+            return ManagedIdentityAuth.system_assigned, None
         if user_name == _USER_ASSIGNED_IDENTITY:
             # The account contains:
-            #   "assignedIdentityInfo": 
"MSIClient-xxx"/"MSIObject-xxx"/"MSIResource-xxx",
-            #   "name": "userAssignedIdentity",
+            #   "name": "userAssignedIdentity"
+            #   "assignedIdentityInfo": 
"MSIClient-xxx"/"MSIObject-xxx"/"MSIResource-xxx"
             return 
tuple(account[_USER_ENTITY][_ASSIGNED_IDENTITY_INFO].split('-', maxsplit=1))
         return None, None
 
@@ -760,7 +697,7 @@
         return installation_id
 
 
-class MsiAccountTypes:
+class ManagedIdentityAuth:
     # pylint: disable=no-method-argument,no-self-argument
     system_assigned = 'MSI'
     user_assigned_client_id = 'MSIClient'
@@ -768,25 +705,13 @@
     user_assigned_resource_id = 'MSIResource'
 
     @staticmethod
-    def valid_msi_account_types():
-        return [MsiAccountTypes.system_assigned, 
MsiAccountTypes.user_assigned_client_id,
-                MsiAccountTypes.user_assigned_object_id, 
MsiAccountTypes.user_assigned_resource_id]
-
-    @staticmethod
-    def msi_auth_factory(cli_account_name, identity, resource):
-        from azure.cli.core.auth.adal_authentication import 
MSIAuthenticationWrapper
-        if cli_account_name == MsiAccountTypes.system_assigned:
-            return MSIAuthenticationWrapper(resource=resource)
-        if cli_account_name == MsiAccountTypes.user_assigned_client_id:
-            return MSIAuthenticationWrapper(resource=resource, 
client_id=identity)
-        if cli_account_name == MsiAccountTypes.user_assigned_object_id:
-            return MSIAuthenticationWrapper(resource=resource, 
object_id=identity)
-        if cli_account_name == MsiAccountTypes.user_assigned_resource_id:
-            return MSIAuthenticationWrapper(resource=resource, 
msi_res_id=identity)
-        raise ValueError("unrecognized msi account name 
'{}'".format(cli_account_name))
-
-    @staticmethod
     def parse_ids(client_id=None, object_id=None, resource_id=None):
+        """Parse IDs into ID type and ID value:
+        - system-assigned: MSI, None
+        - user-assigned client ID: MSIClient, <GUID>
+        - user-assigned object ID: MSIObject, <GUID>
+        - user-assigned resource ID: MSIResource, <Resource ID>
+        """
         id_arg_count = len([arg for arg in (client_id, object_id, resource_id) 
if arg])
         if id_arg_count > 1:
             raise CLIError('Usage error: Provide only one of --client-id, 
--object-id, --resource-id.')
@@ -794,29 +719,29 @@
         id_type = None
         id_value = None
         if id_arg_count == 0:
-            id_type = MsiAccountTypes.system_assigned
+            id_type = ManagedIdentityAuth.system_assigned
             id_value = None
         elif client_id:
-            id_type = MsiAccountTypes.user_assigned_client_id
+            id_type = ManagedIdentityAuth.user_assigned_client_id
             id_value = client_id
         elif object_id:
-            id_type = MsiAccountTypes.user_assigned_object_id
+            id_type = ManagedIdentityAuth.user_assigned_object_id
             id_value = object_id
         elif resource_id:
-            id_type = MsiAccountTypes.user_assigned_resource_id
+            id_type = ManagedIdentityAuth.user_assigned_resource_id
             id_value = resource_id
         return id_type, id_value
 
     @staticmethod
-    def msal_credential_factory(id_type, id_value):
+    def credential_factory(id_type, id_value):
         from azure.cli.core.auth.msal_credentials import 
ManagedIdentityCredential
-        if id_type == MsiAccountTypes.system_assigned:
+        if id_type == ManagedIdentityAuth.system_assigned:
             return ManagedIdentityCredential()
-        if id_type == MsiAccountTypes.user_assigned_client_id:
+        if id_type == ManagedIdentityAuth.user_assigned_client_id:
             return ManagedIdentityCredential(client_id=id_value)
-        if id_type == MsiAccountTypes.user_assigned_object_id:
+        if id_type == ManagedIdentityAuth.user_assigned_object_id:
             return ManagedIdentityCredential(object_id=id_value)
-        if id_type == MsiAccountTypes.user_assigned_resource_id:
+        if id_type == ManagedIdentityAuth.user_assigned_resource_id:
             return ManagedIdentityCredential(resource_id=id_value)
         raise ValueError("Unrecognized managed identity ID type 
'{}'".format(id_type))
 
@@ -931,9 +856,7 @@
                                    
.format(ResourceType.MGMT_RESOURCE_SUBSCRIPTIONS, self.cli_ctx.cloud.profile))
         api_version = get_api_version(self.cli_ctx, 
ResourceType.MGMT_RESOURCE_SUBSCRIPTIONS)
 
-        # MSIAuthenticationWrapper already implements get_token, so no need to 
wrap it with CredentialAdaptor
-        from azure.cli.core.auth.adal_authentication import 
MSIAuthenticationWrapper
-        sdk_cred = credential if isinstance(credential, 
MSIAuthenticationWrapper) else CredentialAdaptor(credential)
+        sdk_cred = CredentialAdaptor(credential)
         client_kwargs = _prepare_mgmt_client_kwargs_track2(self.cli_ctx, 
sdk_cred)
         client = client_type(sdk_cred, api_version=api_version,
                              
base_url=self.cli_ctx.cloud.endpoints.resource_manager,
@@ -984,11 +907,3 @@
                     use_msal_http_cache=use_msal_http_cache,
                     enable_broker_on_windows=enable_broker_on_windows,
                     instance_discovery=instance_discovery)
-
-
-def _use_msal_managed_identity(cli_ctx):
-    from azure.cli.core.telemetry import set_use_msal_managed_identity
-    # Use core.use_msal_managed_identity=false to use the old msrestazure 
implementation
-    use_msal_managed_identity = cli_ctx.config.getboolean('core', 
'use_msal_managed_identity', fallback=True)
-    set_use_msal_managed_identity(use_msal_managed_identity)
-    return use_msal_managed_identity
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure/cli/core/auth/adal_authentication.py 
new/azure_cli_core-2.75.0/azure/cli/core/auth/adal_authentication.py
--- old/azure_cli_core-2.74.0/azure/cli/core/auth/adal_authentication.py        
2025-05-27 11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/auth/adal_authentication.py        
1970-01-01 01:00:00.000000000 +0100
@@ -1,129 +0,0 @@
-# 
--------------------------------------------------------------------------------------------
-# Copyright (c) Microsoft Corporation. All rights reserved.
-# Licensed under the MIT License. See License.txt in the project root for 
license information.
-# 
--------------------------------------------------------------------------------------------
-
-import requests
-from knack.log import get_logger
-from msrestazure.azure_active_directory import MSIAuthentication
-
-from .util import scopes_to_resource, AccessToken
-
-logger = get_logger(__name__)
-
-
-class MSIAuthenticationWrapper(MSIAuthentication):
-    # This method is exposed for Azure Core. Add *scopes, **kwargs to fit 
azure.core requirement
-    # pylint: disable=line-too-long
-    def get_token(self, *scopes, **kwargs):  # pylint:disable=unused-argument
-        logger.debug("MSIAuthenticationWrapper.get_token: scopes=%r, 
kwargs=%r", scopes, kwargs)
-
-        if 'data' in kwargs:
-            from azure.cli.core.util import in_cloud_console
-            if in_cloud_console():
-                # Use MSAL to get VM SSH certificate
-                import msal
-                from .util import check_result, build_sdk_access_token
-                from .constants import AZURE_CLI_CLIENT_ID
-                app = msal.PublicClientApplication(
-                    AZURE_CLI_CLIENT_ID,  # Use a real client_id, so that 
cache would work
-                    # TODO: This PoC does not currently maintain a token cache;
-                    #   Ideally we should reuse the real MSAL app object which 
has cache configured.
-                    # token_cache=...,
-                )
-                result = app.acquire_token_interactive(list(scopes), 
prompt="none", data=kwargs["data"])
-                check_result(result, scopes=scopes)
-                return build_sdk_access_token(result)
-
-            from azure.cli.core.azclierror import AuthenticationError
-            raise AuthenticationError("VM SSH currently doesn't support 
managed identity.")
-
-        # Use msrestazure to get access token
-        resource = scopes_to_resource(scopes)
-        if resource:
-            # If available, use resource provided by SDK
-            self.resource = resource
-        self.set_token()
-        # VM managed identity endpoint 2018-02-01 token entry sample:
-        # curl 
"http://169.254.169.254:80/metadata/identity/oauth2/token?resource=https://management.core.windows.net/&api-version=2018-02-01";
 -H "Metadata: true"
-        # {
-        #     "access_token": "eyJ0eXAiOiJKV...",
-        #     "client_id": "da95e381-d7ab-4fdc-8047-2457909c723b",
-        #     "expires_in": "86386",
-        #     "expires_on": "1605238724",
-        #     "ext_expires_in": "86399",
-        #     "not_before": "1605152024",
-        #     "resource": "https://management.core.windows.net/";,
-        #     "token_type": "Bearer"
-        # }
-
-        # App Service managed identity endpoint 2017-09-01 token entry sample:
-        # curl 
"${MSI_ENDPOINT}?resource=https://management.core.windows.net/&api-version=2017-09-01";
 -H "secret: ${MSI_SECRET}"
-        # {
-        #     "access_token": "eyJ0eXAiOiJKV...",
-        #     "expires_on":"11/05/2021 15:18:31 +00:00",
-        #     "resource":"https://management.core.windows.net/";,
-        #     "token_type":"Bearer",
-        #     "client_id":"df45d93a-de31-47ca-acef-081ca60d1a83"
-        # }
-        return AccessToken(self.token['access_token'], 
_normalize_expires_on(self.token['expires_on']))
-
-    def set_token(self):
-        import traceback
-        from azure.cli.core.azclierror import AzureConnectionError, 
AzureResponseError
-        try:
-            super().set_token()
-        except requests.exceptions.ConnectionError as err:
-            logger.debug('throw requests.exceptions.ConnectionError when doing 
MSIAuthentication: \n%s',
-                         traceback.format_exc())
-            raise AzureConnectionError('Failed to connect to MSI. Please make 
sure MSI is configured correctly '
-                                       'and check the network 
connection.\nError detail: {}'.format(str(err)))
-        except requests.exceptions.HTTPError as err:
-            logger.debug('throw requests.exceptions.HTTPError when doing 
MSIAuthentication: \n%s',
-                         traceback.format_exc())
-            try:
-                raise AzureResponseError('Failed to connect to MSI. Please 
make sure MSI is configured correctly.\n'
-                                         'Get Token request returned http 
error: {}, reason: {}'
-                                         .format(err.response.status, 
err.response.reason))
-            except AttributeError:
-                raise AzureResponseError('Failed to connect to MSI. Please 
make sure MSI is configured correctly.\n'
-                                         'Get Token request returned: 
{}'.format(err.response))
-        except TimeoutError as err:
-            logger.debug('throw TimeoutError when doing MSIAuthentication: 
\n%s',
-                         traceback.format_exc())
-            raise AzureConnectionError('MSI endpoint is not responding. Please 
make sure MSI is configured correctly.\n'
-                                       'Error detail: {}'.format(str(err)))
-
-    def signed_session(self, session=None):
-        logger.debug("MSIAuthenticationWrapper.signed_session invoked by Track 
1 SDK")
-        super().signed_session(session)
-
-    def get_auxiliary_tokens(self, *scopes, **kwargs):  # 
pylint:disable=no-self-use,unused-argument
-        """This method is added to align with 
CredentialAdaptor.get_auxiliary_tokens
-        Since managed identity belongs to a single tenant and currently 
doesn't support cross-tenant authentication,
-        simply return None."""
-        return None
-
-
-def _normalize_expires_on(expires_on):
-    """
-    The expires_on field returned by managed identity differs on Azure VM 
(epoch str) and App Service (datetime str).
-    Normalize to epoch int.
-    """
-    try:
-        # Treat as epoch string "1605238724"
-        expires_on_epoch_int = int(expires_on)
-    except ValueError:
-        import datetime
-
-        # Python 3.6 doesn't recognize timezone as +00:00.
-        # These lines can be dropped after Python 3.6 is dropped.
-        # 
https://stackoverflow.com/questions/30999230/how-to-parse-timezone-with-colon
-        if expires_on[-3] == ":":
-            expires_on = expires_on[:-3] + expires_on[-2:]
-
-        # Treat as datetime string "11/05/2021 15:18:31 +00:00"
-        expires_on_epoch_int = int(datetime.datetime.strptime(expires_on, 
'%m/%d/%Y %H:%M:%S %z').timestamp())
-
-    logger.debug("Normalize expires_on: %r -> %r", expires_on, 
expires_on_epoch_int)
-    return expires_on_epoch_int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure/cli/core/auth/credential_adaptor.py 
new/azure_cli_core-2.75.0/azure/cli/core/auth/credential_adaptor.py
--- old/azure_cli_core-2.74.0/azure/cli/core/auth/credential_adaptor.py 
2025-05-27 11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/auth/credential_adaptor.py 
2025-06-24 12:16:29.000000000 +0200
@@ -76,7 +76,7 @@
     #     'token_source': 'cache'
     # }
     from .constants import ACCESS_TOKEN, EXPIRES_IN
-    from .util import _now_timestamp
+    from .util import now_timestamp
     from azure.core.credentials import AccessTokenInfo
 
-    return AccessTokenInfo(token_entry[ACCESS_TOKEN], _now_timestamp() + 
token_entry[EXPIRES_IN])
+    return AccessTokenInfo(token_entry[ACCESS_TOKEN], now_timestamp() + 
token_entry[EXPIRES_IN])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/azure_cli_core-2.74.0/azure/cli/core/auth/util.py 
new/azure_cli_core-2.75.0/azure/cli/core/auth/util.py
--- old/azure_cli_core-2.74.0/azure/cli/core/auth/util.py       2025-05-27 
11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/auth/util.py       2025-06-24 
12:16:29.000000000 +0200
@@ -151,7 +151,7 @@
     # This can slow down commands that doesn't need azure.core, like `az 
account get-access-token`.
     # So We define our own AccessToken.
     from .constants import ACCESS_TOKEN, EXPIRES_IN
-    return AccessToken(token_entry[ACCESS_TOKEN], _now_timestamp() + 
token_entry[EXPIRES_IN])
+    return AccessToken(token_entry[ACCESS_TOKEN], now_timestamp() + 
token_entry[EXPIRES_IN])
 
 
 def decode_access_token(access_token):
@@ -177,6 +177,6 @@
     return success_template, error_template
 
 
-def _now_timestamp():
+def now_timestamp():
     import time
     return int(time.time())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure/cli/core/breaking_change.py 
new/azure_cli_core-2.75.0/azure/cli/core/breaking_change.py
--- old/azure_cli_core-2.74.0/azure/cli/core/breaking_change.py 2025-05-27 
11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/breaking_change.py 2025-06-24 
12:16:29.000000000 +0200
@@ -106,10 +106,10 @@
         self.tags = list(tags)
 
         def _get_merged_tag(self):
-            return ''.join({tag._get_tag(self) for tag in self.tags})  # 
pylint: disable=protected-access
+            return ''.join({tag._get_tag(tag) for tag in self.tags})  # 
pylint: disable=protected-access
 
         def _get_merged_msg(self):
-            return '\n'.join({tag._get_message(self) for tag in self.tags})  # 
pylint: disable=protected-access
+            return '\n'.join({tag._get_message(tag) for tag in self.tags})  # 
pylint: disable=protected-access
 
         super().__init__(cli_ctx, tag.object_type, tag.target, 
tag_func=_get_merged_tag,
                          message_func=_get_merged_msg, color=tag._color)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure/cli/core/commands/__init__.py 
new/azure_cli_core-2.75.0/azure/cli/core/commands/__init__.py
--- old/azure_cli_core-2.74.0/azure/cli/core/commands/__init__.py       
2025-05-27 11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/commands/__init__.py       
2025-06-24 12:16:29.000000000 +0200
@@ -1054,7 +1054,13 @@
                     logger.warning('%s during progress reporting: %s', 
getattr(type(ex), '__name__', type(ex)), ex)
             try:
                 if self.progress_bar:
-                    self.progress_bar.update_progress()
+                    status = ""
+                    # some pollers do not have a status method (eg. 
AAZLROPoller)
+                    try:
+                        status = poller.status()
+                    except AttributeError:
+                        pass
+                    self.progress_bar.update_progress_with_msg(status)
                 self._delay()
             except KeyboardInterrupt:
                 if self.progress_bar:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure/cli/core/commands/progress.py 
new/azure_cli_core-2.75.0/azure/cli/core/commands/progress.py
--- old/azure_cli_core-2.74.0/azure/cli/core/commands/progress.py       
2025-05-27 11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/commands/progress.py       
2025-06-24 12:16:29.000000000 +0200
@@ -192,5 +192,11 @@
     def update_progress(self):
         self.hook.add(message=self.message)
 
+    def update_progress_with_msg(self, message):
+        if message != "":
+            self.hook.add(message=message)
+        else:
+            self.hook.add(message=self.message)
+
     def end(self):
         self.hook.end()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure/cli/core/profiles/_shared.py 
new/azure_cli_core-2.75.0/azure/cli/core/profiles/_shared.py
--- old/azure_cli_core-2.74.0/azure/cli/core/profiles/_shared.py        
2025-05-27 11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/profiles/_shared.py        
2025-06-24 12:16:29.000000000 +0200
@@ -218,6 +218,7 @@
         ResourceType.DATA_STORAGE_FILESHARE: '2025-05-05',
         ResourceType.DATA_STORAGE_QUEUE: '2018-03-28',
         ResourceType.DATA_COSMOS_TABLE: '2017-04-17',
+        ResourceType.DATA_STORAGE_TABLE: None,
         ResourceType.MGMT_SERVICEBUS: '2022-10-01-preview',
         ResourceType.MGMT_EVENTHUB: '2022-01-01-preview',
         ResourceType.MGMT_MONITOR: None,
@@ -229,7 +230,7 @@
         ResourceType.MGMT_ARO: '2023-11-22',
         ResourceType.MGMT_DATABOXEDGE: '2021-02-01-preview',
         ResourceType.MGMT_CUSTOMLOCATION: '2021-03-15-preview',
-        ResourceType.MGMT_CONTAINERSERVICE: SDKProfile('2025-03-01'),
+        ResourceType.MGMT_CONTAINERSERVICE: SDKProfile('2025-04-01'),
         ResourceType.MGMT_APPCONTAINERS: '2022-10-01',
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/azure_cli_core-2.74.0/azure/cli/core/telemetry.py 
new/azure_cli_core-2.75.0/azure/cli/core/telemetry.py
--- old/azure_cli_core-2.74.0/azure/cli/core/telemetry.py       2025-05-27 
11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure/cli/core/telemetry.py       2025-06-24 
12:16:29.000000000 +0200
@@ -78,7 +78,6 @@
         self.enable_broker_on_windows = None
         self.msal_telemetry = None
         self.login_experience_v2 = None
-        self.use_msal_managed_identity = None
 
     def add_event(self, name, properties):
         for key in self.instrumentation_key:
@@ -235,7 +234,6 @@
         set_custom_properties(result, 'EnableBrokerOnWindows', 
str(self.enable_broker_on_windows))
         set_custom_properties(result, 'MsalTelemetry', self.msal_telemetry)
         set_custom_properties(result, 'LoginExperienceV2', 
str(self.login_experience_v2))
-        set_custom_properties(result, 'UseMsalManagedIdentity', 
str(self.use_msal_managed_identity))
 
         return result
 
@@ -488,11 +486,6 @@
 @decorators.suppress_all_exceptions()
 def set_login_experience_v2(login_experience_v2):
     _session.login_experience_v2 = login_experience_v2
-
-
-@decorators.suppress_all_exceptions()
-def set_use_msal_managed_identity(use_msal_managed_identity):
-    _session.use_msal_managed_identity = use_msal_managed_identity
 # endregion
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure_cli_core.egg-info/PKG-INFO 
new/azure_cli_core-2.75.0/azure_cli_core.egg-info/PKG-INFO
--- old/azure_cli_core-2.74.0/azure_cli_core.egg-info/PKG-INFO  2025-05-27 
11:14:39.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure_cli_core.egg-info/PKG-INFO  2025-06-24 
12:17:13.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: azure-cli-core
-Version: 2.74.0
+Version: 2.75.0
 Summary: Microsoft Azure Command-Line Tools Core Module
 Home-page: https://github.com/Azure/azure-cli
 Author: Microsoft Corporation
@@ -28,8 +28,8 @@
 Requires-Dist: knack~=0.11.0
 Requires-Dist: microsoft-security-utilities-secret-masker~=1.0.0b4
 Requires-Dist: msal-extensions==1.2.0
-Requires-Dist: msal[broker]==1.32.3
-Requires-Dist: msrestazure~=0.6.4
+Requires-Dist: msal[broker]==1.33.0b1; sys_platform == "win32"
+Requires-Dist: msal==1.33.0b1; sys_platform != "win32"
 Requires-Dist: packaging>=20.9
 Requires-Dist: pkginfo>=1.5.0.1
 Requires-Dist: psutil>=5.9; sys_platform != "cygwin"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure_cli_core.egg-info/SOURCES.txt 
new/azure_cli_core-2.75.0/azure_cli_core.egg-info/SOURCES.txt
--- old/azure_cli_core-2.74.0/azure_cli_core.egg-info/SOURCES.txt       
2025-05-27 11:14:39.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure_cli_core.egg-info/SOURCES.txt       
2025-06-24 12:17:13.000000000 +0200
@@ -58,7 +58,6 @@
 azure/cli/core/aaz/exceptions.py
 azure/cli/core/aaz/utils.py
 azure/cli/core/auth/__init__.py
-azure/cli/core/auth/adal_authentication.py
 azure/cli/core/auth/binary_cache.py
 azure/cli/core/auth/constants.py
 azure/cli/core/auth/credential_adaptor.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/azure_cli_core-2.74.0/azure_cli_core.egg-info/requires.txt 
new/azure_cli_core-2.75.0/azure_cli_core.egg-info/requires.txt
--- old/azure_cli_core-2.74.0/azure_cli_core.egg-info/requires.txt      
2025-05-27 11:14:39.000000000 +0200
+++ new/azure_cli_core-2.75.0/azure_cli_core.egg-info/requires.txt      
2025-06-24 12:17:13.000000000 +0200
@@ -7,8 +7,6 @@
 knack~=0.11.0
 microsoft-security-utilities-secret-masker~=1.0.0b4
 msal-extensions==1.2.0
-msal[broker]==1.32.3
-msrestazure~=0.6.4
 packaging>=20.9
 pkginfo>=1.5.0.1
 PyJWT>=2.1.0
@@ -19,5 +17,11 @@
 [:sys_platform != "cygwin"]
 psutil>=5.9
 
+[:sys_platform != "win32"]
+msal==1.33.0b1
+
 [:sys_platform == "linux"]
 distro
+
+[:sys_platform == "win32"]
+msal[broker]==1.33.0b1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/azure_cli_core-2.74.0/setup.py 
new/azure_cli_core-2.75.0/setup.py
--- old/azure_cli_core-2.74.0/setup.py  2025-05-27 11:14:12.000000000 +0200
+++ new/azure_cli_core-2.75.0/setup.py  2025-06-24 12:16:29.000000000 +0200
@@ -8,7 +8,7 @@
 from codecs import open
 from setuptools import setup, find_packages
 
-VERSION = "2.74.0"
+VERSION = "2.75.0"
 
 # If we have source, validate that our version numbers match
 # This should prevent uploading releases with mismatched versions.
@@ -54,8 +54,8 @@
     'knack~=0.11.0',
     'microsoft-security-utilities-secret-masker~=1.0.0b4',
     'msal-extensions==1.2.0',
-    'msal[broker]==1.32.3',
-    'msrestazure~=0.6.4',
+    'msal[broker]==1.33.0b1; sys_platform == "win32"',
+    'msal==1.33.0b1; sys_platform != "win32"',
     'packaging>=20.9',
     'pkginfo>=1.5.0.1',
     # psutil can't install on cygwin: 
https://github.com/Azure/azure-cli/issues/9399

Reply via email to