diff --git a/interfaces/innerkits/accesstoken_operation.c b/interfaces/innerkits/accesstoken_operation.c new file mode 100644 index 0000000000000000000000000000000000000000..900471ae2cd9c00f2fa4846240dadf967449614c --- /dev/null +++ b/interfaces/innerkits/accesstoken_operation.c @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include + +#include "accesstoken_operation.h" + +#define ACCESS_TOKEN_ID_IOCTL_BASE 'A' + +enum { + GET_TOKEN_ID = 1, + SET_TOKEN_ID, + GET_FTOKEN_ID, + SET_FTOKEN_ID, + ACCESS_TOKENID_MAX_NR, +}; + +#define ACCESS_TOKENID_GET_TOKENID \ + _IOR(ACCESS_TOKEN_ID_IOCTL_BASE,GET_TOKEN_ID,unsigned long long) +#define ACCESS_TOKENID_SET_TOKENID \ + _IOW(ACCESS_TOKEN_ID_IOCTL_BASE,SET_TOKEN_ID,unsigned long long) +#define ACCESS_TOKENID_GET_FTOKENID\ + _IOR(ACCESS_TOKEN_ID_IOCTL_BASE,GET_FTOKEN_ID,unsigned long long) +#define ACCESS_TOKENID_SET_FTOKENID \ + _IOW(ACCESS_TOKEN_ID_IOCTL_BASE,SET_FTOKEN_ID,unsigned long long) + +#define ACCESS_TOKEN_OK 0 +#define ACCESS_TOKEN_ERROR -1 + +#define INVAL_TOKEN_ID 0x0 +#define TOKEN_ID_LOWMASK 0xffffffff + +#define TOKENID_DEVNODE "/dev/access_token_id" + +uint64_t GetSelfTokenID() +{ + uint64_t token = INVAL_TOKEN_ID; + int fd = open(TOKENID_DEVNODE,O_RDWR); + if (fd < 0) { + return INVAL_TOKEN_ID; + } + int ret =ioctl(fd,ACCESS_TOKENID_GET_TOKENID,&token); + if (ret) { + close(fd); + return INVAL_TOKEN_ID; + } + + close(fd); + return token; +} + +int SetSelfTokenID(uint64_t tokenID) +{ + int fd = open(TOKENID_DEVNODE,O_RDWR); + if (fd < 0) { + return ACCESS_TOKEN_ERROR; + } + int ret = ioctl(fd,ACCESS_TOKENID_SET_TOKENID,&tokenID); + if (ret) { + close(fd); + return ACCESS_TOKEN_ERROR; + } + + close(fd); + return ACCESS_TOKEN_OK; +} + +uint64_t GetFirstCallerTokenID() +{ + uint64_t token = INVAL_TOKEN_ID; + int fd = open(TOKENID_DEVNODE,O_RDWR); + if (fd < 0) { + return INVAL_TOKEN_ID; + } + int ret = ioctl(fd,ACCESS_TOKENID_GET_FTOKENID,&token); + if (ret) { + close(fd); + return INVAL_TOKEN_ID; + } + + close(fd); + return token; +} + +int SetFirstCallerTokenID(uint64_t tokenID) +{ + int fd = open(TOKENID_DEVNODE,O_RDWR); + if (fd < 0) { + return ACCESS_TOKEN_ERROR; + } + int ret = ioctl(fd,ACCESS_TOKENID_SET_FTOKENID,&tokenID); + if (ret) { + close(fd); + return ACCESS_TOKEN_ERROR; + } + + close(fd); + return ACCESS_TOKEN_OK; +} \ No newline at end of file diff --git a/interfaces/innerkits/accesstoken_operation.h b/interfaces/innerkits/accesstoken_operation.h new file mode 100644 index 0000000000000000000000000000000000000000..de36455d61ee2f49493b9600a25e3501eb7e3485 --- /dev/null +++ b/interfaces/innerkits/accesstoken_operation.h @@ -0,0 +1,10 @@ +#ifndef ACCESSTOKEN_OPERATION_H +#define ACCESSTOKEN_OPERATION_H +#include + +uint64_t GetSelfTokenID(); +int SetSelfTokenID(uint64_t tokenID); +uint64_t GetFirstCallerTokenID(); +int SetFirstCallerTokenID(uint64_t tokenID); + +#endif \ No newline at end of file