High Performance OPC UA Server SDK  1.3.1.248

For more information on the inode backend and usage examples see Inode Backend. More...

Data Structures

struct  ua_perm_ctx
 Permission information contained in every node. More...
 
struct  ua_user_ctx
 Representation of a user in the server. More...
 

Macros

#define UA_ATTRREADABLE   0x0001
 
#define UA_ATTRWRITABLE   0x0002
 
#define UA_EVENTREADABLE   0x0004
 
#define UA_EXECUTABLE   0x0008
 
#define UA_READABLE   0x00040000
 
#define UA_WRITABLE   0x00080000
 
#define UA_HISTORYWRITABLE   0x00100000
 
#define UA_HISTORYREADABLE   UA_READABLE
 
#define UA_HISTORYINSERT   UA_HISTORYWRITABLE
 
#define UA_HISTORYMODIFY   UA_HISTORYWRITABLE
 
#define UA_HISTORYDELETE   UA_HISTORYWRITABLE
 
#define UA_NUM_PERM_BITS   5
 
#define UA_OTHER_ATTRWRITABLE   UA_ATTRWRITABLE
 
#define UA_OTHER_WRITABLE   UA_WRITABLE
 
#define UA_OTHER_EXECUTABLE   UA_EXECUTABLE
 
#define UA_OTHER_HISTORYINSERT   UA_HISTORYINSERT
 
#define UA_OTHER_HISTORYMODIFY   UA_HISTORYMODIFY
 
#define UA_OTHER_HISTORYDELETE   UA_HISTORYDELETE
 
#define UA_OTHER_READABLE   UA_READABLE
 
#define UA_OTHER_HISTORYREADABLE   UA_HISTORYREADABLE
 
#define UA_OTHER_ATTRREADABLE   UA_ATTRREADABLE
 
#define UA_OTHER_EVENTREADABLE   UA_EVENTREADABLE
 
#define UA_OTHER_OBSERVATION   (UA_OTHER_READABLE | UA_OTHER_HISTORYREADABLE | UA_OTHER_ATTRREADABLE | UA_OTHER_EVENTREADABLE)
 
#define UA_OTHER_OPERATION   (UA_OTHER_OBSERVATION | UA_OTHER_WRITABLE | UA_OTHER_EXECUTABLE)
 
#define UA_OTHER_ALL   (UA_OTHER_OPERATION | UA_OTHER_ATTRWRITABLE | UA_OTHER_HISTORYINSERT | UA_OTHER_HISTORYMODIFY | UA_OTHER_HISTORYDELETE)
 
#define UA_GROUP_ATTRWRITABLE   (UA_OTHER_ATTRWRITABLE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_WRITABLE   (UA_OTHER_WRITABLE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_EXECUTABLE   (UA_OTHER_EXECUTABLE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_HISTORYINSERT   (UA_OTHER_HISTORYINSERT << UA_NUM_PERM_BITS)
 
#define UA_GROUP_HISTORYMODIFY   (UA_OTHER_HISTORYMODIFY << UA_NUM_PERM_BITS)
 
#define UA_GROUP_HISTORYDELETE   (UA_OTHER_HISTORYDELETE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_READABLE   (UA_OTHER_READABLE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_HISTORYREADABLE   (UA_OTHER_HISTORYREADABLE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_ATTRREADABLE   (UA_OTHER_ATTRREADABLE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_EVENTREADABLE   (UA_OTHER_EVENTREADABLE << UA_NUM_PERM_BITS)
 
#define UA_GROUP_OBSERVATION   (UA_GROUP_READABLE | UA_GROUP_HISTORYREADABLE | UA_GROUP_ATTRREADABLE | UA_GROUP_EVENTREADABLE)
 
#define UA_GROUP_OPERATION   (UA_GROUP_OBSERVATION | UA_GROUP_WRITABLE | UA_GROUP_EXECUTABLE)
 
#define UA_GROUP_ALL   (UA_GROUP_OPERATION | UA_GROUP_ATTRWRITABLE | UA_GROUP_HISTORYINSERT | UA_GROUP_HISTORYMODIFY | UA_GROUP_HISTORYDELETE)
 
#define UA_USER_ATTRWRITABLE   (UA_GROUP_ATTRWRITABLE << UA_NUM_PERM_BITS)
 
#define UA_USER_WRITABLE   (UA_GROUP_WRITABLE << UA_NUM_PERM_BITS)
 
#define UA_USER_EXECUTABLE   (UA_GROUP_EXECUTABLE << UA_NUM_PERM_BITS)
 
#define UA_USER_HISTORYINSERT   (UA_GROUP_HISTORYINSERT << UA_NUM_PERM_BITS)
 
#define UA_USER_HISTORYMODIFY   (UA_GROUP_HISTORYMODIFY << UA_NUM_PERM_BITS)
 
#define UA_USER_HISTORYDELETE   (UA_GROUP_HISTORYDELETE << UA_NUM_PERM_BITS)
 
#define UA_USER_READABLE   (UA_GROUP_READABLE << UA_NUM_PERM_BITS)
 
#define UA_USER_HISTORYREADABLE   (UA_GROUP_HISTORYREADABLE << UA_NUM_PERM_BITS)
 
#define UA_USER_ATTRREADABLE   (UA_GROUP_ATTRREADABLE << UA_NUM_PERM_BITS)
 
#define UA_USER_EVENTREADABLE   (UA_GROUP_EVENTREADABLE << UA_NUM_PERM_BITS)
 
#define UA_USER_OBSERVATION   (UA_USER_READABLE | UA_USER_HISTORYREADABLE | UA_USER_ATTRREADABLE | UA_USER_EVENTREADABLE)
 
#define UA_USER_OPERATION   (UA_USER_OBSERVATION | UA_USER_WRITABLE | UA_USER_EXECUTABLE)
 
#define UA_USER_ALL   (UA_USER_OPERATION | UA_USER_ATTRWRITABLE | UA_USER_HISTORYINSERT | UA_USER_HISTORYMODIFY | UA_USER_HISTORYDELETE)
 
#define UA_ALL_ENCRYPTION_REQUIRED   (0x1 << (3 * UA_NUM_PERM_BITS))
 
#define UA_AUTHORIZATION_MAX_GROUPS_PER_USER   5
 Maximum number of groups per user. More...
 

Typedefs

typedef uint8_t ua_uid_t
 Datatype for the user id, can be increased to support more users.
 
typedef uint8_t ua_gid_t
 Datatype for the group id, can be increased to support more groups.
 

Functions

int ua_inode_set_perm (ua_node_t node, ua_uid_t uid, ua_gid_t gid, uint32_t permissions)
 Set permission for a single node. More...
 
int ua_inode_set_default_perm (ua_uid_t uid, ua_gid_t gid, uint32_t permissions)
 Set new default permission for all newly created nodes. More...
 
int ua_inode_add_user (const char *username, ua_uid_t id)
 Add a new user with username and id. More...
 
int ua_inode_add_group (const char *groupname, ua_gid_t id)
 Add a new group with groupname and id. More...
 
int ua_inode_add_user_to_group (const char *username, const char *groupname)
 Add a user to a group. More...
 
int ua_inode_get_uid (const char *username, ua_uid_t *uid)
 Get the userid for a username. More...
 
int ua_inode_get_gid (const char *groupname, ua_gid_t *gid)
 Get the groupid for a groupname. More...
 
int ua_inode_get_username (ua_uid_t uid, const char **username)
 Get the username for a userid. More...
 

Detailed Description

For more information on the inode backend and usage examples see Inode Backend.

Macro Definition Documentation

◆ UA_AUTHORIZATION_MAX_GROUPS_PER_USER

#define UA_AUTHORIZATION_MAX_GROUPS_PER_USER   5

Maximum number of groups per user.

With 5 groups and uid and gid being 1 byte the structure is 8 byte, which fits nicely into memory.

Function Documentation

◆ ua_inode_add_group()

int ua_inode_add_group ( const char *  groupname,
ua_gid_t  id 
)

Add a new group with groupname and id.

Returns an error if the groupname already exists.

Returns
0 on success or errorcode on failure.

◆ ua_inode_add_user()

int ua_inode_add_user ( const char *  username,
ua_uid_t  id 
)

Add a new user with username and id.

Returns an error if the username already exists.

Returns
0 on success or errorcode on failure.

◆ ua_inode_add_user_to_group()

int ua_inode_add_user_to_group ( const char *  username,
const char *  groupname 
)

Add a user to a group.

Returns an error if either the user or the group doesn't exists. Detail: Technically the group is added to the user.

Returns
0 on success or errorcode on failure.

◆ ua_inode_get_gid()

int ua_inode_get_gid ( const char *  groupname,
ua_gid_t gid 
)

Get the groupid for a groupname.

Parameters
groupnameName of group to get id from.
gidPointer to group id where the id will be written to.
Returns
0 on success or errorcode on failure.

◆ ua_inode_get_uid()

int ua_inode_get_uid ( const char *  username,
ua_uid_t uid 
)

Get the userid for a username.

Parameters
usernameName of user to get id from.
uidPointer to user id where the id will be written to.
Returns
0 on success or errorcode on failure.

◆ ua_inode_get_username()

int ua_inode_get_username ( ua_uid_t  uid,
const char **  username 
)

Get the username for a userid.

Parameters
uidUser id to get the username from.
usernamePointer which will be set to the name of user; must not be freed.
Returns
0 on success or errorcode on failure.

◆ ua_inode_set_default_perm()

int ua_inode_set_default_perm ( ua_uid_t  uid,
ua_gid_t  gid,
uint32_t  permissions 
)

Set new default permission for all newly created nodes.

Parameters
uidUser id for newly created nodes.
gidGroup id for newly created nodes.
permissionsUser, group and other permissions for newly created nodes. Multiple permissions can be OR'd together.
Returns
0 on success or errorcode on failure.

◆ ua_inode_set_perm()

int ua_inode_set_perm ( ua_node_t  node,
ua_uid_t  uid,
ua_gid_t  gid,
uint32_t  permissions 
)

Set permission for a single node.

Parameters
nodeHandle of the node to set permissions.
uidUser id for the node.
gidGroup id for the node.
permissionsUser, group and other permissions for the node. Multiple permissions can be OR'd together.
Returns
0 on success or errorcode on failure.