blob: a4950bb8b6bd1358972cbd5be4dd52beda2516bc [file] [log] [blame]
subrata_modak6c7dfab2009-03-19 07:27:04 +00001/*
2 * Copyright (C) 2007 Casey Schaufler <casey@schaufler-ca.com>
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, version 2.
7 *
8 * Author:
9 * Casey Schaufler <casey@schaufler-ca.com>
10 */
11
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include <unistd.h>
16
17#include <sys/types.h>
18#include <sys/stat.h>
19#include <fcntl.h>
20
21#include <sys/socket.h>
22#include <netinet/in.h>
23#include <arpa/inet.h>
yaberauneya4dfb2802009-12-06 11:54:42 +000024#include <netinet/ip.h>
25#include <netinet/udp.h>
26#ifdef HAVE_LINUX_NETLINK_H
subrata_modak6c7dfab2009-03-19 07:27:04 +000027#include <linux/netlink.h>
yaberauneya4dfb2802009-12-06 11:54:42 +000028#endif
subrata_modak6c7dfab2009-03-19 07:27:04 +000029
30#include <sys/xattr.h>
Zeng Linggang5dc669f2015-01-20 16:32:41 +080031#include <sys/vfs.h>
32
33#include "test.h"
Zeng Linggang5dc669f2015-01-20 16:32:41 +080034
35char *TCID = "smack_set_socket_labels";
36int TST_TOTAL = 1;
subrata_modak6c7dfab2009-03-19 07:27:04 +000037
Zeng Linggangea392772015-01-21 11:11:58 +080038static void setup(void);
39static void cleanup(void);
40static void set_socket_labels(char **);
41
Wanlong Gao354ebb42012-12-07 10:10:04 +080042int main(int argc, char *argv[])
subrata_modak6c7dfab2009-03-19 07:27:04 +000043{
Zeng Linggangea392772015-01-21 11:11:58 +080044 int lc;
45 const char *msg;
46
47 msg = parse_opts(argc, argv, NULL, NULL);
48 if (msg != NULL)
49 tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
50
51 setup();
52
53 for (lc = 0; TEST_LOOPING(lc); lc++) {
54 tst_count = 0;
55 set_socket_labels(argv);
56 }
57
58 cleanup();
59 tst_exit();
60}
61
62static void setup(void)
63{
64 tst_sig(NOFORK, DEF_HANDLER, cleanup);
65
66 TEST_PAUSE;
67}
68
69static void set_socket_labels(char **argv)
70{
subrata_modak6c7dfab2009-03-19 07:27:04 +000071 char *anin = "security.SMACK64IPIN";
72 char *anout = "security.SMACK64IPOUT";
73 char *annot = "security.SMACK64IPNOT";
74 char *avin = "TheOne";
75 char *avout = "TheOther";
76 char *avnot = "TheBadValue";
77 int sock;
78 int rc;
Zeng Linggang5dc669f2015-01-20 16:32:41 +080079 char buf[256];
subrata_modak6c7dfab2009-03-19 07:27:04 +000080
Zeng Linggang5dc669f2015-01-20 16:32:41 +080081 sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
82 if (sock < 0)
83 tst_brkm(TFAIL, NULL, "%s Socket creation failure", argv[0]);
84
85 flistxattr(sock, buf, 256);
86 if (strstr(buf, "security.SMACK64") == NULL)
87 tst_brkm(TCONF, NULL, "smackfs not set.");
subrata_modak6c7dfab2009-03-19 07:27:04 +000088
89 rc = fsetxattr(sock, anin, avin, strlen(avin) + 1, 0);
90 if (rc < 0) {
Zeng Linggang5dc669f2015-01-20 16:32:41 +080091 tst_brkm(TFAIL, NULL, "%s fsetxattr of %s to %s failure",
92 argv[0], anin, avin);
subrata_modak6c7dfab2009-03-19 07:27:04 +000093 }
94
95 rc = fsetxattr(sock, anout, avout, strlen(avout) + 1, 0);
96 if (rc < 0) {
Zeng Linggang5dc669f2015-01-20 16:32:41 +080097 tst_brkm(TFAIL, NULL, "%s fsetxattr of %s to %s failure",
98 argv[0], anout, avout);
subrata_modak6c7dfab2009-03-19 07:27:04 +000099 }
100
101 rc = fsetxattr(sock, annot, avnot, strlen(avnot) + 1, 0);
102 if (rc >= 0) {
Zeng Linggang5dc669f2015-01-20 16:32:41 +0800103 tst_brkm(TFAIL, NULL,
104 "%s fsetxattr of %s to %s succeeded in error",
105 argv[0], anout, avout);
subrata_modak6c7dfab2009-03-19 07:27:04 +0000106 }
Zeng Linggang5dc669f2015-01-20 16:32:41 +0800107
108 tst_resm(TPASS, "Test %s success.", TCID);
Zeng Linggangea392772015-01-21 11:11:58 +0800109}
Zeng Linggang5dc669f2015-01-20 16:32:41 +0800110
Zeng Linggangea392772015-01-21 11:11:58 +0800111static void cleanup(void)
112{
Chris Dearmanec6edca2012-10-17 19:54:01 -0700113}