xtools

Check-in [c6253f5282]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Added auth to xserver
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256:c6253f528279f9c144280129fa116c27a87ad638c29750abfac65ec4d0093388
User & Date: jmcclure 2018-01-04 21:35:11
Context
2018-04-15
01:37
updated urls in info.html; replaced wmutil with muswm; key forwarding added to tmuxwm check-in: 2510850a62 user: jmcclure tags: trunk
2018-01-04
21:35
Added auth to xserver check-in: c6253f5282 user: jmcclure tags: trunk
03:16
Typo check-in: a44a985780 user: jmcclure tags: trunk
Changes

Changes to xi.c.

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
static volatile int xrunning = 0;

void handler(int sig) {
	if (sig == SIGUSR1) xrunning = 1;
	if (sig == SIGCHLD || sig == SIGTERM) xrunning = 0;
}

int server(const char *dpy, const char *tty) {
	const char *xorg = "/usr/lib/xorg-server/Xorg";
	int pid;
	if ((pid=fork()) < 0) exit(1);
	else if (pid > 0) return pid;
	signal(SIGTTIN, SIG_IGN);
	signal(SIGTTOU, SIG_IGN);
	signal(SIGUSR1, SIG_IGN);
	execl(xorg, xorg, dpy, tty, "-keeptty", "-nolisten", "tcp", "-quiet", NULL);
	_exit(2);
}

int client(const char *dpy, const char *wm) {
	int pid;
	if ((pid=fork()) < 0) exit(3);
	else if (pid > 0) return pid;
	char xauth[PATH_MAX];
	snprintf(xauth, PATH_MAX, "%s/%s", getenv("HOME"), ".Xauthority");
	setenv("XAUTHORITY", xauth, 1);
	setenv("DISPLAY", dpy, 1);
	execlp(wm, wm, NULL);
	_exit(4);
}

int main(int argc, const char **argv) {
................................................................................
	struct vt_stat vtstat;
	if (ioctl(0, VT_GETSTATE, &vtstat)) {
		perror("get_vt");
		return 1;
	}
	char dpy[] = { ':', '0' + vtstat.v_active, 0 };
	char tty[] = { 'v', 't', '0' + vtstat.v_active, 0 };



	struct sigaction sa = { 0, 0, 0, 0, 0 };
	sa.sa_handler = handler;
	sigemptyset(&sa.sa_mask);
	sa.sa_flags = 0;
	sigaction(SIGUSR1, &sa, NULL);
	sigaction(SIGCHLD, &sa, NULL);
	sigaction(SIGTERM, &sa, NULL);

	int xpid = server(dpy, tty);
	while (!xrunning) pause();
	int cpid = client(dpy, (argc > 1 ? argv[1] : ".xirc" ));
	while (xrunning) pause();

	kill(cpid, SIGTERM);
	waitpid(cpid, NULL, 0);
	kill(xpid, SIGTERM);
	waitpid(xpid, NULL, 0);
	return 0;
}








|







|



|



<
<







 







>
>









|

|








<
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

static volatile int xrunning = 0;

void handler(int sig) {
	if (sig == SIGUSR1) xrunning = 1;
	if (sig == SIGCHLD || sig == SIGTERM) xrunning = 0;
}

int server(const char *dpy, const char *tty, const char *xauth) {
	const char *xorg = "/usr/lib/xorg-server/Xorg";
	int pid;
	if ((pid=fork()) < 0) exit(1);
	else if (pid > 0) return pid;
	signal(SIGTTIN, SIG_IGN);
	signal(SIGTTOU, SIG_IGN);
	signal(SIGUSR1, SIG_IGN);
	execl(xorg, xorg, dpy, tty, "-keeptty", "-nolisten", "tcp", "-quiet", "-auth", xauth, NULL);
	_exit(2);
}

int client(const char *dpy, const char *wm, const char *xauth) {
	int pid;
	if ((pid=fork()) < 0) exit(3);
	else if (pid > 0) return pid;


	setenv("XAUTHORITY", xauth, 1);
	setenv("DISPLAY", dpy, 1);
	execlp(wm, wm, NULL);
	_exit(4);
}

int main(int argc, const char **argv) {
................................................................................
	struct vt_stat vtstat;
	if (ioctl(0, VT_GETSTATE, &vtstat)) {
		perror("get_vt");
		return 1;
	}
	char dpy[] = { ':', '0' + vtstat.v_active, 0 };
	char tty[] = { 'v', 't', '0' + vtstat.v_active, 0 };
	char xauth[PATH_MAX];
	snprintf(xauth, PATH_MAX, "%s/%s", getenv("HOME"), ".Xauthority");

	struct sigaction sa = { 0, 0, 0, 0, 0 };
	sa.sa_handler = handler;
	sigemptyset(&sa.sa_mask);
	sa.sa_flags = 0;
	sigaction(SIGUSR1, &sa, NULL);
	sigaction(SIGCHLD, &sa, NULL);
	sigaction(SIGTERM, &sa, NULL);

	int xpid = server(dpy, tty, xauth);
	while (!xrunning) pause();
	int cpid = client(dpy, (argc > 1 ? argv[1] : ".xirc" ), xauth);
	while (xrunning) pause();

	kill(cpid, SIGTERM);
	waitpid(cpid, NULL, 0);
	kill(xpid, SIGTERM);
	waitpid(xpid, NULL, 0);
	return 0;
}