| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -1178,20 +1178,18 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#ifdef HAVE_PAM
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (changeuser != NULL)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (changeuser != NULL) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							pamr = pam_start("start-stop-daemon",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							    changeuser, &conv, &pamh);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							pamr = pam_start("start-stop-daemon",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							    "nobody", &conv, &pamh);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (pamr == PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							pamr = pam_acct_mgmt(pamh, PAM_SILENT);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (pamr == PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							pamr = pam_open_session(pamh, PAM_SILENT);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (pamr != PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							eerrorx("%s: pam error: %s",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							    applet, pam_strerror(pamh, pamr));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (pamr == PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								pamr = pam_acct_mgmt(pamh, PAM_SILENT);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (pamr == PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								pamr = pam_open_session(pamh, PAM_SILENT);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (pamr != PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								eerrorx("%s: pam error: %s",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									applet, pam_strerror(pamh, pamr));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (gid && setgid(gid))
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -1219,15 +1217,17 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rc_stringlist_add(env_list, environ[i++]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#ifdef HAVE_PAM
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						pamenv = (const char *const *)pam_getenvlist(pamh);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (pamenv) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							while (*pamenv) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								/* Don't add strings unless they set a var */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if (strchr(*pamenv, '='))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									putenv(xstrdup(*pamenv));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									unsetenv(*pamenv);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								pamenv++;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (changeuser != NULL) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							pamenv = (const char *const *)pam_getenvlist(pamh);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (pamenv) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								while (*pamenv) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									/* Don't add strings unless they set a var */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									if (strchr(*pamenv, '='))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										putenv(xstrdup(*pamenv));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										unsetenv(*pamenv);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									pamenv++;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -1304,7 +1304,7 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						setsid();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						execvp(exec, argv);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#ifdef HAVE_PAM
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (pamr == PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (changeuser != NULL && pamr == PAM_SUCCESS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							pam_close_session(pamh, PAM_SILENT);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						eerrorx("%s: failed to exec `%s': %s",
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				 
 |