annotate a5.c @ 58:d5650f7361d9 draft

Abolish errors-to header.
author HIROSE Yuuji <yuuji@gentei.org>
date Mon, 25 Jun 2012 12:28:50 +0900
parents 399f24a71eb9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1 #include <stdio.h>
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2 #include <stdlib.h>
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3 #include <sys/types.h>
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4 #include <unistd.h>
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
5 #include <sys/stat.h>
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
6 #include <string.h>
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
7
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
8 #define AFTER5PATH "./after5.cgi"
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
9
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
10 int main(int argc, char *argv[])
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
11 {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
12 char *path=malloc(strlen(argv[0]));
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
13 char *p;
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
14 uid_t euid = geteuid();
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
15 struct stat st;
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
16 if (0 == euid) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
17 fputs("Do not call this program with suid 0\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
18 exit(0);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
19 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
20 strcpy(path, argv[0]);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
21 p = strrchr(path, '/');
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
22 if (p) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
23 *p = '\0';
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
24 } else {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
25 fputs("Cannot detect the directory where this program located.\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
26 exit(1);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
27 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
28
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
29 if (-1 == chdir(path)) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
30 fprintf(stderr, "Cannot chdir to %s\n", path);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
31 exit(2);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
32 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
33 if (0 > stat(AFTER5PATH, &st)) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
34 fprintf(stderr, "Cannot access %s\n", AFTER5PATH);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
35 exit(3);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
36 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
37 if (st.st_uid != euid) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
38 fputs("UID of cgi program mismatch\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
39 fputs("Do chown so that wrapper and cgi files' uid matches.\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
40 exit(4);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
41 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
42 if (0 > stat(".", &st)) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
43 fputs("Cannot stat current directory\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
44 fputs("Please ensure installed directory is readable.\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
45 exit(5);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
46 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
47 if (st.st_uid != euid) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
48 fputs("UID of directory mismatch\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
49 fputs("Do chown so that wrapper and directorys' uid matches.\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
50 exit(6);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
51 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
52 if (st.st_mode & (S_IWGRP | S_IWOTH)) {
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
53 fputs("This directory is writable for group/others.\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
54 fputs("Do chmod og-w for installed directory.\n", stderr);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
55 exit(7);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
56 }
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
57 execv("./after5.cgi", argv);
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
58 }

yatex.org