Home | History | Annotate | Download | only in lapi
      1 /*
      2  * Copyright (c) 2017 Cyril Hrubis <chrubis (at) suse.cz>
      3  *
      4  * This program is free software: you can redistribute it and/or modify
      5  * it under the terms of the GNU General Public License as published by
      6  * the Free Software Foundation, either version 2 of the License, or
      7  * (at your option) any later version.
      8  *
      9  * This program is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12  * GNU General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU General Public License
     15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
     16  */
     17 
     18 #ifndef KEYCTL_H__
     19 #define KEYCTL_H__
     20 
     21 #include "config.h"
     22 
     23 #if defined(HAVE_KEYUTILS_H) && defined(HAVE_LIBKEYUTILS)
     24 # include <keyutils.h>
     25 #else
     26 # ifdef HAVE_LINUX_KEYCTL_H
     27 #  include <linux/keyctl.h>
     28 # endif /* HAVE_LINUX_KEYCTL_H */
     29 
     30 # include <stdarg.h>
     31 # include <stdint.h>
     32 # include "lapi/syscalls.h"
     33 typedef int32_t key_serial_t;
     34 
     35 static inline key_serial_t add_key(const char *type,
     36 				   const char *description,
     37 				   const void *payload,
     38 				   size_t plen,
     39 				   key_serial_t ringid)
     40 {
     41 	return tst_syscall(__NR_add_key,
     42 		type, description, payload, plen, ringid);
     43 }
     44 
     45 static inline key_serial_t request_key(const char *type,
     46 				       const char *description,
     47 				       const char *callout_info,
     48 				       key_serial_t destringid)
     49 {
     50 	return tst_syscall(__NR_request_key,
     51 		type, description, callout_info, destringid);
     52 }
     53 
     54 static inline long keyctl(int cmd, ...)
     55 {
     56 	va_list va;
     57 	unsigned long arg2, arg3, arg4, arg5;
     58 
     59 	va_start(va, cmd);
     60 	arg2 = va_arg(va, unsigned long);
     61 	arg3 = va_arg(va, unsigned long);
     62 	arg4 = va_arg(va, unsigned long);
     63 	arg5 = va_arg(va, unsigned long);
     64 	va_end(va);
     65 
     66 	return tst_syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5);
     67 }
     68 
     69 static inline key_serial_t keyctl_join_session_keyring(const char *name) {
     70 	return keyctl(KEYCTL_JOIN_SESSION_KEYRING, name);
     71 }
     72 
     73 #endif /* defined(HAVE_KEYUTILS_H) && defined(HAVE_LIBKEYUTILS) */
     74 
     75 /* special process keyring shortcut IDs */
     76 #ifndef KEY_SPEC_THREAD_KEYRING
     77 # define KEY_SPEC_THREAD_KEYRING -1
     78 #endif
     79 
     80 #ifndef KEY_SPEC_PROCESS_KEYRING
     81 # define KEY_SPEC_PROCESS_KEYRING -2
     82 #endif
     83 
     84 #ifndef KEY_SPEC_SESSION_KEYRING
     85 # define KEY_SPEC_SESSION_KEYRING -3
     86 #endif
     87 
     88 #ifndef KEY_SPEC_USER_KEYRING
     89 # define KEY_SPEC_USER_KEYRING -4
     90 #endif
     91 
     92 
     93 #ifndef KEY_SPEC_USER_SESSION_KEYRING
     94 # define KEY_SPEC_USER_SESSION_KEYRING -5
     95 #endif
     96 
     97 /* request-key default keyrings */
     98 #ifndef KEY_REQKEY_DEFL_THREAD_KEYRING
     99 # define KEY_REQKEY_DEFL_THREAD_KEYRING 1
    100 #endif
    101 
    102 #ifndef KEY_REQKEY_DEFL_SESSION_KEYRING
    103 # define KEY_REQKEY_DEFL_SESSION_KEYRING 3
    104 #endif
    105 
    106 #ifndef KEY_REQKEY_DEFL_DEFAULT
    107 # define KEY_REQKEY_DEFL_DEFAULT	0
    108 #endif
    109 
    110 /* keyctl commands */
    111 #ifndef KEYCTL_GET_KEYRING_ID
    112 # define KEYCTL_GET_KEYRING_ID 0
    113 #endif
    114 
    115 #ifndef KEYCTL_JOIN_SESSION_KEYRING
    116 # define KEYCTL_JOIN_SESSION_KEYRING 1
    117 #endif
    118 
    119 #ifndef KEYCTL_UPDATE
    120 # define KEYCTL_UPDATE 2
    121 #endif
    122 
    123 #ifndef KEYCTL_REVOKE
    124 # define KEYCTL_REVOKE 3
    125 #endif
    126 
    127 #ifndef KEYCTL_SETPERM
    128 # define KEYCTL_SETPERM 5
    129 #endif
    130 
    131 #ifndef KEYCTL_CLEAR
    132 # define KEYCTL_CLEAR 7
    133 #endif
    134 
    135 #ifndef KEYCTL_UNLINK
    136 # define KEYCTL_UNLINK 9
    137 #endif
    138 
    139 #ifndef KEYCTL_READ
    140 # define KEYCTL_READ 11
    141 #endif
    142 
    143 #ifndef KEYCTL_SET_REQKEY_KEYRING
    144 # define KEYCTL_SET_REQKEY_KEYRING 14
    145 #endif
    146 
    147 #ifndef KEYCTL_SET_TIMEOUT
    148 # define KEYCTL_SET_TIMEOUT 15
    149 #endif
    150 
    151 #ifndef KEYCTL_INVALIDATE
    152 # define KEYCTL_INVALIDATE 21
    153 #endif
    154 
    155 /* key permissions */
    156 #ifndef KEY_POS_VIEW
    157 # define KEY_POS_VIEW    0x01000000
    158 # define KEY_POS_READ    0x02000000
    159 # define KEY_POS_WRITE   0x04000000
    160 # define KEY_POS_SEARCH  0x08000000
    161 # define KEY_POS_LINK    0x10000000
    162 # define KEY_POS_SETATTR 0x20000000
    163 # define KEY_POS_ALL     0x3f000000
    164 
    165 # define KEY_USR_VIEW    0x00010000
    166 # define KEY_USR_READ    0x00020000
    167 # define KEY_USR_WRITE   0x00040000
    168 # define KEY_USR_SEARCH  0x00080000
    169 # define KEY_USR_LINK    0x00100000
    170 # define KEY_USR_SETATTR 0x00200000
    171 # define KEY_USR_ALL     0x003f0000
    172 
    173 # define KEY_GRP_VIEW    0x00000100
    174 # define KEY_GRP_READ    0x00000200
    175 # define KEY_GRP_WRITE   0x00000400
    176 # define KEY_GRP_SEARCH  0x00000800
    177 # define KEY_GRP_LINK    0x00001000
    178 # define KEY_GRP_SETATTR 0x00002000
    179 # define KEY_GRP_ALL     0x00003f00
    180 
    181 # define KEY_OTH_VIEW    0x00000001
    182 # define KEY_OTH_READ    0x00000002
    183 # define KEY_OTH_WRITE   0x00000004
    184 # define KEY_OTH_SEARCH  0x00000008
    185 # define KEY_OTH_LINK    0x00000010
    186 # define KEY_OTH_SETATTR 0x00000020
    187 # define KEY_OTH_ALL     0x0000003f
    188 #endif /* !KEY_POS_VIEW */
    189 
    190 #endif	/* KEYCTL_H__ */
    191