Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@

</PropertyGroup>

<!-- AOT compatibility for .NET 8+ -->
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>

<ItemGroup Label="Build Tools" Condition="$([MSBuild]::IsOsPlatform('Windows'))">
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
<PackageReference Include="Microsoft.CodeAnalysis.PublicApiAnalyzers">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public void Clear()
{
try
{
GError err = (GError)Marshal.PtrToStructure(error, typeof(GError));
GError err = Marshal.PtrToStructure<GError>(error);
throw new InteropException(
$"An error was encountered while clearing secret from keyring in the {nameof(Storage)} domain:'{err.Domain}' code:'{err.Code}' message:'{err.Message}'",
err.Code);
Expand Down Expand Up @@ -136,7 +136,7 @@ public byte[] Read()
{
try
{
GError err = (GError)Marshal.PtrToStructure(error, typeof(GError));
GError err = Marshal.PtrToStructure<GError>(error);
throw new InteropException(
$"An error was encountered while reading secret from keyring in the {nameof(Storage)} domain:'{err.Domain}' code:'{err.Code}' message:'{err.Message}'", err.Code);
}
Expand Down Expand Up @@ -181,7 +181,7 @@ public void Write(byte[] data)
{
try
{
GError err = (GError)Marshal.PtrToStructure(error, typeof(GError));
GError err = Marshal.PtrToStructure<GError>(error);
string message = $"An error was encountered while saving secret to keyring in the {nameof(Storage)} domain:'{err.Domain}' code:'{err.Code}' message:'{err.Message}'";
throw new InteropException(message, err.Code);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ internal static class LibSystem

public static IntPtr GetGlobal(IntPtr handle, string symbol)
{
IntPtr ptr = dlsym(handle, symbol);
var structure = Marshal.PtrToStructure(ptr, typeof(IntPtr));
IntPtr ptr = dlsym(handle, symbol);
var structure = Marshal.PtrToStructure<IntPtr>(ptr);

return (IntPtr)structure;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,14 +109,8 @@
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
</ItemGroup>

<PropertyGroup Condition="'$(TargetFramework)' == '$(TargetFrameworkNet)' ">
<IsTrimmable>true</IsTrimmable>
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
</PropertyGroup>

<ItemGroup Condition=" '$(TargetFramework)' == '$(TargetFrameworkNetDesktop462)' or '$(TargetFramework)' == '$(TargetFrameworkNetDesktop472)'">
<Compile Include="$(PathToMsalSources)\Platforms\Features\OpenTelemetry\**\*.cs" />

<PackageReference Include="System.Diagnostics.DiagnosticSource" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -350,14 +350,17 @@ public async Task InitiateBrokerHandshakeAsync()
return;
}

dynamic errorResult = JObject.Parse(helloRequestResult.GetString(BrokerConstants.BrokerResultV2));
JObject errorResultObj = JObject.Parse(helloRequestResult.GetString(BrokerConstants.BrokerResultV2) ?? "{}");
string errorCode = null;
string errorDescription = null;

if (!string.IsNullOrEmpty(errorResult))
if (errorResultObj != null && errorResultObj.Count > 0)
{
errorCode = errorResult[BrokerResponseConst.BrokerErrorCode]?.ToString();
string errorMessage = errorResult[BrokerResponseConst.BrokerErrorMessage]?.ToString();
JToken errorCodeToken = errorResultObj[BrokerResponseConst.BrokerErrorCode];
errorCode = errorCodeToken?.ToString();

JToken errorMsgToken = errorResultObj[BrokerResponseConst.BrokerErrorMessage];
string errorMessage = errorMsgToken?.ToString();
errorDescription = $"[Android broker] An error occurred during hand shake with the broker. Error: {errorCode} Error Message: {errorMessage}";
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,18 @@ internal static void SetBrokerResult(Intent data, int resultCode, ILoggerAdapter
case (int)BrokerResponseCode.BrowserCodeError:
unreliableLogger?.Info("[Android broker] Response received - error. ");

dynamic errorResult = JObject.Parse(data.GetStringExtra(BrokerConstants.BrokerResultV2));
JObject errorResultObj = JObject.Parse(data.GetStringExtra(BrokerConstants.BrokerResultV2) ?? "{}");

string error;
string errorDescription;
if (errorResult != null)

if (errorResultObj != null && errorResultObj.Count > 0)
{
error = errorResult[BrokerResponseConst.BrokerErrorCode]?.ToString();
errorDescription = errorResult[BrokerResponseConst.BrokerErrorMessage]?.ToString();
JToken errorToken = errorResultObj[BrokerResponseConst.BrokerErrorCode];
error = errorToken?.ToString();

JToken errorDescToken = errorResultObj[BrokerResponseConst.BrokerErrorMessage];
errorDescription = errorDescToken?.ToString();

unreliableLogger?.Error($"[Android broker] error: {error} errorDescription {errorDescription}. ");
}
Expand All @@ -77,20 +81,27 @@ internal static void SetBrokerResult(Intent data, int resultCode, ILoggerAdapter
}

var httpResponse = new HttpResponse();
//TODO: figure out how to get status code properly deserialized from JObject
httpResponse.Body = errorResult[BrokerResponseConst.BrokerHttpBody]?.ToString();
//Get HTTP body from the JSON
JToken bodyToken = errorResultObj[BrokerResponseConst.BrokerHttpBody];
httpResponse.Body = bodyToken?.ToString();

JToken subErrorToken = errorResultObj[BrokerResponseConst.BrokerSubError];
JToken tenantIdToken = errorResultObj[BrokerResponseConst.TenantId];
JToken upnToken = errorResultObj[BrokerResponseConst.UserName];
JToken accountUserIdToken = errorResultObj[BrokerResponseConst.LocalAccountId];
JToken authorityUrlToken = errorResultObj[BrokerResponseConst.Authority];

InteractiveBrokerTokenResponse = new MsalTokenResponse
{
Error = error,
ErrorDescription = errorDescription,
SubError = errorResult[BrokerResponseConst.BrokerSubError],
SubError = subErrorToken?.ToString(),
HttpResponse = httpResponse,
CorrelationId = InteractiveRequestCorrelationId,
TenantId = errorResult[BrokerResponseConst.TenantId]?.ToString(),
Upn = errorResult[BrokerResponseConst.UserName]?.ToString(),
AccountUserId = errorResult[BrokerResponseConst.LocalAccountId]?.ToString(),
AuthorityUrl = errorResult[BrokerResponseConst.Authority]?.ToString(),
TenantId = tenantIdToken?.ToString(),
Upn = upnToken?.ToString(),
AccountUserId = accountUserIdToken?.ToString(),
AuthorityUrl = authorityUrlToken?.ToString(),
};
break;
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
using Microsoft.Identity.Client.UI;
using Microsoft.Identity.Client.Utils;
using Microsoft.Identity.Json.Linq;
using System.Diagnostics.CodeAnalysis;
using AndroidNative = Android;
using AndroidUri = Android.Net.Uri;

Expand Down Expand Up @@ -73,14 +74,18 @@ public string GetProtocolKeyFromHandShakeResult(Bundle bundleResult)
return negotiatedBrokerProtocalKey;
}

dynamic errorResult = JObject.Parse(bundleResult?.GetString(BrokerConstants.BrokerResultV2));
JObject errorResultObj = JObject.Parse(bundleResult?.GetString(BrokerConstants.BrokerResultV2) ?? "{}");
string errorCode = null;
string errorDescription = null;

if (!string.IsNullOrEmpty(errorResult))
if (errorResultObj != null && errorResultObj.Count > 0)
{
errorCode = errorResult[BrokerResponseConst.BrokerErrorCode]?.ToString();
string errorMessage = errorResult[BrokerResponseConst.BrokerErrorMessage]?.ToString();
JToken errorCodeToken = errorResultObj[BrokerResponseConst.BrokerErrorCode];
errorCode = errorCodeToken?.ToString();

JToken errorMessageToken = errorResultObj[BrokerResponseConst.BrokerErrorMessage];
string errorMessage = errorMessageToken?.ToString();

errorDescription = $"[Android broker] An error occurred during hand shake with the broker. Error: {errorCode} Error Message: {errorMessage}";
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ [Out] out LsaSafeHandle LsaHandle
);

[DllImport(SECUR32)]
public static unsafe extern int LsaCallAuthenticationPackage(
public static extern unsafe int LsaCallAuthenticationPackage(
LsaSafeHandle LsaHandle,
int AuthenticationPackage,
void* ProtocolSubmitBuffer,
Expand Down Expand Up @@ -403,19 +403,20 @@ public void Dispose()
}
}

// Replace the usage of Marshal.PtrToStructure(IntPtr, Type) with the generic version Marshal.PtrToStructure<T>(IntPtr)
// in the ForEachBuffer method inside SecBufferDesc struct.

private void ForEachBuffer(Action<SecBuffer> onBuffer)
{
for (int Index = 0; Index < cBuffers; Index++)
{
int CurrentOffset = Index * Marshal.SizeOf(typeof(SecBuffer));
int CurrentOffset = Index * Marshal.SizeOf<SecBuffer>();

SecBuffer thisSecBuffer = (SecBuffer)Marshal.PtrToStructure(
SecBuffer thisSecBuffer = (SecBuffer)Marshal.PtrToStructure<SecBuffer>(
IntPtr.Add(
pBuffers,
CurrentOffset
),
typeof(SecBuffer)
);
));

onBuffer(thisSecBuffer);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public unsafe void ImportCredential(byte[] ticketBytes, long luid = 0)
{
MessageType = NativeMethods.KERB_PROTOCOL_MESSAGE_TYPE.KerbSubmitTicketMessage,
KerbCredSize = ticketBytes.Length,
KerbCredOffset = Marshal.SizeOf(typeof(NativeMethods.KERB_SUBMIT_TKT_REQUEST)),
KerbCredOffset = Marshal.SizeOf<NativeMethods.KERB_SUBMIT_TKT_REQUEST>(),
LogonId = luid
};

Expand Down