View | Details | Raw Unified | Return to bug 10407
Collapse All | Expand All

(-)daemon.c (-2 / +27 lines)
Lines 25-31 Link Here
25
#include <syslog.h>
25
#include <syslog.h>
26
#include <time.h>
26
#include <time.h>
27
#include <unistd.h>
27
#include <unistd.h>
28
28
#include <errno.h>
29
#if HAVE_RPC_SVC_SOC_H == 1
29
#if HAVE_RPC_SVC_SOC_H == 1
30
# include <rpc/svc_soc.h>
30
# include <rpc/svc_soc.h>
31
#endif
31
#endif
Lines 54-59 Link Here
54
int opt_expire_writers = FALSE;
54
int opt_expire_writers = FALSE;
55
int opt_detach = TRUE;
55
int opt_detach = TRUE;
56
char *opt_exports = "/etc/exports";
56
char *opt_exports = "/etc/exports";
57
char *opt_pidfile = "/var/run/unfsd.pid";
57
int opt_cluster = FALSE;
58
int opt_cluster = FALSE;
58
char *opt_cluster_path = "/";
59
char *opt_cluster_path = "/";
59
int opt_tcponly = FALSE;
60
int opt_tcponly = FALSE;
Lines 114-120 Link Here
114
static void parse_options(int argc, char **argv)
115
static void parse_options(int argc, char **argv)
115
{
116
{
116
    int opt = 0;
117
    int opt = 0;
117
    char *optstring = "bcC:de:hl:m:n:pstuw";
118
    char *optstring = "bcC:de:hl:m:n:pstuwi:";
118
119
119
    while (opt != -1) {
120
    while (opt != -1) {
120
	opt = getopt(argc, argv, optstring);
121
	opt = getopt(argc, argv, optstring);
Lines 210-215 Link Here
210
	    case '?':
211
	    case '?':
211
		exit(1);
212
		exit(1);
212
		break;
213
		break;
214
	    case 'i':
215
		opt_pidfile = optarg;
216
		break;
213
	}
217
	}
214
    }
218
    }
215
}
219
}
Lines 256-261 Link Here
256
260
257
    backend_shutdown();
261
    backend_shutdown();
258
262
263
    // killpid
264
    fprintf(stderr, "Deleting pidfile %s\n", opt_pidfile); // ok, if fork done this mesage goes to /dev/null
265
    if (unlink(opt_pidfile) == -1) {
266
	logmsg(LOG_EMERG,"Failed to delete pidfile");
267
    }
268
259
    exit(1);
269
    exit(1);
260
}
270
}
261
271
Lines 770-775 Link Here
770
	/* no umask to not screw up create modes */
780
	/* no umask to not screw up create modes */
771
	umask(0);
781
	umask(0);
772
782
783
	// pidfile always created here - by parent if !opt_detach or by child
784
	int pid_fd = open(opt_pidfile, O_RDWR | O_CREAT, 0640);
785
	if (pid_fd < 0) {
786
	    fprintf(stderr, "Failed to open pidfile %s: %s!\n", opt_pidfile, strerror(errno));
787
	    exit(0);
788
	}
789
	if (lockf(pid_fd, F_TLOCK, 0) < 0) {
790
	    fprintf(stderr, "Failed to get a lock on pidfile %s: %s!\n", opt_pidfile, strerror(errno));
791
	    exit(0);
792
	}
793
	char str[16];
794
795
	snprintf(str, sizeof(str), "%d\n", getpid());
796
	write(pid_fd, str, strlen(str));
797
773
	/* detach from terminal */
798
	/* detach from terminal */
774
	if (opt_detach) {
799
	if (opt_detach) {
775
	    setsid();
800
	    setsid();
(-)daemon.h (+1 lines)
Lines 33-38 Link Here
33
extern int	opt_expire_writers;
33
extern int	opt_expire_writers;
34
extern int	opt_detach;
34
extern int	opt_detach;
35
extern char	*opt_exports;
35
extern char	*opt_exports;
36
extern char	*opt_pidfile;
36
extern int	opt_cluster;
37
extern int	opt_cluster;
37
extern char	*opt_cluster_path;
38
extern char	*opt_cluster_path;
38
extern int	opt_singleuser;
39
extern int	opt_singleuser;

Return to bug 10407