core: use DBusManager caller info/auth functions

Only the DBusManager can get the sender for private connections.
This commit is contained in:
Dan Williams 2012-12-15 10:48:11 -06:00
parent 0621de7d48
commit a442d1ac42
4 changed files with 49 additions and 51 deletions

View file

@ -872,7 +872,6 @@ static void
pending_activation_check_authorized (PendingActivation *pending,
NMDBusManager *dbus_mgr)
{
char *error_desc = NULL;
gulong sender_uid = G_MAXULONG;
GError *error;
const char *wifi_permission = NULL;
@ -882,16 +881,15 @@ pending_activation_check_authorized (PendingActivation *pending,
g_return_if_fail (pending != NULL);
g_return_if_fail (dbus_mgr != NULL);
if (!nm_auth_get_caller_uid (pending->context,
dbus_mgr,
&sender_uid,
&error_desc)) {
if (!nm_dbus_manager_get_caller_info (dbus_mgr,
pending->context,
NULL,
&sender_uid)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
"Unable to determine UID of request.");
pending->callback (pending, error);
g_error_free (error);
g_free (error_desc);
return;
}
@ -1768,17 +1766,18 @@ device_auth_request_cb (NMDevice *device,
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
gulong sender_uid = G_MAXULONG;
char *error_desc = NULL;
NMAuthChain *chain;
/* Get the caller's UID for the root check */
if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &sender_uid, &error_desc)) {
if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr,
context,
NULL,
&sender_uid)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
"Unable to determine request UID.");
callback (device, context, error, user_data);
g_error_free (error);
g_free (error_desc);
return;
}
@ -2966,7 +2965,7 @@ pending_activate (NMManager *self, PendingActivation *pending)
NMSettingsConnection *connection;
NMActiveConnection *ac = NULL;
GError *error = NULL;
char *sender;
char *sender = NULL;
/* Ok, we're authorized */
@ -2978,7 +2977,16 @@ pending_activate (NMManager *self, PendingActivation *pending)
goto out;
}
sender = dbus_g_method_get_sender (pending->context);
if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr,
pending->context,
&sender,
NULL)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
"D-Bus sendder could not be determined.");
goto out;
}
g_assert (sender);
ac = nm_manager_activate_connection (self,
NM_CONNECTION (connection),
@ -3201,7 +3209,6 @@ impl_manager_deactivate_connection (NMManager *self,
GSList *iter;
NMAuthChain *chain;
gulong sender_uid = G_MAXULONG;
char *error_desc = NULL;
/* Find the connection by its object path */
for (iter = priv->active_connections; iter; iter = g_slist_next (iter)) {
@ -3225,16 +3232,15 @@ impl_manager_deactivate_connection (NMManager *self,
/* Need to check the caller's permissions and stuff before we can
* deactivate the connection.
*/
if (!nm_auth_get_caller_uid (context,
priv->dbus_mgr,
&sender_uid,
&error_desc)) {
if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr,
context,
NULL,
&sender_uid)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
"Unable to determine request UID.");
dbus_g_method_return_error (context, error);
g_error_free (error);
g_free (error_desc);
return;
}
@ -3520,7 +3526,6 @@ impl_manager_enable (NMManager *self,
NMAuthChain *chain;
GError *error = NULL;
gulong sender_uid = G_MAXULONG;
char *error_desc = NULL;
g_return_if_fail (NM_IS_MANAGER (self));
@ -3535,13 +3540,15 @@ impl_manager_enable (NMManager *self,
return;
}
if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &sender_uid, &error_desc)) {
if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr,
context,
NULL,
&sender_uid)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
"Unable to determine request UID.");
dbus_g_method_return_error (context, error);
g_error_free (error);
g_free (error_desc);
return;
}

View file

@ -246,20 +246,19 @@ impl_agent_manager_register (NMAgentManager *self,
DBusGMethodInvocation *context)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
char *error_desc = NULL, *sender = NULL;
char *sender = NULL;
gulong sender_uid = G_MAXULONG;
GError *error = NULL, *local = NULL;
NMSecretAgent *agent;
NMAuthChain *chain;
if (!nm_auth_get_caller_uid (context,
priv->dbus_mgr,
&sender_uid,
&error_desc)) {
if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr,
context,
&sender,
&sender_uid)) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
error_desc);
g_free (error_desc);
"Unable to determine request sender and UID.");
goto done;
}
@ -273,14 +272,6 @@ impl_agent_manager_register (NMAgentManager *self,
goto done;
}
sender = dbus_g_method_get_sender (context);
if (!sender) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
"Failed to get D-Bus request sender");
goto done;
}
/* Validate the identifier */
if (!validate_identifier (identifier, &error))
goto done;
@ -317,14 +308,17 @@ static void
impl_agent_manager_unregister (NMAgentManager *self,
DBusGMethodInvocation *context)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
char *sender = NULL;
sender = dbus_g_method_get_sender (context);
if (!sender) {
if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr,
context,
&sender,
NULL)) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
"Failed to get D-Bus request sender");
"Unable to determine request sender.");
goto done;
}

View file

@ -937,12 +937,11 @@ check_user_in_acl (NMConnection *connection,
g_return_val_if_fail (session_monitor != NULL, FALSE);
/* Get the caller's UID */
if (!nm_auth_get_caller_uid (context, dbus_mgr, &sender_uid, &error_desc)) {
if (!nm_dbus_manager_get_caller_info (dbus_mgr, context, NULL, &sender_uid)) {
g_set_error_literal (error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
error_desc);
g_free (error_desc);
"Unable to determine UID of request.");
return FALSE;
}

View file

@ -1135,12 +1135,10 @@ nm_settings_add_connection (NMSettings *self,
}
/* Get the caller's UID */
if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &caller_uid, &error_desc)) {
error = g_error_new (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_NOT_PRIVILEGED,
"Unable to determine UID of request: %s.",
error_desc ? error_desc : "(unknown)");
g_free (error_desc);
if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr, context, NULL, &caller_uid)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
"Unable to determine request UID.");
callback (self, NULL, error, context, user_data);
g_error_free (error);
return;