- Carry over RES_OPTIONS from ifcfg-ethX files to /etc/resolv.conf
(#202923) - Clean up Requires tags for devel packages
This commit is contained in:
		
							parent
							
								
									821e00dcda
								
							
						
					
					
						commit
						d016d23988
					
				
							
								
								
									
										508
									
								
								dhcp-4.0.0-O_CLOEXEC.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										508
									
								
								dhcp-4.0.0-O_CLOEXEC.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,508 @@ | ||||
| diff -up dhcp-4.0.0//client/clparse.c.cloexec dhcp-4.0.0//client/clparse.c
 | ||||
| --- dhcp-4.0.0//client/clparse.c.cloexec	2008-07-01 15:36:54.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//client/clparse.c	2008-07-01 17:02:38.000000000 -1000
 | ||||
| @@ -221,7 +221,7 @@ int read_client_conf_file (const char *n
 | ||||
|  	int token; | ||||
|  	isc_result_t status; | ||||
|  	 | ||||
| -	if ((file = open (name, O_RDONLY)) < 0)
 | ||||
| +	if ((file = open (name, O_RDONLY | O_CLOEXEC)) < 0)
 | ||||
|  		return uerr2isc (errno); | ||||
|   | ||||
|  	cfile = (struct parse *)0; | ||||
| @@ -258,7 +258,7 @@ void read_client_leases ()
 | ||||
|   | ||||
|  	/* Open the lease file.   If we can't open it, just return - | ||||
|  	   we can safely trust the server to remember our state. */ | ||||
| -	if ((file = open (path_dhclient_db, O_RDONLY)) < 0)
 | ||||
| +	if ((file = open (path_dhclient_db, O_RDONLY | O_CLOEXEC)) < 0)
 | ||||
|  		return; | ||||
|  	cfile = (struct parse *)0; | ||||
|  	/* new_parse() may fail if the file is of zero length. */ | ||||
| diff -up dhcp-4.0.0//client/dhclient.c.cloexec dhcp-4.0.0//client/dhclient.c
 | ||||
| --- dhcp-4.0.0//client/dhclient.c.cloexec	2008-07-01 15:36:54.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//client/dhclient.c	2008-07-01 17:22:06.000000000 -1000
 | ||||
| @@ -162,11 +162,11 @@ int main(int argc, char **argv, char **e
 | ||||
|          /* Make sure that file descriptors 0 (stdin), 1, (stdout), and | ||||
|             2 (stderr) are open. To do this, we assume that when we | ||||
|             open a file the lowest available file descriptor is used. */ | ||||
| -        fd = open("/dev/null", O_RDWR);
 | ||||
| +        fd = open("/dev/null", O_RDWR | O_CLOEXEC);
 | ||||
|          if (fd == 0) | ||||
| -                fd = open("/dev/null", O_RDWR);
 | ||||
| +                fd = open("/dev/null", O_RDWR | O_CLOEXEC);
 | ||||
|          if (fd == 1) | ||||
| -                fd = open("/dev/null", O_RDWR);
 | ||||
| +                fd = open("/dev/null", O_RDWR | O_CLOEXEC);
 | ||||
|          if (fd == 2) | ||||
|                  log_perror = 0; /* No sense logging to /dev/null. */ | ||||
|          else if (fd != -1) | ||||
| @@ -442,6 +442,19 @@ int main(int argc, char **argv, char **e
 | ||||
|   | ||||
|  		oldpid = 0; | ||||
|  		if ((pidfd = fopen(path_dhclient_pid, "r")) != NULL) { | ||||
| +			int fn = fileno(pidfd);
 | ||||
| +			int flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +			if (flags == -1) {
 | ||||
| +				log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +			} else {
 | ||||
| +			    flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +				if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +					log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +				}
 | ||||
| +			}
 | ||||
| +
 | ||||
|  			e = fscanf(pidfd, "%ld\n", &temp); | ||||
|  			oldpid = (pid_t)temp; | ||||
|   | ||||
| @@ -484,6 +497,19 @@ int main(int argc, char **argv, char **e
 | ||||
|  					sprintf(new_path_dhclient_pid + pfx, "-%s.pid", ip->name); | ||||
|   | ||||
|  					if ((pidfd = fopen(new_path_dhclient_pid, "r")) != NULL) { | ||||
| +						int fn = fileno(pidfd);
 | ||||
| +						int flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +						if (flags == -1) {
 | ||||
| +							log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +						} else {
 | ||||
| +							flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +							if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +								log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +							}
 | ||||
| +						}
 | ||||
| +
 | ||||
|  						e = fscanf(pidfd, "%ld\n", &temp); | ||||
|  						oldpid = (pid_t)temp; | ||||
|   | ||||
| @@ -509,6 +535,19 @@ int main(int argc, char **argv, char **e
 | ||||
|  		char procfn[256] = ""; | ||||
|   | ||||
|  		if ((pidfp = fopen(path_dhclient_pid, "r")) != NULL) { | ||||
| +			int fn = fileno(pidfd);
 | ||||
| +			int flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +			if (flags == -1) {
 | ||||
| +				log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +			} else {
 | ||||
| +				flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +				if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +					log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +				}
 | ||||
| +			}
 | ||||
| +
 | ||||
|  			if ((fscanf(pidfp, "%ld", &temp)==1) && ((dhcpid=(pid_t)temp) > 0)) { | ||||
|  				snprintf(procfn,256,"/proc/%u",dhcpid); | ||||
|  				dhc_running = (access(procfn, F_OK) == 0);           | ||||
| @@ -2896,6 +2935,7 @@ int leases_written = 0;
 | ||||
|   | ||||
|  void rewrite_client_leases () | ||||
|  { | ||||
| +	int fn, flags;
 | ||||
|  	struct interface_info *ip; | ||||
|  	struct client_state *client; | ||||
|  	struct client_lease *lp; | ||||
| @@ -2908,9 +2948,17 @@ void rewrite_client_leases ()
 | ||||
|  		return; | ||||
|  	} | ||||
|   | ||||
| -	if (fcntl(leaseFile, F_SETFD, FD_CLOEXEC) == -1) {
 | ||||
| -		log_error ("failed to set close-on-exec for %s", path_dhclient_db);
 | ||||
| -		return;
 | ||||
| +	fn = fileno(leaseFile);
 | ||||
| +	flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +	if (flags == -1) {
 | ||||
| +		log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +	} else {
 | ||||
| +		flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +		if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +			log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +		}
 | ||||
|  	} | ||||
|   | ||||
|  	/* If there is a default duid, write it out. */ | ||||
| @@ -3005,20 +3053,30 @@ static isc_result_t
 | ||||
|  write_duid(struct data_string *duid) | ||||
|  { | ||||
|  	char *str; | ||||
| -	int stat;
 | ||||
| +	int stat, fn, flags;
 | ||||
|   | ||||
|  	if ((duid == NULL) || (duid->len <= 2)) | ||||
|  		return ISC_R_INVALIDARG; | ||||
|   | ||||
|  	if (leaseFile == NULL) {	/* XXX? */ | ||||
|  		leaseFile = fopen(path_dhclient_db, "w"); | ||||
| +
 | ||||
|  		if (leaseFile == NULL) { | ||||
|  			log_error("can't create %s: %m", path_dhclient_db); | ||||
|  			return ISC_R_IOERROR; | ||||
|  		} | ||||
| -		if (fcntl(leaseFile, F_SETFD, FD_CLOEXEC) == -1) {
 | ||||
| -			log_error ("failed to set close-on-exec for %s", path_dhclient_db);
 | ||||
| -			return ISC_R_IOERROR;
 | ||||
| +
 | ||||
| +		fn = fileno(leaseFile);
 | ||||
| +		flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +		if (flags == -1) {
 | ||||
| +			log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +		} else {
 | ||||
| +			flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +			if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +				log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +			}
 | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| @@ -3049,7 +3107,7 @@ write_client6_lease(struct client_state 
 | ||||
|  { | ||||
|  	struct dhc6_ia *ia; | ||||
|  	struct dhc6_addr *addr; | ||||
| -	int stat;
 | ||||
| +	int stat, fn, flags;
 | ||||
|   | ||||
|  	/* This should include the current lease. */ | ||||
|  	if (!rewrite && (leases_written++ > 20)) { | ||||
| @@ -3063,13 +3121,23 @@ write_client6_lease(struct client_state 
 | ||||
|   | ||||
|  	if (leaseFile == NULL) {	/* XXX? */ | ||||
|  		leaseFile = fopen(path_dhclient_db, "w"); | ||||
| +
 | ||||
|  		if (leaseFile == NULL) { | ||||
|  			log_error("can't create %s: %m", path_dhclient_db); | ||||
|  			return ISC_R_IOERROR; | ||||
|  		} | ||||
| -		if (fcntl(leaseFile, F_SETFD, FD_CLOEXEC) == -1) {
 | ||||
| -			log_error ("failed to set close-on-exec for %s", path_dhclient_db);
 | ||||
| -			return ISC_R_IOERROR;
 | ||||
| +
 | ||||
| +		fn = fileno(leaseFile);
 | ||||
| +		flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +		if (flags == -1) {
 | ||||
| +			log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +		} else {
 | ||||
| +			flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +			if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +				log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +			}
 | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| @@ -3152,7 +3220,7 @@ int write_client_lease (client, lease, r
 | ||||
|  	int makesure; | ||||
|  { | ||||
|  	struct data_string ds; | ||||
| -	int errors = 0;
 | ||||
| +	int errors = 0, fn, flags;
 | ||||
|  	char *s; | ||||
|  	const char *tval; | ||||
|   | ||||
| @@ -3170,13 +3238,23 @@ int write_client_lease (client, lease, r
 | ||||
|   | ||||
|  	if (leaseFile == NULL) {	/* XXX */ | ||||
|  		leaseFile = fopen (path_dhclient_db, "w"); | ||||
| +
 | ||||
|  		if (leaseFile == NULL) { | ||||
|  			log_error ("can't create %s: %m", path_dhclient_db); | ||||
|  			return 0; | ||||
|  		} | ||||
| -		if (fcntl(leaseFile, F_SETFD, FD_CLOEXEC) == -1) {
 | ||||
| -			log_error ("failed to set close-on-exec for %s", path_dhclient_db);
 | ||||
| -			return ISC_R_IOERROR;
 | ||||
| +
 | ||||
| +		fn = fileno(leaseFile);
 | ||||
| +		flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +		if (flags == -1) {
 | ||||
| +			log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +		} else {
 | ||||
| +			flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +			if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +				log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +			}
 | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| @@ -3675,9 +3753,9 @@ void go_daemon ()
 | ||||
|          close(2); | ||||
|   | ||||
|  	/* Reopen them on /dev/null. */ | ||||
| -	open("/dev/null", O_RDWR);
 | ||||
| -	open("/dev/null", O_RDWR);
 | ||||
| -	open("/dev/null", O_RDWR);
 | ||||
| +	open("/dev/null", O_RDWR | O_CLOEXEC);
 | ||||
| +	open("/dev/null", O_RDWR | O_CLOEXEC);
 | ||||
| +	open("/dev/null", O_RDWR | O_CLOEXEC);
 | ||||
|   | ||||
|  	write_client_pid_file (); | ||||
|   | ||||
| @@ -3689,7 +3767,7 @@ void write_client_pid_file ()
 | ||||
|  	FILE *pf; | ||||
|  	int pfdesc; | ||||
|   | ||||
| -	pfdesc = open (path_dhclient_pid, O_CREAT | O_TRUNC | O_WRONLY, 0644);
 | ||||
| +	pfdesc = open (path_dhclient_pid, O_CREAT | O_TRUNC | O_WRONLY | O_CLOEXEC, 0644);
 | ||||
|   | ||||
|  	if (pfdesc < 0) { | ||||
|  		log_error ("Can't create %s: %m", path_dhclient_pid); | ||||
| diff -up dhcp-4.0.0//common/bpf.c.cloexec dhcp-4.0.0//common/bpf.c
 | ||||
| --- dhcp-4.0.0//common/bpf.c.cloexec	2008-07-01 15:36:54.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//common/bpf.c	2008-07-01 17:23:40.000000000 -1000
 | ||||
| @@ -94,7 +94,7 @@ int if_register_bpf (info)
 | ||||
|  	for (b = 0; 1; b++) { | ||||
|  		/* %Audit% 31 bytes max. %2004.06.17,Safe% */ | ||||
|  		sprintf(filename, BPF_FORMAT, b); | ||||
| -		sock = open (filename, O_RDWR, 0);
 | ||||
| +		sock = open (filename, O_RDWR | O_CLOEXEC, 0);
 | ||||
|  		if (sock < 0) { | ||||
|  			if (errno == EBUSY) { | ||||
|  				continue; | ||||
| diff -up dhcp-4.0.0//common/discover.c.cloexec dhcp-4.0.0//common/discover.c
 | ||||
| --- dhcp-4.0.0//common/discover.c.cloexec	2008-07-01 15:36:54.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//common/discover.c	2008-07-01 17:26:03.000000000 -1000
 | ||||
| @@ -387,6 +387,8 @@ begin_iface_scan(struct iface_conf_list 
 | ||||
|  	char buf[256]; | ||||
|  	int len; | ||||
|  	int i; | ||||
| +	int fn;
 | ||||
| +	int flags;
 | ||||
|   | ||||
|  	ifaces->fp = fopen("/proc/net/dev", "r"); | ||||
|  	if (ifaces->fp == NULL) { | ||||
| @@ -394,6 +396,19 @@ begin_iface_scan(struct iface_conf_list 
 | ||||
|  		return 0; | ||||
|  	} | ||||
|   | ||||
| +	fn = fileno(ifaces->fp);
 | ||||
| +	flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +	if (flags == -1) {
 | ||||
| +		log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +	} else {
 | ||||
| +		flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +		if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +			log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +		}
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	/* | ||||
|  	 * The first 2 lines are header information, so read and ignore them. | ||||
|  	 */ | ||||
| @@ -432,6 +447,19 @@ begin_iface_scan(struct iface_conf_list 
 | ||||
|  		ifaces->fp = NULL; | ||||
|  		return 0; | ||||
|  	} | ||||
| +
 | ||||
| +	int fn = fileno(ifaces->fp6);
 | ||||
| +	int flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +	if (flags == -1) {
 | ||||
| +		log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +	} else {
 | ||||
| +		flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +		if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +			log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +		}
 | ||||
| +	}
 | ||||
|  #endif | ||||
|   | ||||
|  	return 1; | ||||
| diff -up dhcp-4.0.0//common/dlpi.c.cloexec dhcp-4.0.0//common/dlpi.c
 | ||||
| --- dhcp-4.0.0//common/dlpi.c.cloexec	2008-07-01 15:36:54.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//common/dlpi.c	2008-07-01 17:26:31.000000000 -1000
 | ||||
| @@ -795,7 +795,7 @@ dlpiopen(const char *ifname) {
 | ||||
|  	} | ||||
|  	*dp = '\0'; | ||||
|  	 | ||||
| -	return open (devname, O_RDWR, 0);
 | ||||
| +	return open (devname, O_RDWR | O_CLOEXEC, 0);
 | ||||
|  } | ||||
|   | ||||
|  /* | ||||
| diff -up dhcp-4.0.0//common/nit.c.cloexec dhcp-4.0.0//common/nit.c
 | ||||
| --- dhcp-4.0.0//common/nit.c.cloexec	2008-07-01 15:36:54.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//common/nit.c	2008-07-01 17:26:41.000000000 -1000
 | ||||
| @@ -81,7 +81,7 @@ int if_register_nit (info)
 | ||||
|  	struct strioctl sio; | ||||
|   | ||||
|  	/* Open a NIT device */ | ||||
| -	sock = open ("/dev/nit", O_RDWR);
 | ||||
| +	sock = open ("/dev/nit", O_RDWR | O_CLOEXEC);
 | ||||
|  	if (sock < 0) | ||||
|  		log_fatal ("Can't open NIT device for %s: %m", info -> name); | ||||
|   | ||||
| diff -up dhcp-4.0.0//common/resolv.c.cloexec dhcp-4.0.0//common/resolv.c
 | ||||
| --- dhcp-4.0.0//common/resolv.c.cloexec	2007-11-30 11:51:43.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//common/resolv.c	2008-07-01 17:26:54.000000000 -1000
 | ||||
| @@ -48,7 +48,7 @@ void read_resolv_conf (parse_time)
 | ||||
|  	struct name_server *sp, *sl, *ns; | ||||
|  	struct domain_search_list *dp, *dl, *nd; | ||||
|   | ||||
| -	if ((file = open (path_resolv_conf, O_RDONLY)) < 0) {
 | ||||
| +	if ((file = open (path_resolv_conf, O_RDONLY | O_CLOEXEC)) < 0) {
 | ||||
|  		log_error ("Can't open %s: %m", path_resolv_conf); | ||||
|  		return; | ||||
|  	} | ||||
| diff -up dhcp-4.0.0//common/upf.c.cloexec dhcp-4.0.0//common/upf.c
 | ||||
| --- dhcp-4.0.0//common/upf.c.cloexec	2008-07-01 15:36:54.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//common/upf.c	2008-07-01 17:27:04.000000000 -1000
 | ||||
| @@ -77,7 +77,7 @@ int if_register_upf (info)
 | ||||
|  		/* %Audit% Cannot exceed 36 bytes. %2004.06.17,Safe% */ | ||||
|  		sprintf(filename, "/dev/pf/pfilt%d", b); | ||||
|   | ||||
| -		sock = open (filename, O_RDWR, 0);
 | ||||
| +		sock = open (filename, O_RDWR | O_CLOEXEC, 0);
 | ||||
|  		if (sock < 0) { | ||||
|  			if (errno == EBUSY) { | ||||
|  				continue; | ||||
| diff -up dhcp-4.0.0//dst/dst_support.c.cloexec dhcp-4.0.0//dst/dst_support.c
 | ||||
| --- dhcp-4.0.0//dst/dst_support.c.cloexec	2007-12-05 14:50:22.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//dst/dst_support.c	2008-07-01 17:31:47.000000000 -1000
 | ||||
| @@ -426,6 +426,8 @@ dst_s_fopen(const char *filename, const 
 | ||||
|  	FILE *fp; | ||||
|  	char pathname[PATH_MAX]; | ||||
|  	unsigned plen = sizeof(pathname); | ||||
| +	int fn;
 | ||||
| +	int flags;
 | ||||
|   | ||||
|  	if (*dst_path != '\0') { | ||||
|  		strcpy(pathname, dst_path); | ||||
| @@ -442,6 +444,15 @@ dst_s_fopen(const char *filename, const 
 | ||||
|  	fp = fopen(pathname, mode); | ||||
|  	if (perm) | ||||
|  		chmod(pathname, perm); | ||||
| +
 | ||||
| +	fn = fileno(fp);
 | ||||
| +	flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +	if (flags != -1) {
 | ||||
| +		flags |= FD_CLOEXEC;
 | ||||
| +		flags = fcntl(fn, F_SETFD, flags);
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	return (fp); | ||||
|  } | ||||
|   | ||||
| diff -up dhcp-4.0.0//dst/prandom.c.cloexec dhcp-4.0.0//dst/prandom.c
 | ||||
| --- dhcp-4.0.0//dst/prandom.c.cloexec	2007-11-30 11:51:43.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//dst/prandom.c	2008-07-01 17:35:55.000000000 -1000
 | ||||
| @@ -267,7 +267,7 @@ get_dev_random(u_char *output, unsigned 
 | ||||
|   | ||||
|  	s = stat("/dev/random", &st); | ||||
|  	if (s == 0 && S_ISCHR(st.st_mode)) { | ||||
| -		if ((fd = open("/dev/random", O_RDONLY | O_NONBLOCK)) != -1) {
 | ||||
| +		if ((fd = open("/dev/random", O_RDONLY | O_NONBLOCK | O_CLOEXEC)) != -1) {
 | ||||
|  			if ((n = read(fd, output, size)) < 0) | ||||
|  				n = 0; | ||||
|  			close(fd); | ||||
| @@ -480,6 +480,12 @@ digest_file(dst_work *work) 
 | ||||
|  	} | ||||
|  	if ((fp = fopen(name, "r")) == NULL)  | ||||
|  		return (0); | ||||
| +	int fn = fileno(fp);
 | ||||
| +	int flags = fcntl(fn, F_GETFD);
 | ||||
| +	if (flags != -1) {
 | ||||
| +		flags |= FD_CLOEXEC;
 | ||||
| +		flags = fcntl(fn, F_SETFD, flags);
 | ||||
| +	}
 | ||||
|  	for (no = 0; (i = fread(buf, sizeof(*buf), sizeof(buf), fp)) > 0;  | ||||
|  	     no += i)  | ||||
|  		dst_sign_data(SIG_MODE_UPDATE, work->file_digest, &ctx,  | ||||
| diff -up dhcp-4.0.0//minires/res_init.c.cloexec dhcp-4.0.0//minires/res_init.c
 | ||||
| --- dhcp-4.0.0//minires/res_init.c.cloexec	2007-10-01 04:47:35.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//minires/res_init.c	2008-07-01 17:44:26.000000000 -1000
 | ||||
| @@ -235,6 +235,14 @@ minires_vinit(res_state statp, int prein
 | ||||
|  	 line[sizeof(name) - 1] == '\t')) | ||||
|   | ||||
|  	if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) { | ||||
| +		int fn = fileno(fp);
 | ||||
| +		int flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +		if (flags != -1) {
 | ||||
| +			flags |= FD_CLOEXEC;
 | ||||
| +			flags = fcntl(fn, F_SETFD, flags);
 | ||||
| +		}
 | ||||
| +
 | ||||
|  	    /* read the config file */ | ||||
|  	    while (fgets(buf, sizeof(buf), fp) != NULL) { | ||||
|  		/* skip comments */ | ||||
| diff -up dhcp-4.0.0//minires/res_query.c.cloexec dhcp-4.0.0//minires/res_query.c
 | ||||
| --- dhcp-4.0.0//minires/res_query.c.cloexec	2007-09-05 07:32:10.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//minires/res_query.c	2008-07-01 17:46:04.000000000 -1000
 | ||||
| @@ -387,12 +387,19 @@ res_hostalias(const res_state statp, con
 | ||||
|          unsigned char *cp1, *cp2; | ||||
|  	char buf[BUFSIZ]; | ||||
|  	FILE *fp; | ||||
| +	int fn, flags;
 | ||||
|   | ||||
|  	if (statp->options & RES_NOALIASES) | ||||
|  		return (NULL); | ||||
|  	file = getenv("HOSTALIASES"); | ||||
|  	if (file == NULL || (fp = fopen(file, "r")) == NULL) | ||||
|  		return (NULL); | ||||
| +	fn = fileno(fp);
 | ||||
| +	flags = fcntl(fn, F_GETFD);
 | ||||
| +	if (flags != -1) {
 | ||||
| +		flags |= FD_CLOEXEC;
 | ||||
| +		flags = fcntl(fn, F_SETFD, flags);
 | ||||
| +	}
 | ||||
|  	setbuf(fp, NULL); | ||||
|  	buf[sizeof(buf) - 1] = '\0'; | ||||
|  	while (fgets(buf, sizeof(buf), fp)) { | ||||
| diff -up dhcp-4.0.0//omapip/trace.c.cloexec dhcp-4.0.0//omapip/trace.c
 | ||||
| --- dhcp-4.0.0//omapip/trace.c.cloexec	2007-07-12 20:43:42.000000000 -1000
 | ||||
| +++ dhcp-4.0.0//omapip/trace.c	2008-07-01 17:29:46.000000000 -1000
 | ||||
| @@ -140,10 +140,10 @@ isc_result_t trace_begin (const char *fi
 | ||||
|  		return ISC_R_INVALIDARG; | ||||
|  	} | ||||
|   | ||||
| -	traceoutfile = open (filename, O_CREAT | O_WRONLY | O_EXCL, 0600);
 | ||||
| +	traceoutfile = open (filename, O_CREAT | O_WRONLY | O_EXCL | O_CLOEXEC, 0600);
 | ||||
|  	if (traceoutfile < 0 && errno == EEXIST) { | ||||
|  		log_error ("WARNING: Overwriting trace file \"%s\"", filename); | ||||
| -		traceoutfile = open (filename, O_WRONLY | O_EXCL, 0600);
 | ||||
| +		traceoutfile = open (filename, O_WRONLY | O_EXCL | O_CLOEXEC, 0600);
 | ||||
|  	} | ||||
|   | ||||
|  	if (traceoutfile < 0) { | ||||
| @@ -428,12 +428,28 @@ void trace_file_replay (const char *file
 | ||||
|  	trace_type_t *ttype = (trace_type_t *)0; | ||||
|  	isc_result_t result; | ||||
|  	int len; | ||||
| +	int fn;
 | ||||
| +	int flags;
 | ||||
|   | ||||
|  	traceinfile = fopen (filename, "r"); | ||||
|  	if (!traceinfile) { | ||||
|  		log_error ("Can't open tracefile %s: %m", filename); | ||||
|  		return; | ||||
|  	} | ||||
| +
 | ||||
| +	fn = fileno(traceinfile);
 | ||||
| +	flags = fcntl(fn, F_GETFD);
 | ||||
| +
 | ||||
| +	if (flags == -1) {
 | ||||
| +		log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +	} else {
 | ||||
| +		flags |= FD_CLOEXEC;
 | ||||
| +
 | ||||
| +		if (fcntl(fn, F_SETFD, flags) == -1) {
 | ||||
| +			log_error("%s (%d): %s\n", __func__, __LINE__, strerror(errno));
 | ||||
| +		}
 | ||||
| +	}
 | ||||
| +
 | ||||
|  #if defined (HAVE_SETFD) | ||||
|  	if (fcntl (fileno (traceinfile), F_SETFD, 1) < 0) | ||||
|  		log_error ("Can't set close-on-exec on %s: %m", filename); | ||||
							
								
								
									
										11
									
								
								dhcp.spec
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								dhcp.spec
									
									
									
									
									
								
							| @ -4,7 +4,7 @@ | ||||
| Summary:  DHCP (Dynamic Host Configuration Protocol) server and relay agent | ||||
| Name:     dhcp | ||||
| Version:  4.0.0 | ||||
| Release:  16%{?dist} | ||||
| Release:  17%{?dist} | ||||
| # NEVER CHANGE THE EPOCH on this package.  The previous maintainer (prior to | ||||
| # dcantrell maintaining the package) made incorrect use of the epoch and | ||||
| # that's why it is at 12 now.  It should have never been used, but it was. | ||||
| @ -45,6 +45,7 @@ Patch15:  %{name}-4.0.0-paths.patch | ||||
| Patch16:  %{name}-4.0.0-NetworkManager-crash.patch | ||||
| Patch17:  %{name}-4.0.0-selinux.patch | ||||
| Patch18:  %{name}-4.0.0-libdhcp4client.patch | ||||
| Patch19:  %{name}-4.0.0-O_CLOEXEC.patch | ||||
| 
 | ||||
| BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||
| BuildRequires: autoconf | ||||
| @ -91,6 +92,7 @@ provides the ISC DHCP client daemon. | ||||
| %package devel | ||||
| Summary: Development headers and libraries for interfacing to the DHCP server | ||||
| Group: Development/Libraries | ||||
| Requires: %{name} = %{epoch}:%{version}-%{release} | ||||
| 
 | ||||
| %description devel | ||||
| Header files and API documentation for using the ISC DHCP libraries.  The | ||||
| @ -194,6 +196,9 @@ client library. | ||||
| # Add the libdhcp4client target (library version of dhclient) | ||||
| %patch18 -p1 | ||||
| 
 | ||||
| # Make sure all open file descriptors are closed-on-exec for SELinux | ||||
| %patch19 -p1 | ||||
| 
 | ||||
| # Copy in documentation and example scripts for LDAP patch to dhcpd | ||||
| %{__install} -p -m 0644 %{SOURCE5} . | ||||
| %{__install} -p -m 0644 %{SOURCE6} doc/ | ||||
| @ -422,6 +427,10 @@ fi | ||||
| %{_libdir}/libdhcp4client.so | ||||
| 
 | ||||
| %changelog | ||||
| * Thu Jul 24 2008 David Cantrell <dcantrell@redhat.com> - 12:4.0.0-17 | ||||
| - Carry over RES_OPTIONS from ifcfg-ethX files to /etc/resolv.conf (#202923) | ||||
| - Clean up Requires tags for devel packages | ||||
| 
 | ||||
| * Sat Jun 21 2008 David Cantrell <dcantrell@redhat.com> - 12:4.0.0-16 | ||||
| - Remove instaces of \032 in domain search option (#450042) | ||||
| - Make 'service dhcpd configtest' display text indicating the status | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user