services: xorg: Fix file descriptor leak from SLiM/xinitrc.
This reverts commit 9515b74554.
* gnu/services/xorg.scm (xinitrc)[builder](close-all-fdes): Start from
  file descriptor 3.
			
			
This commit is contained in:
		
							parent
							
								
									1204c5100e
								
							
						
					
					
						commit
						16c33bfb07
					
				
					 1 changed files with 12 additions and 0 deletions
				
			
		|  | @ -155,6 +155,13 @@ which should be passed to this script as the first argument.  If not, the | |||
|     #~(begin | ||||
|         (use-modules (ice-9 match)) | ||||
| 
 | ||||
|         (define (close-all-fdes) | ||||
|           ;; Close all the open file descriptors except 0 to 2. | ||||
|           (let loop ((fd 3)) | ||||
|             (when (< fd 4096)               ;FIXME: use sysconf + _SC_OPEN_MAX | ||||
|               (false-if-exception (close-fdes fd)) | ||||
|               (loop (+ 1 fd))))) | ||||
| 
 | ||||
|         (define (exec-from-login-shell command . args) | ||||
|           ;; Run COMMAND from a login shell so that it gets to see the same | ||||
|           ;; environment variables that one gets when logging in on a tty, for | ||||
|  | @ -163,6 +170,11 @@ which should be passed to this script as the first argument.  If not, the | |||
|                  (shell (passwd:shell pw)) | ||||
|                  (st    (stat command #f))) | ||||
|             (when (and st (not (zero? (logand (stat:mode st) #o100)))) | ||||
|               ;; Close any open file descriptors.  This is all the more | ||||
|               ;; important that SLiM itself exec's us directly without closing | ||||
|               ;; its own file descriptors! | ||||
|               (close-all-fdes) | ||||
| 
 | ||||
|               ;; The '--login' option is supported at least by Bash and zsh. | ||||
|               (execl shell shell "--login" "-c" | ||||
|                      (string-join (cons command args)))))) | ||||
|  |  | |||
		Reference in a new issue