diff mbox series

[ubus] ubusd_acl: add support for wildcard in methods

Message ID 20201023005827.16234-1-ansuelsmth@gmail.com
State Superseded
Headers show
Series [ubus] ubusd_acl: add support for wildcard in methods | expand

Commit Message

Ansuel Smith Oct. 23, 2020, 12:58 a.m. UTC
Add support for wildcard in methods to permiss access to all methods
defined by the object. This can be usefull for process that run as
non-root user and needs to access ubus method.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
---
 ...-add-support-for-wildcard-in-methods.patch | 37 +++++++++++++++++++
 ubusd_acl.c                                   |  8 +++-
 2 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 0001-ubusd_acl-add-support-for-wildcard-in-methods.patch

Comments

Ansuel Smith Oct. 23, 2020, 1 a.m. UTC | #1
Ignore... pls I will resend

Il giorno ven 23 ott 2020 alle ore 02:58 Ansuel Smith
<ansuelsmth@gmail.com> ha scritto:
>
> Add support for wildcard in methods to permiss access to all methods
> defined by the object. This can be usefull for process that run as
> non-root user and needs to access ubus method.
>
> Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
> ---
>  ...-add-support-for-wildcard-in-methods.patch | 37 +++++++++++++++++++
>  ubusd_acl.c                                   |  8 +++-
>  2 files changed, 43 insertions(+), 2 deletions(-)
>  create mode 100644 0001-ubusd_acl-add-support-for-wildcard-in-methods.patch
>
> diff --git a/0001-ubusd_acl-add-support-for-wildcard-in-methods.patch b/0001-ubusd_acl-add-support-for-wildcard-in-methods.patch
> new file mode 100644
> index 0000000..48dff5d
> --- /dev/null
> +++ b/0001-ubusd_acl-add-support-for-wildcard-in-methods.patch
> @@ -0,0 +1,37 @@
> +From a1a5e03e652ac22851c58c68639d7d79ce5fc9ce Mon Sep 17 00:00:00 2001
> +From: Ansuel Smith <ansuelsmth@gmail.com>
> +Date: Fri, 23 Oct 2020 02:50:12 +0200
> +Subject: [PATCH ubus] ubusd_acl: add support for wildcard in methods
> +
> +Add support for wildcard in methods to permiss access to all methods
> +defined by the object. This can be usefull for process that run as
> +non-root user and needs to access ubus method.
> +
> +Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
> +---
> + ubusd_acl.c | 5 ++++-
> + 1 file changed, 4 insertions(+), 1 deletion(-)
> +
> +diff --git a/ubusd_acl.c b/ubusd_acl.c
> +index e426a4a..734b3d0 100644
> +--- a/ubusd_acl.c
> ++++ b/ubusd_acl.c
> +@@ -147,11 +147,14 @@ ubusd_acl_check(struct ubus_client *cl, const char *obj,
> +               case UBUS_ACL_ACCESS:
> +                       if (acl->methods) {
> +                               struct blob_attr *cur;
> ++                              char *cur_method;
> +                               size_t rem;
> +
> +                               blobmsg_for_each_attr(cur, acl->methods, rem)
> +                                       if (blobmsg_type(cur) == BLOBMSG_TYPE_STRING)
> +-                                              if (!strcmp(method, blobmsg_get_string(cur)))
> ++                                              cur_method = blobmsg_get_string(cur);
> ++
> ++                                              if (!strcmp(method, cur_method) || !strcmp("*", cur_method))
> +                                                       return 0;
> +                       }
> +                       break;
> +--
> +2.27.0
> +
> diff --git a/ubusd_acl.c b/ubusd_acl.c
> index e426a4a..e050e2c 100644
> --- a/ubusd_acl.c
> +++ b/ubusd_acl.c
> @@ -147,12 +147,16 @@ ubusd_acl_check(struct ubus_client *cl, const char *obj,
>                 case UBUS_ACL_ACCESS:
>                         if (acl->methods) {
>                                 struct blob_attr *cur;
> +                               char *cur_method;
>                                 size_t rem;
>
>                                 blobmsg_for_each_attr(cur, acl->methods, rem)
> -                                       if (blobmsg_type(cur) == BLOBMSG_TYPE_STRING)
> -                                               if (!strcmp(method, blobmsg_get_string(cur)))
> +                                       if (blobmsg_type(cur) == BLOBMSG_TYPE_STRING) {
> +                                               cur_method = blobmsg_get_string(cur);
> +
> +                                               if (!strcmp(method, cur_method) || !strcmp("*", cur_method))
>                                                         return 0;
> +                                       }
>                         }
>                         break;
>                 }
> --
> 2.27.0
>
diff mbox series

Patch

diff --git a/0001-ubusd_acl-add-support-for-wildcard-in-methods.patch b/0001-ubusd_acl-add-support-for-wildcard-in-methods.patch
new file mode 100644
index 0000000..48dff5d
--- /dev/null
+++ b/0001-ubusd_acl-add-support-for-wildcard-in-methods.patch
@@ -0,0 +1,37 @@ 
+From a1a5e03e652ac22851c58c68639d7d79ce5fc9ce Mon Sep 17 00:00:00 2001
+From: Ansuel Smith <ansuelsmth@gmail.com>
+Date: Fri, 23 Oct 2020 02:50:12 +0200
+Subject: [PATCH ubus] ubusd_acl: add support for wildcard in methods
+
+Add support for wildcard in methods to permiss access to all methods
+defined by the object. This can be usefull for process that run as
+non-root user and needs to access ubus method.
+
+Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
+---
+ ubusd_acl.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/ubusd_acl.c b/ubusd_acl.c
+index e426a4a..734b3d0 100644
+--- a/ubusd_acl.c
++++ b/ubusd_acl.c
+@@ -147,11 +147,14 @@ ubusd_acl_check(struct ubus_client *cl, const char *obj,
+ 		case UBUS_ACL_ACCESS:
+ 			if (acl->methods) {
+ 				struct blob_attr *cur;
++				char *cur_method;
+ 				size_t rem;
+ 
+ 				blobmsg_for_each_attr(cur, acl->methods, rem)
+ 					if (blobmsg_type(cur) == BLOBMSG_TYPE_STRING)
+-						if (!strcmp(method, blobmsg_get_string(cur)))
++						cur_method = blobmsg_get_string(cur);
++
++						if (!strcmp(method, cur_method) || !strcmp("*", cur_method))
+ 							return 0;
+ 			}
+ 			break;
+-- 
+2.27.0
+
diff --git a/ubusd_acl.c b/ubusd_acl.c
index e426a4a..e050e2c 100644
--- a/ubusd_acl.c
+++ b/ubusd_acl.c
@@ -147,12 +147,16 @@  ubusd_acl_check(struct ubus_client *cl, const char *obj,
 		case UBUS_ACL_ACCESS:
 			if (acl->methods) {
 				struct blob_attr *cur;
+				char *cur_method;
 				size_t rem;
 
 				blobmsg_for_each_attr(cur, acl->methods, rem)
-					if (blobmsg_type(cur) == BLOBMSG_TYPE_STRING)
-						if (!strcmp(method, blobmsg_get_string(cur)))
+					if (blobmsg_type(cur) == BLOBMSG_TYPE_STRING) {
+						cur_method = blobmsg_get_string(cur);
+
+						if (!strcmp(method, cur_method) || !strcmp("*", cur_method))
 							return 0;
+					}
 			}
 			break;
 		}