[PATCH] erofs-utils: lib: oci: cleanup ocierofs_get_auth_token()

Gao Xiang hsiangkao at linux.alibaba.com
Thu Sep 4 17:57:04 AEST 2025


 - `registry` and `repository` doesn't need to be passed in again;

 - `ctx->auth_header` can be assigned directly.

Cc: Chengyu Zhu <hudsonzhu at tencent.com>
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
 lib/remotes/oci.c | 46 +++++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

diff --git a/lib/remotes/oci.c b/lib/remotes/oci.c
index f2b08b2..189b634 100644
--- a/lib/remotes/oci.c
+++ b/lib/remotes/oci.c
@@ -511,9 +511,8 @@ static char *ocierofs_discover_auth_endpoint(struct ocierofs_ctx *ctx,
 	return result;
 }
 
-static char *ocierofs_get_auth_token(struct ocierofs_ctx *ctx, const char *registry,
-				     const char *repository, const char *username,
-				     const char *password)
+static int ocierofs_get_auth_token(struct ocierofs_ctx *ctx, const char *username,
+				   const char *password)
 {
 	static const char * const auth_patterns[] = {
 		"https://%s/v2/auth",
@@ -521,8 +520,9 @@ static char *ocierofs_get_auth_token(struct ocierofs_ctx *ctx, const char *regis
 		"https://%s/token",
 		NULL,
 	};
-	char *auth_header = NULL;
-	char *discovered_auth_url = NULL;
+	const char *registry = ctx->registry;
+	const char *repository = ctx->repository;
+	char *auth_header, *discovered_auth_url;
 	char *discovered_service = NULL;
 	const char *service = registry;
 	bool docker_reg;
@@ -535,8 +535,10 @@ static char *ocierofs_get_auth_token(struct ocierofs_ctx *ctx, const char *regis
 		auth_header = ocierofs_get_auth_token_with_url(ctx,
 				"https://auth.docker.io/token", service, repository,
 				username, password);
-		if (!IS_ERR(auth_header))
-			return auth_header;
+		if (!IS_ERR(auth_header)) {
+			ctx->auth_header = auth_header;
+			return 0;
+		}
 	}
 
 	discovered_auth_url = ocierofs_discover_auth_endpoint(ctx, registry, repository);
@@ -579,8 +581,10 @@ static char *ocierofs_get_auth_token(struct ocierofs_ctx *ctx, const char *regis
 							       username, password);
 		free(discovered_auth_url);
 		free(discovered_service);
-		if (!IS_ERR(auth_header))
-			return auth_header;
+		if (!IS_ERR(auth_header)) {
+			ctx->auth_header = auth_header;
+			return 0;
+		}
 	}
 
 	for (i = 0; auth_patterns[i]; i++) {
@@ -594,12 +598,16 @@ static char *ocierofs_get_auth_token(struct ocierofs_ctx *ctx, const char *regis
 							       username, password);
 		free(auth_url);
 
-		if (!IS_ERR(auth_header))
-			return auth_header;
-		if (!docker_reg)
-			return NULL;
+		if (!IS_ERR(auth_header)) {
+			ctx->auth_header = auth_header;
+			return 0;
+		}
+		if (!docker_reg) {
+			ctx->auth_header = NULL;
+			return 0;
+		}
 	}
-	return ERR_PTR(-ENOENT);
+	return -ENOENT;
 }
 
 static char *ocierofs_get_manifest_digest(struct ocierofs_ctx *ctx,
@@ -863,19 +871,15 @@ static int ocierofs_prepare_auth(struct ocierofs_ctx *ctx,
 				 const char *password)
 {
 	char *auth_header = NULL;
-	int ret = 0;
+	int ret;
 
 	ctx->using_basic = false;
 	free(ctx->auth_header);
 	ctx->auth_header = NULL;
 
-	auth_header = ocierofs_get_auth_token(ctx, ctx->registry,
-					      ctx->repository,
-					      username, password);
-	if (!IS_ERR(auth_header)) {
-		ctx->auth_header = auth_header;
+	ret = ocierofs_get_auth_token(ctx, username, password);
+	if (!ret)
 		return 0;
-	}
 
 	if (username && password && *username && *password) {
 		ret = ocierofs_curl_setup_basic_auth(ctx->curl,
-- 
2.43.5



More information about the Linux-erofs mailing list