mirror of
https://github.com/sailfishos/ofono
synced 2025-12-08 02:32:37 +08:00
[ims] D-Bus access control for org.ofono.IpMultimediaSystem. JB#57408
This commit is contained in:
@@ -41,6 +41,8 @@ enum ofono_dbus_access_intf {
|
|||||||
OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS, /* org.ofono.RadioSettings */
|
OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS, /* org.ofono.RadioSettings */
|
||||||
OFONO_DBUS_ACCESS_INTF_STK, /* org.ofono.SimToolkit */
|
OFONO_DBUS_ACCESS_INTF_STK, /* org.ofono.SimToolkit */
|
||||||
OFONO_DBUS_ACCESS_INTF_OEMRAW, /* org.ofono.OemRaw */
|
OFONO_DBUS_ACCESS_INTF_OEMRAW, /* org.ofono.OemRaw */
|
||||||
|
/* Since 1.29+git3 */
|
||||||
|
OFONO_DBUS_ACCESS_INTF_IMS, /* org.ofono.IpMultimediaSystem */
|
||||||
OFONO_DBUS_ACCESS_INTF_COUNT
|
OFONO_DBUS_ACCESS_INTF_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -132,6 +134,15 @@ enum ofono_dbus_access_oemraw_method {
|
|||||||
OFONO_DBUS_ACCESS_OEMRAW_METHOD_COUNT
|
OFONO_DBUS_ACCESS_OEMRAW_METHOD_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* OFONO_DBUS_ACCESS_INTF_IMS */
|
||||||
|
enum ofono_dbus_access_ims_method {
|
||||||
|
/* Since 1.29+git3 */
|
||||||
|
OFONO_DBUS_ACCESS_IMS_SET_PROPERTY,
|
||||||
|
OFONO_DBUS_ACCESS_IMS_REGISTER,
|
||||||
|
OFONO_DBUS_ACCESS_IMS_UNREGISTER,
|
||||||
|
OFONO_DBUS_ACCESS_IMS_METHOD_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
#define OFONO_DBUS_ACCESS_PRIORITY_LOW (-100)
|
#define OFONO_DBUS_ACCESS_PRIORITY_LOW (-100)
|
||||||
#define OFONO_DBUS_ACCESS_PRIORITY_DEFAULT (0)
|
#define OFONO_DBUS_ACCESS_PRIORITY_DEFAULT (0)
|
||||||
#define OFONO_DBUS_ACCESS_PRIORITY_HIGH (100)
|
#define OFONO_DBUS_ACCESS_PRIORITY_HIGH (100)
|
||||||
@@ -159,7 +170,7 @@ const char *ofono_dbus_access_intf_name(enum ofono_dbus_access_intf intf);
|
|||||||
const char *ofono_dbus_access_method_name(enum ofono_dbus_access_intf intf,
|
const char *ofono_dbus_access_method_name(enum ofono_dbus_access_intf intf,
|
||||||
int method);
|
int method);
|
||||||
|
|
||||||
/* Since mer/1.24+git2 */
|
/* Since 1.24+git2 */
|
||||||
ofono_bool_t ofono_dbus_access_method_allowed(const char *sender,
|
ofono_bool_t ofono_dbus_access_method_allowed(const char *sender,
|
||||||
enum ofono_dbus_access_intf iface, int method, const char *arg);
|
enum ofono_dbus_access_intf iface, int method, const char *arg);
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ const char *ofono_dbus_access_intf_name(enum ofono_dbus_access_intf intf)
|
|||||||
return OFONO_STK_INTERFACE;
|
return OFONO_STK_INTERFACE;
|
||||||
case OFONO_DBUS_ACCESS_INTF_OEMRAW:
|
case OFONO_DBUS_ACCESS_INTF_OEMRAW:
|
||||||
return "org.ofono.OemRaw";
|
return "org.ofono.OemRaw";
|
||||||
|
case OFONO_DBUS_ACCESS_INTF_IMS:
|
||||||
|
return OFONO_IMS_INTERFACE;
|
||||||
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -188,6 +190,18 @@ const char *ofono_dbus_access_method_name(enum ofono_dbus_access_intf intf,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OFONO_DBUS_ACCESS_INTF_IMS:
|
||||||
|
switch ((enum ofono_dbus_access_ims_method)method) {
|
||||||
|
case OFONO_DBUS_ACCESS_IMS_SET_PROPERTY:
|
||||||
|
return "SetProperty";
|
||||||
|
case OFONO_DBUS_ACCESS_IMS_REGISTER:
|
||||||
|
return "Register";
|
||||||
|
case OFONO_DBUS_ACCESS_IMS_UNREGISTER:
|
||||||
|
return "Unregister";
|
||||||
|
case OFONO_DBUS_ACCESS_IMS_METHOD_COUNT:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,13 @@ struct ofono_ims {
|
|||||||
|
|
||||||
static GSList *g_drivers = NULL;
|
static GSList *g_drivers = NULL;
|
||||||
|
|
||||||
|
static inline gboolean ims_dbus_access_allowed(DBusMessage *msg,
|
||||||
|
enum ofono_dbus_access_ims_method method)
|
||||||
|
{
|
||||||
|
return ofono_dbus_access_method_allowed(dbus_message_get_sender(msg),
|
||||||
|
OFONO_DBUS_ACCESS_INTF_IMS, method, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static DBusMessage *ims_get_properties(DBusConnection *conn,
|
static DBusMessage *ims_get_properties(DBusConnection *conn,
|
||||||
DBusMessage *msg, void *data)
|
DBusMessage *msg, void *data)
|
||||||
{
|
{
|
||||||
@@ -209,6 +216,9 @@ static DBusMessage *ofono_ims_send_register(DBusConnection *conn,
|
|||||||
{
|
{
|
||||||
struct ofono_ims *ims = data;
|
struct ofono_ims *ims = data;
|
||||||
|
|
||||||
|
if (!ims_dbus_access_allowed(msg, OFONO_DBUS_ACCESS_IMS_REGISTER))
|
||||||
|
return __ofono_error_access_denied(msg);
|
||||||
|
|
||||||
if (ims->pending)
|
if (ims->pending)
|
||||||
return __ofono_error_busy(msg);
|
return __ofono_error_busy(msg);
|
||||||
|
|
||||||
@@ -227,6 +237,9 @@ static DBusMessage *ofono_ims_unregister(DBusConnection *conn,
|
|||||||
{
|
{
|
||||||
struct ofono_ims *ims = data;
|
struct ofono_ims *ims = data;
|
||||||
|
|
||||||
|
if (!ims_dbus_access_allowed(msg, OFONO_DBUS_ACCESS_IMS_UNREGISTER))
|
||||||
|
return __ofono_error_access_denied(msg);
|
||||||
|
|
||||||
if (ims->pending)
|
if (ims->pending)
|
||||||
return __ofono_error_busy(msg);
|
return __ofono_error_busy(msg);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2019-2021 Jolla Ltd.
|
* Copyright (C) 2019-2022 Jolla Ltd.
|
||||||
* Copyright (C) 2020 Open Mobile Platform LLC.
|
* Copyright (C) 2020 Open Mobile Platform LLC.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@@ -122,6 +122,9 @@ static const struct test_method_name_data method_name_tests[] = {
|
|||||||
},{
|
},{
|
||||||
OFONO_DBUS_ACCESS_INTF_OEMRAW,
|
OFONO_DBUS_ACCESS_INTF_OEMRAW,
|
||||||
OFONO_DBUS_ACCESS_OEMRAW_METHOD_COUNT
|
OFONO_DBUS_ACCESS_OEMRAW_METHOD_COUNT
|
||||||
|
},{
|
||||||
|
OFONO_DBUS_ACCESS_INTF_IMS,
|
||||||
|
OFONO_DBUS_ACCESS_IMS_METHOD_COUNT
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user