|  | @@ -203,10 +203,11 @@ int main(int argc, char **argv)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	int c, daemonize = 0;
 | 
	
		
			
				|  |  |  	uid_t uid = -1; gid_t gid = -1;
 | 
	
		
			
				|  |  | +	mode_t um = -1;
 | 
	
		
			
				|  |  |  	char *pidfilename = NULL, *sockname = NULL;
 | 
	
		
			
				|  |  |  	FILE *pidfile = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	while ((c = getopt(argc, argv, "ds:p:u:g:")) != -1) {
 | 
	
		
			
				|  |  | +	while ((c = getopt(argc, argv, "ds:p:u:g:m:")) != -1) {
 | 
	
		
			
				|  |  |  		switch (c) {
 | 
	
		
			
				|  |  |  		case 's':
 | 
	
		
			
				|  |  |  			sockname = strdup(optarg);
 | 
	
	
		
			
				|  | @@ -223,16 +224,17 @@ int main(int argc, char **argv)
 | 
	
		
			
				|  |  |  		case 'g':
 | 
	
		
			
				|  |  |  			gid = get_gid(optarg);
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  | +		case 'm':
 | 
	
		
			
				|  |  | +			um = atoi(optarg);
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if (uid != -1) setuid(uid);
 | 
	
		
			
				|  |  | -	if (gid != -1) setgid(gid);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	if (!sockname) {
 | 
	
		
			
				|  |  |  		fprintf(stderr, "%s: Missing required -s argument\n", argv[0]);
 | 
	
		
			
				|  |  |  		exit(EX_USAGE);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if (pidfilename) {
 | 
	
		
			
				|  |  |  		unlink(pidfilename);
 | 
	
		
			
				|  |  |  		pidfile = fopen(pidfilename, "w");
 | 
	
	
		
			
				|  | @@ -243,6 +245,11 @@ int main(int argc, char **argv)
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		free(pidfilename);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (uid != (uid_t)-1) setuid(uid);
 | 
	
		
			
				|  |  | +	if (gid != (gid_t)-1) setgid(gid);
 | 
	
		
			
				|  |  | +	if (um != (mode_t)-1) umask(um);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if (daemonize) {
 | 
	
		
			
				|  |  |  		if (daemon(0, 0) == -1) {
 | 
	
		
			
				|  |  |  			fprintf(stderr, "daemon() failed: %s\n", strerror(errno));
 |