Lines 59-64
Link Here
|
59 |
#include <sys/socket.h> |
59 |
#include <sys/socket.h> |
60 |
#include <sys/time.h> |
60 |
#include <sys/time.h> |
61 |
#include <sys/un.h> |
61 |
#include <sys/un.h> |
|
|
62 |
#include <sys/thr.h> |
62 |
|
63 |
|
63 |
#include <sys/ipc.h> |
64 |
#include <sys/ipc.h> |
64 |
|
65 |
|
Lines 75-80
Link Here
|
75 |
#include <bsm/audit_internal.h> |
76 |
#include <bsm/audit_internal.h> |
76 |
#include <bsm/libbsm.h> |
77 |
#include <bsm/libbsm.h> |
77 |
|
78 |
|
|
|
79 |
|
78 |
#define GET_TOKEN_AREA(t, dptr, length) do { \ |
80 |
#define GET_TOKEN_AREA(t, dptr, length) do { \ |
79 |
(t) = malloc(sizeof(token_t)); \ |
81 |
(t) = malloc(sizeof(token_t)); \ |
80 |
if ((t) != NULL) { \ |
82 |
if ((t) != NULL) { \ |
Lines 1102-1113
Link Here
|
1102 |
*/ |
1104 |
*/ |
1103 |
token_t * |
1105 |
token_t * |
1104 |
au_to_subject32(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid, |
1106 |
au_to_subject32(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid, |
1105 |
pid_t pid, au_asid_t sid, au_tid_t *tid) |
1107 |
lwpid_t lwpid, pid_t pid, au_asid_t sid, au_tid_t *tid) |
1106 |
{ |
1108 |
{ |
1107 |
token_t *t; |
1109 |
token_t *t; |
1108 |
u_char *dptr = NULL; |
1110 |
u_char *dptr = NULL; |
1109 |
|
1111 |
|
1110 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 9 * sizeof(u_int32_t)); |
1112 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 10 * sizeof(u_int32_t)); |
1111 |
if (t == NULL) |
1113 |
if (t == NULL) |
1112 |
return (NULL); |
1114 |
return (NULL); |
1113 |
|
1115 |
|
Lines 1117-1122
Link Here
|
1117 |
ADD_U_INT32(dptr, egid); |
1119 |
ADD_U_INT32(dptr, egid); |
1118 |
ADD_U_INT32(dptr, ruid); |
1120 |
ADD_U_INT32(dptr, ruid); |
1119 |
ADD_U_INT32(dptr, rgid); |
1121 |
ADD_U_INT32(dptr, rgid); |
|
|
1122 |
ADD_U_INT32(dptr, lwpid); |
1120 |
ADD_U_INT32(dptr, pid); |
1123 |
ADD_U_INT32(dptr, pid); |
1121 |
ADD_U_INT32(dptr, sid); |
1124 |
ADD_U_INT32(dptr, sid); |
1122 |
ADD_U_INT32(dptr, tid->port); |
1125 |
ADD_U_INT32(dptr, tid->port); |
Lines 1127-1138
Link Here
|
1127 |
|
1130 |
|
1128 |
token_t * |
1131 |
token_t * |
1129 |
au_to_subject64(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid, |
1132 |
au_to_subject64(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid, |
1130 |
pid_t pid, au_asid_t sid, au_tid_t *tid) |
1133 |
lwpid_t lwpid, pid_t pid, au_asid_t sid, au_tid_t *tid) |
1131 |
{ |
1134 |
{ |
1132 |
token_t *t; |
1135 |
token_t *t; |
1133 |
u_char *dptr = NULL; |
1136 |
u_char *dptr = NULL; |
1134 |
|
1137 |
|
1135 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 7 * sizeof(u_int32_t) + |
1138 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 8 * sizeof(u_int32_t) + |
1136 |
sizeof(u_int64_t) + sizeof(u_int32_t)); |
1139 |
sizeof(u_int64_t) + sizeof(u_int32_t)); |
1137 |
if (t == NULL) |
1140 |
if (t == NULL) |
1138 |
return (NULL); |
1141 |
return (NULL); |
Lines 1143-1148
Link Here
|
1143 |
ADD_U_INT32(dptr, egid); |
1146 |
ADD_U_INT32(dptr, egid); |
1144 |
ADD_U_INT32(dptr, ruid); |
1147 |
ADD_U_INT32(dptr, ruid); |
1145 |
ADD_U_INT32(dptr, rgid); |
1148 |
ADD_U_INT32(dptr, rgid); |
|
|
1149 |
ADD_U_INT32(dptr, lwpid); |
1146 |
ADD_U_INT32(dptr, pid); |
1150 |
ADD_U_INT32(dptr, pid); |
1147 |
ADD_U_INT32(dptr, sid); |
1151 |
ADD_U_INT32(dptr, sid); |
1148 |
ADD_U_INT64(dptr, tid->port); |
1152 |
ADD_U_INT64(dptr, tid->port); |
Lines 1153-1163
Link Here
|
1153 |
|
1157 |
|
1154 |
token_t * |
1158 |
token_t * |
1155 |
au_to_subject(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid, |
1159 |
au_to_subject(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid, |
1156 |
pid_t pid, au_asid_t sid, au_tid_t *tid) |
1160 |
lwpid_t lwpid, pid_t pid, au_asid_t sid, au_tid_t *tid) |
1157 |
{ |
1161 |
{ |
1158 |
|
1162 |
|
1159 |
return (au_to_subject32(auid, euid, egid, ruid, rgid, pid, sid, |
1163 |
return (au_to_subject32(auid, euid, egid, ruid, rgid, lwpid, pid, |
1160 |
tid)); |
1164 |
sid, tid)); |
1161 |
} |
1165 |
} |
1162 |
|
1166 |
|
1163 |
/* |
1167 |
/* |
Lines 1176-1191
Link Here
|
1176 |
*/ |
1180 |
*/ |
1177 |
token_t * |
1181 |
token_t * |
1178 |
au_to_subject32_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, |
1182 |
au_to_subject32_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, |
1179 |
gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid) |
1183 |
gid_t rgid, lwpid_t lwpid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid) |
1180 |
{ |
1184 |
{ |
1181 |
token_t *t; |
1185 |
token_t *t; |
1182 |
u_char *dptr = NULL; |
1186 |
u_char *dptr = NULL; |
1183 |
|
1187 |
|
1184 |
if (tid->at_type == AU_IPv4) |
1188 |
if (tid->at_type == AU_IPv4) |
1185 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 10 * |
1189 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 11 * |
1186 |
sizeof(u_int32_t)); |
1190 |
sizeof(u_int32_t)); |
1187 |
else if (tid->at_type == AU_IPv6) |
1191 |
else if (tid->at_type == AU_IPv6) |
1188 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 13 * |
1192 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 14 * |
1189 |
sizeof(u_int32_t)); |
1193 |
sizeof(u_int32_t)); |
1190 |
else { |
1194 |
else { |
1191 |
errno = EINVAL; |
1195 |
errno = EINVAL; |
Lines 1200-1205
Link Here
|
1200 |
ADD_U_INT32(dptr, egid); |
1204 |
ADD_U_INT32(dptr, egid); |
1201 |
ADD_U_INT32(dptr, ruid); |
1205 |
ADD_U_INT32(dptr, ruid); |
1202 |
ADD_U_INT32(dptr, rgid); |
1206 |
ADD_U_INT32(dptr, rgid); |
|
|
1207 |
ADD_U_INT32(dptr, lwpid); |
1203 |
ADD_U_INT32(dptr, pid); |
1208 |
ADD_U_INT32(dptr, pid); |
1204 |
ADD_U_INT32(dptr, sid); |
1209 |
ADD_U_INT32(dptr, sid); |
1205 |
ADD_U_INT32(dptr, tid->at_port); |
1210 |
ADD_U_INT32(dptr, tid->at_port); |
Lines 1214-1231
Link Here
|
1214 |
|
1219 |
|
1215 |
token_t * |
1220 |
token_t * |
1216 |
au_to_subject64_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, |
1221 |
au_to_subject64_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, |
1217 |
gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid) |
1222 |
gid_t rgid, lwpid_t lwpid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid) |
1218 |
{ |
1223 |
{ |
1219 |
token_t *t; |
1224 |
token_t *t; |
1220 |
u_char *dptr = NULL; |
1225 |
u_char *dptr = NULL; |
1221 |
|
1226 |
|
1222 |
if (tid->at_type == AU_IPv4) |
1227 |
if (tid->at_type == AU_IPv4) |
1223 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + |
1228 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + |
1224 |
7 * sizeof(u_int32_t) + sizeof(u_int64_t) + |
1229 |
8 * sizeof(u_int32_t) + sizeof(u_int64_t) + |
1225 |
2 * sizeof(u_int32_t)); |
1230 |
2 * sizeof(u_int32_t)); |
1226 |
else if (tid->at_type == AU_IPv6) |
1231 |
else if (tid->at_type == AU_IPv6) |
1227 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + |
1232 |
GET_TOKEN_AREA(t, dptr, sizeof(u_char) + |
1228 |
7 * sizeof(u_int32_t) + sizeof(u_int64_t) + |
1233 |
8 * sizeof(u_int32_t) + sizeof(u_int64_t) + |
1229 |
5 * sizeof(u_int32_t)); |
1234 |
5 * sizeof(u_int32_t)); |
1230 |
else { |
1235 |
else { |
1231 |
errno = EINVAL; |
1236 |
errno = EINVAL; |
Lines 1240-1245
Link Here
|
1240 |
ADD_U_INT32(dptr, egid); |
1245 |
ADD_U_INT32(dptr, egid); |
1241 |
ADD_U_INT32(dptr, ruid); |
1246 |
ADD_U_INT32(dptr, ruid); |
1242 |
ADD_U_INT32(dptr, rgid); |
1247 |
ADD_U_INT32(dptr, rgid); |
|
|
1248 |
ADD_U_INT32(dptr, lwpid); |
1243 |
ADD_U_INT32(dptr, pid); |
1249 |
ADD_U_INT32(dptr, pid); |
1244 |
ADD_U_INT32(dptr, sid); |
1250 |
ADD_U_INT32(dptr, sid); |
1245 |
ADD_U_INT64(dptr, tid->at_port); |
1251 |
ADD_U_INT64(dptr, tid->at_port); |
Lines 1254-1264
Link Here
|
1254 |
|
1260 |
|
1255 |
token_t * |
1261 |
token_t * |
1256 |
au_to_subject_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, |
1262 |
au_to_subject_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, |
1257 |
gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid) |
1263 |
gid_t rgid, lwpid_t lwpid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid) |
1258 |
{ |
1264 |
{ |
1259 |
|
1265 |
|
1260 |
return (au_to_subject32_ex(auid, euid, egid, ruid, rgid, pid, sid, |
1266 |
return (au_to_subject32_ex(auid, euid, egid, ruid, rgid, lwpid, pid, |
1261 |
tid)); |
1267 |
sid, tid)); |
1262 |
} |
1268 |
} |
1263 |
|
1269 |
|
1264 |
#if !defined(_KERNEL) && !defined(KERNEL) && defined(HAVE_AUDIT_SYSCALLS) |
1270 |
#if !defined(_KERNEL) && !defined(KERNEL) && defined(HAVE_AUDIT_SYSCALLS) |
Lines 1271-1276
Link Here
|
1271 |
{ |
1277 |
{ |
1272 |
auditinfo_t auinfo; |
1278 |
auditinfo_t auinfo; |
1273 |
auditinfo_addr_t aia; |
1279 |
auditinfo_addr_t aia; |
|
|
1280 |
long lwpid = -1; |
1281 |
|
1282 |
thr_self(&lwpid); |
1274 |
|
1283 |
|
1275 |
/* |
1284 |
/* |
1276 |
* Try to use getaudit_addr(2) first. If this kernel does not support |
1285 |
* Try to use getaudit_addr(2) first. If this kernel does not support |
Lines 1281-1288
Link Here
|
1281 |
if (getaudit(&auinfo) != 0) |
1290 |
if (getaudit(&auinfo) != 0) |
1282 |
return (NULL); |
1291 |
return (NULL); |
1283 |
return (au_to_subject32(auinfo.ai_auid, geteuid(), |
1292 |
return (au_to_subject32(auinfo.ai_auid, geteuid(), |
1284 |
getegid(), getuid(), getgid(), getpid(), |
1293 |
getegid(), getuid(), getgid(), (lwpid_t)lwpid, |
1285 |
auinfo.ai_asid, &auinfo.ai_termid)); |
1294 |
getpid(), auinfo.ai_asid, &auinfo.ai_termid)); |
1286 |
} else { |
1295 |
} else { |
1287 |
/* getaudit_addr(2) failed for some other reason. */ |
1296 |
/* getaudit_addr(2) failed for some other reason. */ |
1288 |
return (NULL); |
1297 |
return (NULL); |
Lines 1290-1296
Link Here
|
1290 |
} |
1299 |
} |
1291 |
|
1300 |
|
1292 |
return (au_to_subject32_ex(aia.ai_auid, geteuid(), getegid(), getuid(), |
1301 |
return (au_to_subject32_ex(aia.ai_auid, geteuid(), getegid(), getuid(), |
1293 |
getgid(), getpid(), aia.ai_asid, &aia.ai_termid)); |
1302 |
getgid(), (lwpid_t)lwpid, getpid(), aia.ai_asid, |
|
|
1303 |
&aia.ai_termid)); |
1294 |
} |
1304 |
} |
1295 |
#endif |
1305 |
#endif |
1296 |
|
1306 |
|