summaryrefslogtreecommitdiff
path: root/mail/milter-regex/files/patch-milter-regex.c
blob: f953d92c6bd0ad7dc7c151be3fc6a4d51d63241c (plain) (blame)
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
*** milter-regex.c.orig	Sun Mar  6 06:42:53 2005
--- milter-regex.c	Wed Sep  6 16:00:00 2006
***************
*** 86,93 ****
  static void		 usage(const char *);
  static void		 msg(int, struct context *, const char *, ...);
  
  #define USER		"_milter-regex"
  #define OCONN		"unix:/var/spool/milter-regex/sock"
  #define RCODE_REJECT	"554"
  #define RCODE_TEMPFAIL	"451"
  #define XCODE_REJECT	"5.7.1"
--- 86,94 ----
  static void		 usage(const char *);
  static void		 msg(int, struct context *, const char *, ...);
  
  #define USER		"_milter-regex"
  #define OCONN		"unix:/var/spool/milter-regex/sock"
+ #define OPID		"/var/spool/milter-regex/milter-regex.pid"
  #define RCODE_REJECT	"554"
  #define RCODE_TEMPFAIL	"451"
  #define XCODE_REJECT	"5.7.1"
***************
*** 556,565 ****
--- 557,570 ----
  {
  	int ch;
  	const char *oconn = OCONN;
+ 	const char *pid_file_name = OPID;
  	const char *user = USER;
  	sfsistat r = MI_FAILURE;
  	const char *ofile = NULL;
  
+ 	pid_t pid;
+ 	FILE *pid_fd = NULL;
+ 
  	tzset();
  	openlog("milter-regex", LOG_PID | LOG_NDELAY, LOG_DAEMON);
  
***************
*** 577,582 ****
--- 582,590 ----
  		case 'u':
  			user = optarg;
  			break;
+ 		case 'r':
+ 			pid_file_name = optarg;
+ 			break;
  		default:
  			usage(argv[0]);
  		}
***************
*** 638,646 ****
  		fprintf(stderr, "daemon: %s\n", strerror(errno));
  		goto done;
  	}
- 	umask(0177);
  
  	msg(LOG_INFO, NULL, "started: %s", rcsid);
  	r = smfi_main();
  	if (r != MI_SUCCESS)
  		msg(LOG_ERR, NULL, "smfi_main: terminating due to error");
--- 646,667 ----
  		fprintf(stderr, "daemon: %s\n", strerror(errno));
  		goto done;
  	}
  
  	msg(LOG_INFO, NULL, "started: %s", rcsid);
+ 
+ 	umask(0006);
+ 
+ 	if((pid_fd = fopen(pid_file_name, "w")) == NULL) {
+ 		msg(LOG_ERR, NULL, "can't open file: %s", pid_file_name);
+ 		goto done;
+ 	} else {
+ 		pid = getpid();
+ 		fprintf(pid_fd, "%d", (int) pid);
+ 		fclose(pid_fd);
+ 	}
+ 
+ 	umask(0177);
+ 
  	r = smfi_main();
  	if (r != MI_SUCCESS)
  		msg(LOG_ERR, NULL, "smfi_main: terminating due to error");