mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 02:14:37 +00:00
zdtm/static/sock_opts00: use unix socket to test SO_PASSCRED and SO_PASSSEC
SO_PASSCRED and SO_PASSSEC are only valid for AF_UNIX and AF_NETLINK This patch updates the test logic to use a unix socket for these options, while preserving the original value consistency check Fixes: #2705 Signed-off-by: Dong Sunchao <dongsunchao@gmail.com>
This commit is contained in:
parent
2ba3430106
commit
fa1b399064
1 changed files with 14 additions and 5 deletions
|
|
@ -31,7 +31,7 @@ int main(int argc, char **argv)
|
|||
static const int NOPTS = sizeof(vname) / sizeof(*vname);
|
||||
#undef OPT
|
||||
|
||||
int sock, ret = 0, val[NOPTS], rval, i;
|
||||
int sock, usock, sk, ret = 0, val[NOPTS], rval, i;
|
||||
socklen_t len = sizeof(int);
|
||||
|
||||
test_init(argc, argv);
|
||||
|
|
@ -42,8 +42,15 @@ int main(int argc, char **argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
usock = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
if (usock < 0) {
|
||||
pr_perror("can't create unix socket");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < NOPTS; i++) {
|
||||
ret = getsockopt(sock, SOL_SOCKET, vname[i].opt, &val[i], &len);
|
||||
sk = vname[i].opt == SO_PASSCRED || vname[i].opt == SO_PASSSEC ? usock : sock;
|
||||
ret = getsockopt(sk, SOL_SOCKET, vname[i].opt, &val[i], &len);
|
||||
if (ret) {
|
||||
pr_perror("can't get %s", vname[i].name);
|
||||
return 1;
|
||||
|
|
@ -51,13 +58,13 @@ int main(int argc, char **argv)
|
|||
|
||||
val[i]++;
|
||||
|
||||
ret = setsockopt(sock, SOL_SOCKET, vname[i].opt, &val[i], len);
|
||||
ret = setsockopt(sk, SOL_SOCKET, vname[i].opt, &val[i], len);
|
||||
if (ret) {
|
||||
pr_perror("can't set %s = %d", vname[i].name, val[i]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
ret = getsockopt(sock, SOL_SOCKET, vname[i].opt, &rval, &len);
|
||||
ret = getsockopt(sk, SOL_SOCKET, vname[i].opt, &rval, &len);
|
||||
if (ret) {
|
||||
pr_perror("can't re-get %s", vname[i].name);
|
||||
return 1;
|
||||
|
|
@ -78,7 +85,8 @@ int main(int argc, char **argv)
|
|||
test_waitsig();
|
||||
|
||||
for (i = 0; i < NOPTS; i++) {
|
||||
ret = getsockopt(sock, SOL_SOCKET, vname[i].opt, &rval, &len);
|
||||
sk = vname[i].opt == SO_PASSCRED || vname[i].opt == SO_PASSSEC ? usock : sock;
|
||||
ret = getsockopt(sk, SOL_SOCKET, vname[i].opt, &rval, &len);
|
||||
if (ret) {
|
||||
pr_perror("can't verify %s", vname[i].name);
|
||||
return 1;
|
||||
|
|
@ -93,6 +101,7 @@ int main(int argc, char **argv)
|
|||
|
||||
pass();
|
||||
close(sock);
|
||||
close(usock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue