@ -52,6 +52,7 @@ struct ubusd_acl_obj {
bool subscribe ;
bool publish ;
bool listen ;
bool send ;
} ;
struct ubusd_acl_file {
@ -138,6 +139,11 @@ ubusd_acl_check(struct ubus_client *cl, const char *obj,
return 0 ;
break ;
case UBUS_ACL_SEND :
if ( acl - > send )
return 0 ;
break ;
case UBUS_ACL_ACCESS :
if ( acl - > methods ) {
struct blob_attr * cur ;
@ -292,6 +298,13 @@ static void ubusd_acl_add_listen(struct ubusd_acl_file *file, const char *obj)
o - > listen = true ;
}
static void ubusd_acl_add_send ( struct ubusd_acl_file * file , const char * obj )
{
struct ubusd_acl_obj * o = ubusd_acl_alloc_obj ( file , obj ) ;
o - > send = true ;
}
enum {
ACL_USER ,
ACL_GROUP ,
@ -300,6 +313,7 @@ enum {
ACL_SUBSCRIBE ,
ACL_INHERIT ,
ACL_LISTEN ,
ACL_SEND ,
__ACL_MAX
} ;
@ -311,6 +325,7 @@ static const struct blobmsg_policy acl_policy[__ACL_MAX] = {
[ ACL_SUBSCRIBE ] = { . name = " subscribe " , . type = BLOBMSG_TYPE_ARRAY } ,
[ ACL_INHERIT ] = { . name = " inherit " , . type = BLOBMSG_TYPE_ARRAY } ,
[ ACL_LISTEN ] = { . name = " listen " , . type = BLOBMSG_TYPE_ARRAY } ,
[ ACL_SEND ] = { . name = " send " , . type = BLOBMSG_TYPE_ARRAY } ,
} ;
static void
@ -347,6 +362,11 @@ ubusd_acl_file_add(struct ubusd_acl_file *file)
blobmsg_for_each_attr ( cur , tb [ ACL_LISTEN ] , rem )
if ( blobmsg_type ( cur ) = = BLOBMSG_TYPE_STRING )
ubusd_acl_add_listen ( file , blobmsg_get_string ( cur ) ) ;
if ( tb [ ACL_SEND ] )
blobmsg_for_each_attr ( cur , tb [ ACL_SEND ] , rem )
if ( blobmsg_type ( cur ) = = BLOBMSG_TYPE_STRING )
ubusd_acl_add_send ( file , blobmsg_get_string ( cur ) ) ;
}
static void