aboutsummaryrefslogtreecommitdiff
path: root/desktop/weston/weston-7.0.0-nopam.patch
blob: 8ad7b3639c9de10324260f4687b70e550d73a015 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
diff -Naur weston-7.0.0.orig/libweston/meson.build weston-7.0.0/libweston/meson.build
--- weston-7.0.0.orig/libweston/meson.build	2019-08-23 16:59:16.000000000 -0400
+++ weston-7.0.0/libweston/meson.build	2019-10-17 22:22:55.415927653 -0400
@@ -199,16 +199,11 @@
 )
 
 if get_option('weston-launch')
-	dep_pam = cc.find_library('pam')
-
-	if not cc.has_function('pam_open_session', dependencies: dep_pam)
-		error('pam_open_session not found for weston-launch')
-	endif
 
 	executable(
 		'weston-launch',
 		'weston-launch.c',
-		dependencies: [dep_pam, systemd_dep, dep_libdrm],
+		dependencies: [systemd_dep, dep_libdrm],
 		include_directories: include_directories('..'),
 		install: true
 	)
diff -Naur weston-7.0.0.orig/libweston/weston-launch.c weston-7.0.0/libweston/weston-launch.c
--- weston-7.0.0.orig/libweston/weston-launch.c	2019-08-23 16:59:16.000000000 -0400
+++ weston-7.0.0/libweston/weston-launch.c	2019-10-17 22:52:18.991891665 -0400
@@ -51,7 +51,6 @@
 
 #include <pwd.h>
 #include <grp.h>
-#include <security/pam_appl.h>
 
 #ifdef HAVE_SYSTEMD_LOGIN
 #include <systemd/sd-login.h>
@@ -100,8 +99,6 @@
 #endif
 
 struct weston_launch {
-	struct pam_conv pc;
-	pam_handle_t *ph;
 	int tty;
 	int ttynr;
 	int sock[2];
@@ -193,47 +190,6 @@
 }
 
 static int
-pam_conversation_fn(int msg_count,
-		    const struct pam_message **messages,
-		    struct pam_response **responses,
-		    void *user_data)
-{
-	return PAM_SUCCESS;
-}
-
-static int
-setup_pam(struct weston_launch *wl)
-{
-	int err;
-
-	wl->pc.conv = pam_conversation_fn;
-	wl->pc.appdata_ptr = wl;
-
-	err = pam_start("login", wl->pw->pw_name, &wl->pc, &wl->ph);
-	if (err != PAM_SUCCESS) {
-		fprintf(stderr, "failed to start pam transaction: %d: %s\n",
-			err, pam_strerror(wl->ph, err));
-		return -1;
-	}
-
-	err = pam_set_item(wl->ph, PAM_TTY, ttyname(wl->tty));
-	if (err != PAM_SUCCESS) {
-		fprintf(stderr, "failed to set PAM_TTY item: %d: %s\n",
-			err, pam_strerror(wl->ph, err));
-		return -1;
-	}
-
-	err = pam_open_session(wl->ph, 0);
-	if (err != PAM_SUCCESS) {
-		fprintf(stderr, "failed to open pam session: %d: %s\n",
-			err, pam_strerror(wl->ph, err));
-		return -1;
-	}
-
-	return 0;
-}
-
-static int
 setup_launcher_socket(struct weston_launch *wl)
 {
 	if (socketpair(AF_LOCAL, SOCK_SEQPACKET, 0, wl->sock) < 0) {
@@ -431,14 +387,6 @@
 	close(wl->signalfd);
 	close(wl->sock[0]);
 
-	if (wl->new_user) {
-		err = pam_close_session(wl->ph, 0);
-		if (err)
-			fprintf(stderr, "pam_close_session failed: %d: %s\n",
-				err, pam_strerror(wl->ph, err));
-		pam_end(wl->ph, err);
-	}
-
 	if (ioctl(wl->tty, KDSKBMUTE, 0) &&
 	    ioctl(wl->tty, KDSKBMODE, wl->kb_mode))
 		fprintf(stderr, "failed to restore keyboard mode: %s\n",
@@ -660,15 +608,6 @@
 	setenv("HOME", wl->pw->pw_dir, 1);
 	setenv("SHELL", wl->pw->pw_shell, 1);
 
-	env = pam_getenvlist(wl->ph);
-	if (env) {
-		for (i = 0; env[i]; ++i) {
-			if (putenv(env[i]) != 0)
-				fprintf(stderr, "putenv %s failed\n", env[i]);
-		}
-		free(env);
-	}
-
 	/*
 	 * We open a new session, so it makes sense
 	 * to run a new login shell
@@ -739,8 +678,6 @@
 help(const char *name)
 {
 	fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
-	fprintf(stderr, "  -u, --user      Start session as specified username,\n"
-			"                  e.g. -u joe, requires root.\n");
 	fprintf(stderr, "  -t, --tty       Start session on alternative tty,\n"
 			"                  e.g. -t /dev/tty4, requires -u option.\n");
 	fprintf(stderr, "  -v, --verbose   Be verbose\n");
@@ -754,7 +691,6 @@
 	int i, c;
 	char *tty = NULL;
 	struct option opts[] = {
-		{ "user",    required_argument, NULL, 'u' },
 		{ "tty",     required_argument, NULL, 't' },
 		{ "verbose", no_argument,       NULL, 'v' },
 		{ "help",    no_argument,       NULL, 'h' },
@@ -766,11 +702,7 @@
 	while ((c = getopt_long(argc, argv, "u:t:vh", opts, &i)) != -1) {
 		switch (c) {
 		case 'u':
-			wl.new_user = optarg;
-			if (getuid() != 0) {
-				fprintf(stderr, "weston: Permission denied. -u allowed for root only\n");
-				exit(EXIT_FAILURE);
-			}
+			fprintf(stderr, "weston: -u is unsupported in this weston-launch build\n");
 			break;
 		case 't':
 			tty = optarg;
@@ -822,9 +754,6 @@
 	if (setup_tty(&wl, tty) < 0)
 		exit(EXIT_FAILURE);
 
-	if (wl.new_user && setup_pam(&wl) < 0)
-		exit(EXIT_FAILURE);
-
 	if (setup_launcher_socket(&wl) < 0)
 		exit(EXIT_FAILURE);