# [PATCH] libsecret: retrieve empty password

4 messages from 2024-02-18 to 2024-02-19. Participants: M Hickford via GitGitGadget, Patrick Steinhardt, M Hickford.
Thread: https://gitlist.dev/t/60951

## M Hickford via GitGitGadget, 2024-02-18 22:51

Subject: [PATCH] libsecret: retrieve empty password
Message-ID: <pull.1676.git.git.1708296694988.gitgitgadget@gmail.com>
URL: https://gitlist.dev/e/pull.1676.git.git.1708296694988.gitgitgadget%40gmail.com

```
From: M Hickford <mirth.hickford@gmail.com>

Since 0ce02e2f (credential/libsecret: store new attributes, 2023-06-16)
a test that stores empty username and password fails when
t0303-credential-external.sh is run with
GIT_TEST_CREDENTIAL_HELPER=libsecret.

Retrieve empty password carefully. This fixes test:

    ok 14 - helper (libsecret) can store empty username

Signed-off-by: M Hickford <mirth.hickford@gmail.com>
---
    libsecret: retrieve empty password

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1676%2Fhickford%2Flibsecret-empty-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1676/hickford/libsecret-empty-v1
Pull-Request: https://github.com/git/git/pull/1676

 contrib/credential/libsecret/git-credential-libsecret.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/contrib/credential/libsecret/git-credential-libsecret.c b/contrib/credential/libsecret/git-credential-libsecret.c
index 215a81d8bae..d9e9e4fd524 100644
--- a/contrib/credential/libsecret/git-credential-libsecret.c
+++ b/contrib/credential/libsecret/git-credential-libsecret.c
@@ -164,6 +164,9 @@ static int keyring_get(struct credential *c)
 			if (g_strv_length(parts) >= 1) {
 				g_free(c->password);
 				c->password = g_strdup(parts[0]);
+			} else {
+				g_free(c->password);
+				c->password = strdup("");
 			}
 			for (int i = 1; i < g_strv_length(parts); i++) {
 				if (g_str_has_prefix(parts[i], "password_expiry_utc=")) {

base-commit: 3e0d3cd5c7def4808247caf168e17f2bbf47892b
-- 
gitgitgadget

```

## Patrick Steinhardt, 2024-02-19 06:08

Subject: Re: [PATCH] libsecret: retrieve empty password
Message-ID: <ZdLweyFLDtdMAq2x@tanuki>
URL: https://gitlist.dev/e/ZdLweyFLDtdMAq2x%40tanuki
In-Reply-To: <pull.1676.git.git.1708296694988.gitgitgadget@gmail.com>

```
On Sun, Feb 18, 2024 at 10:51:34PM +0000, M Hickford via GitGitGadget wrote:
> From: M Hickford <mirth.hickford@gmail.com>
> 
> Since 0ce02e2f (credential/libsecret: store new attributes, 2023-06-16)
> a test that stores empty username and password fails when
> t0303-credential-external.sh is run with
> GIT_TEST_CREDENTIAL_HELPER=libsecret.
> 
> Retrieve empty password carefully. This fixes test:
> 
>     ok 14 - helper (libsecret) can store empty username
> 
> Signed-off-by: M Hickford <mirth.hickford@gmail.com>
> ---
>     libsecret: retrieve empty password
> 
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1676%2Fhickford%2Flibsecret-empty-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1676/hickford/libsecret-empty-v1
> Pull-Request: https://github.com/git/git/pull/1676
> 
>  contrib/credential/libsecret/git-credential-libsecret.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/contrib/credential/libsecret/git-credential-libsecret.c b/contrib/credential/libsecret/git-credential-libsecret.c
> index 215a81d8bae..d9e9e4fd524 100644
> --- a/contrib/credential/libsecret/git-credential-libsecret.c
> +++ b/contrib/credential/libsecret/git-credential-libsecret.c
> @@ -164,6 +164,9 @@ static int keyring_get(struct credential *c)
>  			if (g_strv_length(parts) >= 1) {
>  				g_free(c->password);
>  				c->password = g_strdup(parts[0]);
> +			} else {
> +				g_free(c->password);
> +				c->password = strdup("");

Shouldn't we use `g_strdup()` here, like we do everywhere else in this
credential helper?

Patrick

>  			}
>  			for (int i = 1; i < g_strv_length(parts); i++) {
>  				if (g_str_has_prefix(parts[i], "password_expiry_utc=")) {
> 
> base-commit: 3e0d3cd5c7def4808247caf168e17f2bbf47892b
> -- 
> gitgitgadget
> 

```

## M Hickford, 2024-02-19 20:00

Subject: Re: [PATCH] libsecret: retrieve empty password
Message-ID: <CAGJzqsmwpHu7sMNs6C7k-V5JtpPtdYmXEp2uk-x-ZKLZ8S6jCA@mail.gmail.com>
URL: https://gitlist.dev/e/CAGJzqsmwpHu7sMNs6C7k-V5JtpPtdYmXEp2uk-x-ZKLZ8S6jCA%40mail.gmail.com
In-Reply-To: <ZdLweyFLDtdMAq2x@tanuki>

```
> > +                             g_free(c->password);
> > +                             c->password = strdup("");
>
> Shouldn't we use `g_strdup()` here, like we do everywhere else in this
> credential helper?

You're right. I'll correct in patch v2.

```

## M Hickford via GitGitGadget, 2024-02-19 20:40

Subject: [PATCH v2] libsecret: retrieve empty password
Message-ID: <pull.1676.v2.git.git.1708375258296.gitgitgadget@gmail.com>
URL: https://gitlist.dev/e/pull.1676.v2.git.git.1708375258296.gitgitgadget%40gmail.com
In-Reply-To: <pull.1676.git.git.1708296694988.gitgitgadget@gmail.com>

```
From: M Hickford <mirth.hickford@gmail.com>

Since 0ce02e2f (credential/libsecret: store new attributes, 2023-06-16)
a test that stores empty username and password fails when
t0303-credential-external.sh is run with
GIT_TEST_CREDENTIAL_HELPER=libsecret.

Retrieve empty password carefully. This fixes test:

    ok 14 - helper (libsecret) can store empty username

Signed-off-by: M Hickford <mirth.hickford@gmail.com>
---
    libsecret: retrieve empty password
    
    cc: Patrick Steinhardt ps@pks.im

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1676%2Fhickford%2Flibsecret-empty-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1676/hickford/libsecret-empty-v2
Pull-Request: https://github.com/git/git/pull/1676

Range-diff vs v1:

 1:  877bbfb72ed ! 1:  2cdcba20622 libsecret: retrieve empty password
     @@ contrib/credential/libsecret/git-credential-libsecret.c: static int keyring_get(
       				c->password = g_strdup(parts[0]);
      +			} else {
      +				g_free(c->password);
     -+				c->password = strdup("");
     ++				c->password = g_strdup("");
       			}
       			for (int i = 1; i < g_strv_length(parts); i++) {
       				if (g_str_has_prefix(parts[i], "password_expiry_utc=")) {


 contrib/credential/libsecret/git-credential-libsecret.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/contrib/credential/libsecret/git-credential-libsecret.c b/contrib/credential/libsecret/git-credential-libsecret.c
index 215a81d8bae..90034d0cf1e 100644
--- a/contrib/credential/libsecret/git-credential-libsecret.c
+++ b/contrib/credential/libsecret/git-credential-libsecret.c
@@ -164,6 +164,9 @@ static int keyring_get(struct credential *c)
 			if (g_strv_length(parts) >= 1) {
 				g_free(c->password);
 				c->password = g_strdup(parts[0]);
+			} else {
+				g_free(c->password);
+				c->password = g_strdup("");
 			}
 			for (int i = 1; i < g_strv_length(parts); i++) {
 				if (g_str_has_prefix(parts[i], "password_expiry_utc=")) {

base-commit: 3e0d3cd5c7def4808247caf168e17f2bbf47892b
-- 
gitgitgadget

```
