PolicyKit: Branch 'gvariant-audit' - 12 commits
Miloslav Trmac
mitr at kemper.freedesktop.org
Wed Jun 21 20:29:03 UTC 2017
Rebased ref, commits from common ancestor:
commit bc3832b9de44a4a7e64411b35c53c19472135dcd
Author: Miloslav Trmač <mitr at redhat.com>
Date: Thu Feb 9 19:58:12 2017 +0100
Fix a memory leak on agent authentication cancellation
(This is cancellation by the daemon, possibly requested by the client, not by the agent.)
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
index b8096b3..e595bd5 100644
--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
+++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
@@ -2437,13 +2437,18 @@ authentication_agent_cancel_cb (GDBusProxy *proxy,
GAsyncResult *res,
gpointer user_data)
{
+ GVariant *result;
GError *error;
+
error = NULL;
- if (!g_dbus_proxy_call_finish (proxy, res, &error))
+ result = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (result == NULL)
{
g_printerr ("Error cancelling authentication: %s\n", error->message);
g_error_free (error);
}
+ else
+ g_variant_unref (result);
}
static void
commit ec86d73c1dbbe1e0413ae172ad4fa49a4cbd2dce
Author: Miloslav Trmač <mitr at redhat.com>
Date: Thu Feb 9 19:53:54 2017 +0100
Fix a memory leak per agent authentication
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
index bf0ee48..b8096b3 100644
--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
+++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
@@ -1906,15 +1906,15 @@ authentication_agent_begin_cb (GDBusProxy *proxy,
AuthenticationSession *session = user_data;
gboolean gained_authorization;
gboolean was_dismissed;
+ GVariant *result;
GError *error;
was_dismissed = FALSE;
gained_authorization = FALSE;
error = NULL;
- if (!g_dbus_proxy_call_finish (proxy,
- res,
- &error))
+ result = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (result == NULL)
{
g_printerr ("Error performing authentication: %s (%s %d)\n",
error->message,
@@ -1926,6 +1926,7 @@ authentication_agent_begin_cb (GDBusProxy *proxy,
}
else
{
+ g_variant_unref (result);
gained_authorization = session->is_authenticated;
g_debug ("Authentication complete, is_authenticated = %d", session->is_authenticated);
}
commit dc09ea5b5fdf764adcdd2986a3ea36be6316eabc
Author: Miloslav Trmač <mitr at redhat.com>
Date: Thu Feb 9 19:38:17 2017 +0100
Fix error handling in polkit_authority_enumerate_temporary_authorizations_finish
Fix memory leaks, and don't return a pointer to freed memory.
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkit/polkitauthority.c b/src/polkit/polkitauthority.c
index b783c0e..404954f 100644
--- a/src/polkit/polkitauthority.c
+++ b/src/polkit/polkitauthority.c
@@ -1698,11 +1698,13 @@ polkit_authority_enumerate_temporary_authorizations_finish (PolkitAuthority *aut
g_prefix_error (error, "Error serializing return value of EnumerateTemporaryAuthorizations: ");
g_list_foreach (ret, (GFunc) g_object_unref, NULL);
g_list_free (ret);
- goto out;
+ ret = NULL;
+ goto out_array;
}
ret = g_list_prepend (ret, auth);
}
ret = g_list_reverse (ret);
+ out_array:
g_variant_unref (array);
g_variant_unref (value);
commit fdc8c54ca53bbded93d1ec19cacd4dd3028b1ac3
Author: Miloslav Trmač <mitr at redhat.com>
Date: Wed Feb 8 23:03:06 2017 +0100
Fix memory leaks in server_handle_*_temporary_authorizations
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkitbackend/polkitbackendauthority.c b/src/polkitbackend/polkitbackendauthority.c
index cad3f74..148e152 100644
--- a/src/polkitbackend/polkitbackendauthority.c
+++ b/src/polkitbackend/polkitbackendauthority.c
@@ -1165,6 +1165,7 @@ server_handle_enumerate_temporary_authorizations (Server *server
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(a(ss(sa{sv})tt))", &builder));
out:
+ g_variant_unref (subject_gvariant);
if (subject != NULL)
g_object_unref (subject);
}
@@ -1211,6 +1212,7 @@ server_handle_revoke_temporary_authorizations (Server *server,
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
out:
+ g_variant_unref (subject_gvariant);
if (subject != NULL)
g_object_unref (subject);
}
commit ae1adecfd788aea35540fc49244b75bbb4740c5d
Author: Miloslav Trmač <mitr at redhat.com>
Date: Wed Feb 8 22:57:21 2017 +0100
Fix a memory leak in server_handle_authentication_agent_response{,2}
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkitbackend/polkitbackendauthority.c b/src/polkitbackend/polkitbackendauthority.c
index 2bcad62..cad3f74 100644
--- a/src/polkitbackend/polkitbackendauthority.c
+++ b/src/polkitbackend/polkitbackendauthority.c
@@ -1054,6 +1054,7 @@ server_handle_authentication_agent_response (Server *server,
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
out:
+ g_variant_unref (identity_gvariant);
if (identity != NULL)
g_object_unref (identity);
}
@@ -1104,6 +1105,7 @@ server_handle_authentication_agent_response2 (Server *server,
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
out:
+ g_variant_unref (identity_gvariant);
if (identity != NULL)
g_object_unref (identity);
}
commit bce6ed9b6dea624e39151a7e9622068e8276ffc0
Author: Miloslav Trmač <mitr at redhat.com>
Date: Wed Feb 8 22:55:10 2017 +0100
Fix a memory leak in server_handle_unregister_authentication_agent
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkitbackend/polkitbackendauthority.c b/src/polkitbackend/polkitbackendauthority.c
index 7e08e57..2bcad62 100644
--- a/src/polkitbackend/polkitbackendauthority.c
+++ b/src/polkitbackend/polkitbackendauthority.c
@@ -1003,6 +1003,7 @@ server_handle_unregister_authentication_agent (Server *server,
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
out:
+ g_variant_unref (subject_gvariant);
if (subject != NULL)
g_object_unref (subject);
}
commit 94aa3fc7cc0ae5a943b886a7787fa076454a0f1b
Author: Miloslav Trmač <mitr at redhat.com>
Date: Wed Feb 8 22:53:58 2017 +0100
Fix a memory leak in server_handle_register_authentication_agent_with_options
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkitbackend/polkitbackendauthority.c b/src/polkitbackend/polkitbackendauthority.c
index 86dad02..7e08e57 100644
--- a/src/polkitbackend/polkitbackendauthority.c
+++ b/src/polkitbackend/polkitbackendauthority.c
@@ -951,6 +951,7 @@ server_handle_register_authentication_agent_with_options (Server
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
out:
+ g_variant_unref (subject_gvariant);
if (options != NULL)
g_variant_unref (options);
if (subject != NULL)
commit 184a79cba7f460575289eaa94484faa88cb7be0c
Author: Miloslav Trmač <mitr at redhat.com>
Date: Wed Feb 8 22:27:11 2017 +0100
Fix a memory leak on an error path of lookup_asv (twice)
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkit/polkitidentity.c b/src/polkit/polkitidentity.c
index b0b46bf..3aa1f7f 100644
--- a/src/polkit/polkitidentity.c
+++ b/src/polkit/polkitidentity.c
@@ -266,6 +266,7 @@ lookup_asv (GVariant *dict,
g_variant_get_type_string (value),
type_string);
g_free (type_string);
+ g_variant_unref (value);
goto out;
}
ret = value;
diff --git a/src/polkit/polkitsubject.c b/src/polkit/polkitsubject.c
index 4a36941..d4c1182 100644
--- a/src/polkit/polkitsubject.c
+++ b/src/polkit/polkitsubject.c
@@ -362,6 +362,7 @@ lookup_asv (GVariant *dict,
g_variant_get_type_string (value),
type_string);
g_free (type_string);
+ g_variant_unref (value);
goto out;
}
ret = value;
commit 4b3afca2bfecd220beec5e9cae152cf90b290dae
Author: Miloslav Trmač <mitr at redhat.com>
Date: Wed Feb 8 22:26:37 2017 +0100
Simplify GVariant reference counting
For (non-public-API) *_to_gvariant, explicitly document that they return
a floating value, and rely on it in callers to avoid a
variable/sink/unref combo.
This should not change behavior.
https://bugs.freedesktop.org/show_bug.cgi?id=99741
Signed-off-by: Miloslav Trmač <mitr at redhat.com>
diff --git a/src/polkit/polkitactiondescription.c b/src/polkit/polkitactiondescription.c
index 4bd9604..9c820e7 100644
--- a/src/polkit/polkitactiondescription.c
+++ b/src/polkit/polkitactiondescription.c
@@ -352,10 +352,10 @@ polkit_action_description_new_for_gvariant (GVariant *value)
return action_description;
}
+/* Note that this returns a floating value. */
GVariant *
polkit_action_description_to_gvariant (PolkitActionDescription *action_description)
{
- GVariant *value;
GVariantBuilder builder;
GHashTableIter iter;
const gchar *a_key;
@@ -368,17 +368,15 @@ polkit_action_description_to_gvariant (PolkitActionDescription *action_descripti
g_variant_builder_add (&builder, "{ss}", a_key, a_value);
/* TODO: note 'foo ? : ""' is a gcc specific extension (it's a short-hand for 'foo ? foo : ""') */
- value = g_variant_new ("(ssssssuuua{ss})",
- action_description->action_id ? : "",
- action_description->description ? : "",
- action_description->message ? : "",
- action_description->vendor_name ? : "",
- action_description->vendor_url ? : "",
- action_description->icon_name ? : "",
- action_description->implicit_any,
- action_description->implicit_inactive,
- action_description->implicit_active,
- &builder);
-
- return value;
+ return g_variant_new ("(ssssssuuua{ss})",
+ action_description->action_id ? : "",
+ action_description->description ? : "",
+ action_description->message ? : "",
+ action_description->vendor_name ? : "",
+ action_description->vendor_url ? : "",
+ action_description->icon_name ? : "",
+ action_description->implicit_any,
+ action_description->implicit_inactive,
+ action_description->implicit_active,
+ &builder);
}
diff --git a/src/polkit/polkitauthority.c b/src/polkit/polkitauthority.c
index 7c4db7b..b783c0e 100644
--- a/src/polkit/polkitauthority.c
+++ b/src/polkit/polkitauthority.c
@@ -886,8 +886,6 @@ polkit_authority_check_authorization (PolkitAuthority *authority,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GVariant *subject_value;
- GVariant *details_value;
CheckAuthData *data;
g_return_if_fail (POLKIT_IS_AUTHORITY (authority));
@@ -896,11 +894,6 @@ polkit_authority_check_authorization (PolkitAuthority *authority,
g_return_if_fail (details == NULL || POLKIT_IS_DETAILS (details));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- subject_value = polkit_subject_to_gvariant (subject);
- details_value = polkit_details_to_gvariant (details);
- g_variant_ref_sink (subject_value);
- g_variant_ref_sink (details_value);
-
data = g_new0 (CheckAuthData, 1);
data->authority = g_object_ref (authority);
data->simple = g_simple_async_result_new (G_OBJECT (authority),
@@ -915,9 +908,9 @@ polkit_authority_check_authorization (PolkitAuthority *authority,
g_dbus_proxy_call (authority->proxy,
"CheckAuthorization",
g_variant_new ("(@(sa{sv})s at a{ss}us)",
- subject_value,
+ polkit_subject_to_gvariant (subject), /* A floating value */
action_id,
- details_value,
+ polkit_details_to_gvariant (details), /* A floating value */
flags,
data->cancellation_id != NULL ? data->cancellation_id : ""),
G_DBUS_CALL_FLAGS_NONE,
@@ -925,8 +918,6 @@ polkit_authority_check_authorization (PolkitAuthority *authority,
cancellable,
(GAsyncReadyCallback) check_authorization_cb,
data);
- g_variant_unref (subject_value);
- g_variant_unref (details_value);
}
/**
@@ -1058,20 +1049,16 @@ polkit_authority_register_authentication_agent (PolkitAuthority *authority,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GVariant *subject_value;
-
g_return_if_fail (POLKIT_IS_AUTHORITY (authority));
g_return_if_fail (POLKIT_IS_SUBJECT (subject));
g_return_if_fail (locale != NULL);
g_return_if_fail (g_variant_is_object_path (object_path));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- subject_value = polkit_subject_to_gvariant (subject);
- g_variant_ref_sink (subject_value);
g_dbus_proxy_call (authority->proxy,
"RegisterAuthenticationAgent",
g_variant_new ("(@(sa{sv})ss)",
- subject_value,
+ polkit_subject_to_gvariant (subject), /* A floating value */
locale,
object_path),
G_DBUS_CALL_FLAGS_NONE,
@@ -1082,7 +1069,6 @@ polkit_authority_register_authentication_agent (PolkitAuthority *authority,
callback,
user_data,
polkit_authority_register_authentication_agent));
- g_variant_unref (subject_value);
}
/**
@@ -1375,19 +1361,15 @@ polkit_authority_unregister_authentication_agent (PolkitAuthority *authorit
GAsyncReadyCallback callback,
gpointer user_data)
{
- GVariant *subject_value;
-
g_return_if_fail (POLKIT_IS_AUTHORITY (authority));
g_return_if_fail (POLKIT_IS_SUBJECT (subject));
g_return_if_fail (g_variant_is_object_path (object_path));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- subject_value = polkit_subject_to_gvariant (subject);
- g_variant_ref_sink (subject_value);
g_dbus_proxy_call (authority->proxy,
"UnregisterAuthenticationAgent",
g_variant_new ("(@(sa{sv})s)",
- subject_value,
+ polkit_subject_to_gvariant (subject), /* A floating value */
object_path),
G_DBUS_CALL_FLAGS_NONE,
-1,
@@ -1397,7 +1379,6 @@ polkit_authority_unregister_authentication_agent (PolkitAuthority *authorit
callback,
user_data,
polkit_authority_unregister_authentication_agent));
- g_variant_unref (subject_value);
}
/**
@@ -1511,7 +1492,6 @@ polkit_authority_authentication_agent_response (PolkitAuthority *authority,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GVariant *identity_value;
/* Note that in reality, this API is only accessible to root, and
* only called from the setuid helper `polkit-agent-helper-1`.
*
@@ -1526,14 +1506,12 @@ polkit_authority_authentication_agent_response (PolkitAuthority *authority,
g_return_if_fail (POLKIT_IS_IDENTITY (identity));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- identity_value = polkit_identity_to_gvariant (identity);
- g_variant_ref_sink (identity_value);
g_dbus_proxy_call (authority->proxy,
"AuthenticationAgentResponse2",
g_variant_new ("(us@(sa{sv}))",
(guint32)uid,
cookie,
- identity_value),
+ polkit_identity_to_gvariant (identity)), /* A floating value */
G_DBUS_CALL_FLAGS_NONE,
-1,
cancellable,
@@ -1542,7 +1520,6 @@ polkit_authority_authentication_agent_response (PolkitAuthority *authority,
callback,
user_data,
polkit_authority_authentication_agent_response));
- g_variant_unref (identity_value);
}
/**
@@ -1653,18 +1630,14 @@ polkit_authority_enumerate_temporary_authorizations (PolkitAuthority *author
GAsyncReadyCallback callback,
gpointer user_data)
{
- GVariant *subject_value;
-
g_return_if_fail (POLKIT_IS_AUTHORITY (authority));
g_return_if_fail (POLKIT_IS_SUBJECT (subject));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- subject_value = polkit_subject_to_gvariant (subject);
- g_variant_ref_sink (subject_value);
g_dbus_proxy_call (authority->proxy,
"EnumerateTemporaryAuthorizations",
g_variant_new ("(@(sa{sv}))",
- subject_value),
+ polkit_subject_to_gvariant (subject)), /* A floating value */
G_DBUS_CALL_FLAGS_NONE,
-1,
cancellable,
@@ -1673,7 +1646,6 @@ polkit_authority_enumerate_temporary_authorizations (PolkitAuthority *author
callback,
user_data,
polkit_authority_enumerate_temporary_authorizations));
- g_variant_unref (subject_value);
}
/**
@@ -1805,18 +1777,14 @@ polkit_authority_revoke_temporary_authorizations (PolkitAuthority *authority
GAsyncReadyCallback callback,
gpointer user_data)
{
- GVariant *subject_value;
-
g_return_if_fail (POLKIT_IS_AUTHORITY (authority));
g_return_if_fail (POLKIT_IS_SUBJECT (subject));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- subject_value = polkit_subject_to_gvariant (subject);
- g_variant_ref_sink (subject_value);
g_dbus_proxy_call (authority->proxy,
"RevokeTemporaryAuthorizations",
g_variant_new ("(@(sa{sv}))",
- subject_value),
+ polkit_subject_to_gvariant (subject)), /* A floating value */
G_DBUS_CALL_FLAGS_NONE,
-1,
cancellable,
@@ -1825,7 +1793,6 @@ polkit_authority_revoke_temporary_authorizations (PolkitAuthority *authority
callback,
user_data,
polkit_authority_revoke_temporary_authorizations));
- g_variant_unref (subject_value);
}
/**
diff --git a/src/polkit/polkitauthorizationresult.c b/src/polkit/polkitauthorizationresult.c
index dd3d761..95855d4 100644
--- a/src/polkit/polkitauthorizationresult.c
+++ b/src/polkit/polkitauthorizationresult.c
@@ -290,19 +290,15 @@ polkit_authorization_result_new_for_gvariant (GVariant *value)
return ret;
}
+/* Note that this returns a floating value. */
GVariant *
polkit_authorization_result_to_gvariant (PolkitAuthorizationResult *authorization_result)
{
- GVariant *ret;
- GVariant *details_gvariant;
-
- details_gvariant = polkit_details_to_gvariant (polkit_authorization_result_get_details (authorization_result));
- g_variant_ref_sink (details_gvariant);
- ret = g_variant_new ("(bb at a{ss})",
- polkit_authorization_result_get_is_authorized (authorization_result),
- polkit_authorization_result_get_is_challenge (authorization_result),
- details_gvariant);
- g_variant_unref (details_gvariant);
+ PolkitDetails *details;
- return ret;
+ details = polkit_authorization_result_get_details (authorization_result);
+ return g_variant_new ("(bb at a{ss})",
+ polkit_authorization_result_get_is_authorized (authorization_result),
+ polkit_authorization_result_get_is_challenge (authorization_result),
+ polkit_details_to_gvariant (details)); /* A floating value */
}
diff --git a/src/polkit/polkitdetails.c b/src/polkit/polkitdetails.c
index 07a6f63..b16aadc 100644
--- a/src/polkit/polkitdetails.c
+++ b/src/polkit/polkitdetails.c
@@ -195,10 +195,10 @@ polkit_details_get_keys (PolkitDetails *details)
return ret;
}
+/* Note that this returns a floating value. */
GVariant *
polkit_details_to_gvariant (PolkitDetails *details)
{
- GVariant *ret;
GVariantBuilder builder;
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
@@ -212,8 +212,7 @@ polkit_details_to_gvariant (PolkitDetails *details)
while (g_hash_table_iter_next (&hash_iter, (gpointer) &key, (gpointer) &value))
g_variant_builder_add (&builder, "{ss}", key, value);
}
- ret = g_variant_builder_end (&builder);
- return ret;
+ return g_variant_builder_end (&builder);
}
PolkitDetails *
diff --git a/src/polkit/polkitidentity.c b/src/polkit/polkitidentity.c
index 7813c2c..b0b46bf 100644
--- a/src/polkit/polkitidentity.c
+++ b/src/polkit/polkitidentity.c
@@ -198,12 +198,12 @@ polkit_identity_from_string (const gchar *str,
return identity;
}
+/* Note that this returns a floating value. */
GVariant *
polkit_identity_to_gvariant (PolkitIdentity *identity)
{
GVariantBuilder builder;
GVariant *dict;
- GVariant *ret;
const gchar *kind;
kind = "";
@@ -233,8 +233,7 @@ polkit_identity_to_gvariant (PolkitIdentity *identity)
}
dict = g_variant_builder_end (&builder);
- ret = g_variant_new ("(s at a{sv})", kind, dict);
- return ret;
+ return g_variant_new ("(s at a{sv})", kind, dict);
}
static GVariant *
diff --git a/src/polkit/polkitsubject.c b/src/polkit/polkitsubject.c
index df8e1aa..4a36941 100644
--- a/src/polkit/polkitsubject.c
+++ b/src/polkit/polkitsubject.c
@@ -290,12 +290,12 @@ polkit_subject_from_string (const gchar *str,
return subject;
}
+/* Note that this returns a floating value. */
GVariant *
polkit_subject_to_gvariant (PolkitSubject *subject)
{
GVariantBuilder builder;
GVariant *dict;
- GVariant *ret;
const gchar *kind;
kind = "";
@@ -329,8 +329,7 @@ polkit_subject_to_gvariant (PolkitSubject *subject)
}
dict = g_variant_builder_end (&builder);
- ret = g_variant_new ("(s at a{sv})", kind, dict);
- return ret;
+ return g_variant_new ("(s at a{sv})", kind, dict);
}
static GVariant *
diff --git a/src/polkit/polkittemporaryauthorization.c b/src/polkit/polkittemporaryauthorization.c
index b2c6003..ae71259 100644
--- a/src/polkit/polkittemporaryauthorization.c
+++ b/src/polkit/polkittemporaryauthorization.c
@@ -212,22 +212,15 @@ polkit_temporary_authorization_new_for_gvariant (GVariant *value,
return authorization;
}
+/* Note that this returns a floating value. */
GVariant *
polkit_temporary_authorization_to_gvariant (PolkitTemporaryAuthorization *authorization)
{
- GVariant *ret;
- GVariant *subject_gvariant;
-
- subject_gvariant = polkit_subject_to_gvariant (authorization->subject);
- g_variant_ref_sink (subject_gvariant);
- ret = g_variant_new ("(ss@(sa{sv})tt)",
- authorization->id,
- authorization->action_id,
- subject_gvariant,
- authorization->time_obtained,
- authorization->time_expires);
- g_variant_unref (subject_gvariant);
-
- return ret;
+ return g_variant_new ("(ss@(sa{sv})tt)",
+ authorization->id,
+ authorization->action_id,
+ polkit_subject_to_gvariant (authorization->subject), /* A floating value */
+ authorization->time_obtained,
+ authorization->time_expires);
}
diff --git a/src/polkitbackend/polkitbackendauthority.c b/src/polkitbackend/polkitbackendauthority.c
index 64560e1..86dad02 100644
--- a/src/polkitbackend/polkitbackendauthority.c
+++ b/src/polkitbackend/polkitbackendauthority.c
@@ -645,11 +645,8 @@ server_handle_enumerate_actions (Server *server,
for (l = actions; l != NULL; l = l->next)
{
PolkitActionDescription *ad = POLKIT_ACTION_DESCRIPTION (l->data);
- GVariant *value;
- value = polkit_action_description_to_gvariant (ad);
- g_variant_ref_sink (value);
- g_variant_builder_add_value (&builder, value);
- g_variant_unref (value);
+ g_variant_builder_add_value (&builder,
+ polkit_action_description_to_gvariant (ad)); /* A floating value */
}
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(a(ssssssuuua{ss}))", &builder));
@@ -709,11 +706,9 @@ check_auth_cb (GObject *source_object,
}
else
{
- GVariant *value;
- value = polkit_authorization_result_to_gvariant (result);
- g_variant_ref_sink (value);
- g_dbus_method_invocation_return_value (data->invocation, g_variant_new ("(@(bba{ss}))", value));
- g_variant_unref (value);
+ g_dbus_method_invocation_return_value (data->invocation,
+ g_variant_new ("(@(bba{ss}))",
+ polkit_authorization_result_to_gvariant (result))); /* A floating value */
g_object_unref (result);
}
@@ -1158,11 +1153,8 @@ server_handle_enumerate_temporary_authorizations (Server *server
for (l = authorizations; l != NULL; l = l->next)
{
PolkitTemporaryAuthorization *a = POLKIT_TEMPORARY_AUTHORIZATION (l->data);
- GVariant *value;
- value = polkit_temporary_authorization_to_gvariant (a);
- g_variant_ref_sink (value);
- g_variant_builder_add_value (&builder, value);
- g_variant_unref (value);
+ g_variant_builder_add_value (&builder,
+ polkit_temporary_authorization_to_gvariant (a)); /* A floating value */
}
g_list_foreach (authorizations, (GFunc) g_object_unref, NULL);
g_list_free (authorizations);
diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
index ccfd608..bf0ee48 100644
--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
+++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
@@ -2299,7 +2299,6 @@ authentication_agent_initiate_challenge (AuthenticationAgent *agent,
gchar *localized_message;
gchar *localized_icon_name;
PolkitDetails *localized_details;
- GVariant *details_gvariant;
GList *user_identities = NULL;
GVariantBuilder identities_builder;
GVariant *parameters;
@@ -2397,28 +2396,21 @@ authentication_agent_initiate_challenge (AuthenticationAgent *agent,
add_pid (localized_details, caller, "polkit.caller-pid");
add_pid (localized_details, subject, "polkit.subject-pid");
- details_gvariant = polkit_details_to_gvariant (localized_details);
- g_variant_ref_sink (details_gvariant);
-
g_variant_builder_init (&identities_builder, G_VARIANT_TYPE ("a(sa{sv})"));
for (l = user_identities; l != NULL; l = l->next)
{
PolkitIdentity *identity = POLKIT_IDENTITY (l->data);
- GVariant *value;
- value = polkit_identity_to_gvariant (identity);
- g_variant_ref_sink (value);
- g_variant_builder_add_value (&identities_builder, value);
- g_variant_unref (value);
+ g_variant_builder_add_value (&identities_builder,
+ polkit_identity_to_gvariant (identity)); /* A floating value */
}
parameters = g_variant_new ("(sss at a{ss}sa(sa{sv}))",
action_id,
localized_message,
localized_icon_name,
- details_gvariant,
+ polkit_details_to_gvariant (localized_details), /* A floating value */
session->cookie,
&identities_builder);
- g_variant_unref (details_gvariant);
g_dbus_proxy_call (agent->proxy,
"BeginAuthentication",
commit 766a2eab6bfedc9df00b0509bc34ccdee9fe0a76
Author: muzena <trebelnik2 at gmail.com>
Date: Sun Apr 23 21:40:48 2017 +0200
Add hr.po
https://bugs.freedesktop.org/show_bug.cgi?id=100764
diff --git a/po/LINGUAS b/po/LINGUAS
index f6a4926..44ca744 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -3,6 +3,7 @@
cs
da
de
+hr
hu
id
pl
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 0000000..6aa23d0
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,204 @@
+# Croatian translation for polkit.
+# Copyright (C) 2017 polkit's COPYRIGHT HOLDER
+# This file is distributed under the same license as the polkit package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: polkit master\n"
+"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?"
+"product=PolicyKit&keywords=I18N+L10N&component=libpolkit\n"
+"POT-Creation-Date: 2017-04-23 15:27+0000\n"
+"PO-Revision-Date: 2017-04-23 19:27+0200\n"
+"Language-Team: Croatian <hr at li.org>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Last-Translator: gogo <trebelnik2 at gmail.com>\n"
+"X-Generator: Poedit 1.8.7.1\n"
+
+#: ../actions/org.freedesktop.policykit.policy.in.h:1
+msgid "Run a program as another user"
+msgstr "Pokreni programe kao drugi korisnik"
+
+#: ../actions/org.freedesktop.policykit.policy.in.h:2
+msgid "Authentication is required to run a program as another user"
+msgstr "Potrebna je ovjera za pokretanje programa kao drugog korisnika"
+
+#: ../src/examples/org.freedesktop.policykit.examples.pkexec.policy.in.h:1
+msgid "Run the polkit example program Frobnicate"
+msgstr "Pokreni primjer PolicyKit programa Frobnicate"
+
+#: ../src/examples/org.freedesktop.policykit.examples.pkexec.policy.in.h:2
+msgid ""
+"Authentication is required to run the polkit example program Frobnicate "
+"(user=$(user), user.gecos=$(user.gecos), user.display=$(user.display), "
+"program=$(program), command_line=$(command_line))"
+msgstr ""
+"Potrebna je ovjera za pokretanje PolicyKit programa Frobnicate (user="
+"$(korisnik), program=$(program), command_line=$(naredbeni_redak))"
+
+#: ../src/programs/pkaction.c:101
+msgid "Only output information about ACTION"
+msgstr "Samo izlazne informacije o RADNJAMA"
+
+#: ../src/programs/pkaction.c:101
+msgid "ACTION"
+msgstr "RADNJA"
+
+#: ../src/programs/pkaction.c:105
+msgid "Output detailed action information"
+msgstr "Opširnije izlazne informacije radnje"
+
+#: ../src/programs/pkaction.c:109 ../src/programs/pkttyagent.c:62
+msgid "Show version"
+msgstr "Prikaži inačicu"
+
+#: ../src/programs/pkaction.c:134
+msgid "[--action-id ACTION]"
+msgstr "[--action-id RADNJA]"
+
+#: ../src/programs/pkaction.c:135 ../src/programs/pkttyagent.c:85
+#, c-format
+msgid ""
+"Report bugs to: %s\n"
+"%s home page: <%s>"
+msgstr ""
+"Prijavite greške na: %s\n"
+"%s početna stranica: <%s>"
+
+#: ../src/programs/pkaction.c:149 ../src/programs/pkcheck.c:495
+#: ../src/programs/pkttyagent.c:99
+#, c-format
+msgid "%s: Unexpected argument `%s'\n"
+msgstr "%s: Neočekivani argument '%s'\n"
+
+#: ../src/programs/pkcheck.c:36
+#, c-format
+msgid ""
+"Usage:\n"
+" pkcheck [OPTION...]\n"
+"\n"
+"Help Options:\n"
+" -h, --help Show help options\n"
+"\n"
+"Application Options:\n"
+" -a, --action-id=ACTION Check authorization to perform ACTION\n"
+" -u, --allow-user-interaction Interact with the user if necessary\n"
+" -d, --details=KEY VALUE Add (KEY, VALUE) to information about "
+"the action\n"
+" --enable-internal-agent Use an internal authentication agent if "
+"necessary\n"
+" --list-temp List temporary authorizations for "
+"current session\n"
+" -p, --process=PID[,START_TIME,UID] Check authorization of specified "
+"process\n"
+" --revoke-temp Revoke all temporary authorizations for "
+"current session\n"
+" -s, --system-bus-name=BUS_NAME Check authorization of owner of "
+"BUS_NAME\n"
+" --version Show version\n"
+"\n"
+"Report bugs to: %s\n"
+"%s home page: <%s>\n"
+msgstr ""
+"Upotreba:\n"
+" pkcheck [MOGUĆNOST...]\n"
+"\n"
+"Mogućnosti pomoći:\n"
+" -h, --help Prikaži mogućnosti pomoći\n"
+"\n"
+"Mogućnosti aplikacije:\n"
+" -a, --action-id=RADNJA Provjeri ovjeru za pokretanje RADNJE\n"
+" -u, --allow-user-interaction Djeluj s korisnikom ako je potrebno\n"
+" -d, --details=KLJUČ VRIJEDNOST Dodaj (KLJUČ, VRIJEDNOST) u "
+"informaciju o radnji\n"
+" --enable-internal-agent Koristi unutrašnjeg agenta ovjere ako "
+"je potrebno\n"
+" --list-temp Prikaži privremena ovlaštenja za "
+"trenutnu sesiju\n"
+" -p, --process=PID[,POČETNO_VRIJEME,UID] Provjeri ovlaštenja za određeni "
+"proces\n"
+" --revoke-temp Opozovi sva privremena ovlaštenja za "
+"trenutnu sesiju\n"
+" -s, --system-bus-name=BUS_NAZIV Provjeri ovlaštenja vlasnika od "
+"BUS_NAZIVA\n"
+" --version Prikaži inačicu\n"
+"\n"
+"Prijavi greške na: %s\n"
+"%s početna stranica: <%s>\n"
+
+#: ../src/programs/pkcheck.c:395 ../src/programs/pkcheck.c:428
+#: ../src/programs/pkcheck.c:440
+#, c-format
+msgid "%s: Argument expected after `%s'\n"
+msgstr "%s: Očekivani argument nakon `%s'\n"
+
+#: ../src/programs/pkcheck.c:418
+#, c-format
+msgid "%s: Invalid --process value `%s'\n"
+msgstr "%s: Neispravna --process vrijednost `%s'\n"
+
+#: ../src/programs/pkcheck.c:455 ../src/programs/pkcheck.c:464
+#, c-format
+msgid "%s: Two arguments expected after `--detail'\n"
+msgstr "%s: Dva argumenta su očekivana nakon `--detail'\n"
+
+#: ../src/programs/pkcheck.c:525
+#, c-format
+msgid "%s: Subject not specified\n"
+msgstr "%s: Subjekt nije određen\n"
+
+#. Translators: message shown when trying to run a program as root. Do not
+#. * translate the $(program) fragment - it will be expanded to the path
+#. * of the program e.g. /bin/bash.
+#.
+#: ../src/programs/pkexec.c:797
+msgid "Authentication is needed to run `$(program)' as the super user"
+msgstr "Potrebna je ovjera za pokretanje `$(program)' kao super korisnika"
+
+#. Translators: message shown when trying to run a program as another user.
+#. * Do not translate the $(program) or $(user) fragments - the former will
+#. * be expanded to the path of the program e.g. "/bin/bash" and the latter
+#. * to the user e.g. "John Doe (johndoe)" or "johndoe".
+#.
+#: ../src/programs/pkexec.c:807
+msgid "Authentication is needed to run `$(program)' as user $(user.display)"
+msgstr ""
+"Potrebna je ovjera za pokretanje `$(program)' kao korisnika $(user.display)"
+
+#: ../src/programs/pkttyagent.c:45
+msgid "Don't replace existing agent if any"
+msgstr "Ne zamjenjuj postojećeg agenta ako postoji"
+
+#: ../src/programs/pkttyagent.c:49
+msgid "Close FD when the agent is registered"
+msgstr "Zatvori FD kada je agent registriran"
+
+#: ../src/programs/pkttyagent.c:49
+msgid "FD"
+msgstr "FD"
+
+#: ../src/programs/pkttyagent.c:53
+msgid "Register the agent for the specified process"
+msgstr "Registriraj agenta za određeni proces"
+
+#: ../src/programs/pkttyagent.c:54
+msgid "PID[,START_TIME]"
+msgstr "PID[,POČETNO_VRIJEME]"
+
+#: ../src/programs/pkttyagent.c:58
+msgid "Register the agent owner of BUS_NAME"
+msgstr "Registriraj vlasnika agenta BUS_NAZIVA"
+
+#: ../src/programs/pkttyagent.c:58
+msgid "BUS_NAME"
+msgstr "BUS_NAZIV"
+
+#: ../src/programs/pkttyagent.c:131
+#, c-format
+msgid "%s: Invalid process specifier `%s'\n"
+msgstr "%s: Neispravan razvrstač procesa `%s'\n"
commit df6488c0a5b2a6c7a2d4f6a55008263635c5571b
Author: Rui Matos <tiagomatos at gmail.com>
Date: Thu Mar 2 14:50:31 2017 +0100
polkitpermission: Fix a memory leak on authority changes
Signed-off-by: Rui Matos <tiagomatos at gmail.com>
https://bugs.freedesktop.org/show_bug.cgi?id=99741
diff --git a/src/polkit/polkitpermission.c b/src/polkit/polkitpermission.c
index f8a666e..f264094 100644
--- a/src/polkit/polkitpermission.c
+++ b/src/polkit/polkitpermission.c
@@ -454,6 +454,7 @@ changed_check_cb (GObject *source_object,
if (result != NULL)
{
process_result (permission, result);
+ g_object_unref (result);
}
else
{
commit 291992000dbde8cbd1f9e99b2a1769f12906fa19
Author: Miloslav Trmač <mitr at redhat.com>
Date: Mon Feb 13 16:58:42 2017 +0100
Add Indonesian translation by Andika Triwidada
https://bugs.freedesktop.org/show_bug.cgi?id=99790
diff --git a/po/LINGUAS b/po/LINGUAS
index fef68d8..f6a4926 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -4,6 +4,7 @@ cs
da
de
hu
+id
pl
pt_BR
sk
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..4029215
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,205 @@
+# Indonesian translation for polkit.
+# Copyright (C) 2016 polkit's COPYRIGHT HOLDER
+# This file is distributed under the same license as the polkit package.
+# Lorenz Adam Damara <lorenzadam at resolution-consulting.co.id>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: polkit master\n"
+"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?"
+"product=PolicyKit&keywords=I18N+L10N&component=libpolkit\n"
+"POT-Creation-Date: 2016-07-10 02:28+0000\n"
+"PO-Revision-Date: 2016-07-10 17:27+0700\n"
+"Language-Team: Indonesian <gnome-l10n-id at googlegroups.com>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Last-Translator: Lorenz Adam Damara <lorenzrenz at gmail.com>\n"
+"X-Generator: Poedit 1.8.7.1\n"
+
+#: ../actions/org.freedesktop.policykit.policy.in.h:1
+msgid "Run a program as another user"
+msgstr "Jalankan program sebagai pengguna lain"
+
+#: ../actions/org.freedesktop.policykit.policy.in.h:2
+msgid "Authentication is required to run a program as another user"
+msgstr "Otentikasi diperlukan untuk menjalankan program sebagai pengguna lain"
+
+#: ../src/examples/org.freedesktop.policykit.examples.pkexec.policy.in.h:1
+msgid "Run the polkit example program Frobnicate"
+msgstr "Jalankan contoh program polkit Frobnicate"
+
+#: ../src/examples/org.freedesktop.policykit.examples.pkexec.policy.in.h:2
+msgid ""
+"Authentication is required to run the polkit example program Frobnicate "
+"(user=$(user), user.gecos=$(user.gecos), user.display=$(user.display), "
+"program=$(program), command_line=$(command_line))"
+msgstr ""
+"Otentikasi dibutuhkan untuk menjalankan contoh program Frobnicate (user="
+"$(user), user.gecos=$(user.gecos), user.display=$(user.display), program="
+"$(program), command_line=$(command_line))"
+
+#: ../src/programs/pkaction.c:101
+msgid "Only output information about ACTION"
+msgstr "Hanya informasi keluaran tentang AKSI"
+
+#: ../src/programs/pkaction.c:101
+msgid "ACTION"
+msgstr "ACTION"
+
+#: ../src/programs/pkaction.c:105
+msgid "Output detailed action information"
+msgstr "Informasi detil aksi keluaran"
+
+#: ../src/programs/pkaction.c:109 ../src/programs/pkttyagent.c:62
+msgid "Show version"
+msgstr "Tampilkan versi"
+
+#: ../src/programs/pkaction.c:134
+msgid "[--action-id ACTION]"
+msgstr "[--action-id ACTION]"
+
+#: ../src/programs/pkaction.c:135 ../src/programs/pkttyagent.c:85
+#, c-format
+msgid ""
+"Report bugs to: %s\n"
+"%s home page: <%s>"
+msgstr ""
+"Laporkan kutu ke: %s\n"
+"halaman beranda %s: <%s>"
+
+#: ../src/programs/pkaction.c:149 ../src/programs/pkcheck.c:495
+#: ../src/programs/pkttyagent.c:99
+#, c-format
+msgid "%s: Unexpected argument `%s'\n"
+msgstr "%s: argumen yang tak terduga `%s'\n"
+
+#: ../src/programs/pkcheck.c:36
+#, c-format
+msgid ""
+"Usage:\n"
+" pkcheck [OPTION...]\n"
+"\n"
+"Help Options:\n"
+" -h, --help Show help options\n"
+"\n"
+"Application Options:\n"
+" -a, --action-id=ACTION Check authorization to perform ACTION\n"
+" -u, --allow-user-interaction Interact with the user if necessary\n"
+" -d, --details=KEY VALUE Add (KEY, VALUE) to information about "
+"the action\n"
+" --enable-internal-agent Use an internal authentication agent if "
+"necessary\n"
+" --list-temp List temporary authorizations for "
+"current session\n"
+" -p, --process=PID[,START_TIME,UID] Check authorization of specified "
+"process\n"
+" --revoke-temp Revoke all temporary authorizations for "
+"current session\n"
+" -s, --system-bus-name=BUS_NAME Check authorization of owner of "
+"BUS_NAME\n"
+" --version Show version\n"
+"\n"
+"Report bugs to: %s\n"
+"%s home page: <%s>\n"
+msgstr ""
+"Penggunaan:\n"
+" pkcheck [PILIHAN...]\n"
+"\n"
+"Bantuan Pilihan:\n"
+" -h, --help Show help options\n"
+"Pilihan Aplikasi:\n"
+"-a, --action-id=ACTION Periksa otorisasi untuk melakukan ACTION\n"
+" -u, --allow-user-interaction Berkomunikasi dengan pengguna jika "
+"dibutuhkan\n"
+" -d, --details=KEY VALUE Tambahkan (KEY, VALUE) untuk informasi "
+"mengenai aksi\n"
+" --enable-internal-agent Gunakan otentikasi agen internal jika "
+"dibutuhkan\n"
+" --list-temp Daftar otorisasi sementara untuk sesi "
+"ini\n"
+" -p, --process=PID[,START_TIME,UID] Periksa otorisasi untuk proses yang "
+"spesifik\n"
+" --revoke-temp Cabut semua otorisasi sementara untuk "
+"sesi saat ini\n"
+" -s, --system-bus-name=BUS_NAME Periksa otorisasi bagi pemilik "
+"BUS_NAME\n"
+" --version Tampilkan versi\n"
+"\n"
+"Laporkan kutu ke: %s\n"
+"halaman beranda %s: <%s>\n"
+
+#: ../src/programs/pkcheck.c:395 ../src/programs/pkcheck.c:428
+#: ../src/programs/pkcheck.c:440
+#, c-format
+msgid "%s: Argument expected after `%s'\n"
+msgstr "%s: Argumen diharapkan setelah `%s'\n"
+
+#: ../src/programs/pkcheck.c:418
+#, c-format
+msgid "%s: Invalid --process value `%s'\n"
+msgstr "%s: kesalahan nilai --process `%s'\n"
+
+#: ../src/programs/pkcheck.c:455 ../src/programs/pkcheck.c:464
+#, c-format
+msgid "%s: Two arguments expected after `--detail'\n"
+msgstr "%s: Dua argumen diharapkan setelah `--detail'\n"
+
+#: ../src/programs/pkcheck.c:525
+#, c-format
+msgid "%s: Subject not specified\n"
+msgstr "%s: Subyek tidak dispesifikasikan\n"
+
+#. Translators: message shown when trying to run a program as root. Do not
+#. * translate the $(program) fragment - it will be expanded to the path
+#. * of the program e.g. /bin/bash.
+#.
+#: ../src/programs/pkexec.c:797
+msgid "Authentication is needed to run `$(program)' as the super user"
+msgstr ""
+"Otentikasi dibutuhkan untuk menjalankan `$(program)' sebagai super user"
+
+#. Translators: message shown when trying to run a program as another user.
+#. * Do not translate the $(program) or $(user) fragments - the former will
+#. * be expanded to the path of the program e.g. "/bin/bash" and the latter
+#. * to the user e.g. "John Doe (johndoe)" or "johndoe".
+#.
+#: ../src/programs/pkexec.c:807
+msgid "Authentication is needed to run `$(program)' as user $(user.display)"
+msgstr ""
+"Otentikasi dibutuhkan untuk menjalankan `$(program)' sebagai pengguna $(user."
+"display)"
+
+#: ../src/programs/pkttyagent.c:45
+msgid "Don't replace existing agent if any"
+msgstr "Jangan ganti agen yang sudah ada"
+
+#: ../src/programs/pkttyagent.c:49
+msgid "Close FD when the agent is registered"
+msgstr "Tutup FD ketika agen sudah terdaftar"
+
+#: ../src/programs/pkttyagent.c:49
+msgid "FD"
+msgstr "FD"
+
+#: ../src/programs/pkttyagent.c:53
+msgid "Register the agent for the specified process"
+msgstr "Daftarkan agen untuk proses yang spesifik"
+
+#: ../src/programs/pkttyagent.c:54
+msgid "PID[,START_TIME]"
+msgstr "PID,[,START_TIME]"
+
+#: ../src/programs/pkttyagent.c:58
+msgid "Register the agent owner of BUS_NAME"
+msgstr "Daftarkan agen pemilik BUS_NAME"
+
+#: ../src/programs/pkttyagent.c:58
+msgid "BUS_NAME"
+msgstr "BUS_NAME"
+
+#: ../src/programs/pkttyagent.c:131
+#, c-format
+msgid "%s: Invalid process specifier `%s'\n"
+msgstr "%s: Kesalahan spesifikasi proses `%s'\n"
More information about the hal-commit
mailing list