Compare commits
	
		
			28 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					7a66bdb5b9 | ||
| 
						 | 
					670861da88 | ||
| 
						 | 
					bd4b217607 | ||
| 
						 | 
					cded32f748 | ||
| 
						 | 
					f93396793a | ||
| 
						 | 
					c79b6d4730 | ||
| 
						 | 
					3f8eb261ac | ||
| 
						 | 
					505af695d8 | ||
| 
						 | 
					f419d8b03a | ||
| 
						 | 
					fd699ddf2f | ||
| 
						 | 
					66651180a7 | ||
| 
						 | 
					7d63dc928c | ||
| 
						 | 
					8e16828bd3 | ||
| 
						 | 
					3a30710916 | ||
| 
						 | 
					290a91e8e9 | ||
| 
						 | 
					04d94be766 | ||
| 
						 | 
					fa6707e5b3 | ||
| 
						 | 
					3286a98fe6 | ||
| 
						 | 
					dc0ab571a2 | ||
| 
						 | 
					fb37e1aa96 | ||
| 
						 | 
					8769cca710 | ||
| 
						 | 
					506f2887e1 | ||
| 
						 | 
					83223a6e97 | ||
| 
						 | 
					2747f40f82 | ||
| 
						 | 
					933972da53 | ||
| 
						 | 
					dbcb8ba3fe | ||
| 
						 | 
					e462c3223e | ||
| 
						 | 
					06f195ce37 | 
							
								
								
									
										256
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										256
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -1,3 +1,211 @@
 | 
				
			|||||||
 | 
					commit 670861da88322722860eae26b3fb786928295704
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Fix rc_env_allow wildcard usage
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Before this commit, using * in rc_env_allow did not work.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    This fixes #60.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit bd4b217607e808139ef5ccefd77ab6182d5068c1
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    start 0.20.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit cded32f748fcbdb00c4d13b6bda8b799f5884065
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit f93396793a384afd6d8b82744fa260dd954e0f51
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    add back deprecation warnings lost during refactoring
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit c79b6d47304e14685b3be516e203080bd77f22a4
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fix tests
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    X-Gentoo-Bug: 572602
 | 
				
			||||||
 | 
					    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=572602
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 3f8eb261ac46abdec3a42d4967e95d16efc3d65a
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    librc: Complain when a real and virtual service have the same name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 505af695d8bebdf468ada0899931554b31b4d22c
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    openrc-run: in verbose mode, log execution of the shell script
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    This is to show when openrc-run runs the openrc-run.sh script; it is
 | 
				
			||||||
 | 
					    used for debugging.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit f419d8b03aeb26739d11b79a899af2ad0a0a7b89
 | 
				
			||||||
 | 
					Author: Colin Booth <colin@heliocat.net>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sh/s6.sh: update s6-svc syntax to be valid for 2.2.0.0+
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    The s6-svc syntax changed for wait-up, wait-ready, wait-down, and
 | 
				
			||||||
 | 
					    wait-finished. This changes the s6 handling script to use the current
 | 
				
			||||||
 | 
					    valid syntax.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    This fixes #65.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit fd699ddf2f266c98d7ada3409b94233eb4b23b9a
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    start 0.20.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 66651180a7c9392c44f7baa4a2a11298a5f79f8a
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update change log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 7d63dc928ca02dc9ab654078c5c1ed0b6bb017d9
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    localmount: Allow users to control whether errors are ignored
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    X-Gentoo-Bug: 572138
 | 
				
			||||||
 | 
					    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=572138
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 8e16828bd3d97e6b1e40ded616a54cb8a9e7b403
 | 
				
			||||||
 | 
					Author: Doug Freed <dwfreed@mtu.edu>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rc: remove use of magic constant and allow OpenVZ to drop to shell
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    OpenVZ has had console support for a long time now; allow them to use it
 | 
				
			||||||
 | 
					    to drop to a shell during interactive boot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 3a307109168ac82f37a9a85a81b7b527a57665e5
 | 
				
			||||||
 | 
					Author: Doug Freed <dwfreed@mtu.edu>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    librc: handle rc_sys="prefix" even if we weren't built with a prefix
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    This probably isn't needed, but it mimics old behavior.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 290a91e8e9242582ee13c7343b630b097e2eeaf2
 | 
				
			||||||
 | 
					Author: Doug Freed <dwfreed@mtu.edu>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    librc: fix handling the nothing special case for rc_sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 04d94be766ae2808adc709b0e4e03ce1f3a75d5d
 | 
				
			||||||
 | 
					Author: Doug Freed <dwfreed@mtu.edu>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    librc: move system detection code into rc_sys and use it
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    This fixes an issue where librc code was calling code that only existed
 | 
				
			||||||
 | 
					    in the rc binary.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    This reverts commits 8addd79 and 9f6e056
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    This fixes #75.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit fa6707e5b33738c3416bfbad661770302aa50212
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fix bsd build
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    X-Gentoo-Bug: 572068
 | 
				
			||||||
 | 
					    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=572068
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 3286a98fe60d1c2617ec73ef68fc4a18f092d9da
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    start 0.20.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit dc0ab571a26e4c990559f4222780a26aa84bd463
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update change log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit fb37e1aa96df351b1bf591dc36ef332f86820a2b
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    src/rc/Makefile: fix make depend target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 8769cca71089983ad8a8a69cec852c6bc169248d
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    include rc.h properly in source files
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    We were attempting to include rc.h in rc-misc.h instead of the source
 | 
				
			||||||
 | 
					    files where it should be included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 506f2887e13eb8093bbff0915381644c4c08fc5c
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fix selinux build
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    X-Gentoo-Bug: 571798
 | 
				
			||||||
 | 
					    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=571798
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 83223a6e97ff2ed3a8b06c4794b55cdd1c61c657
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    version 0.20.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 2747f40f823c2d31b820f0525360532287c70eea
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 933972da532bdf23accaea68bd072fc723a4065d
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fix selinux build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit dbcb8ba3fe2ddce1052c6e0037c47e19d7c273aa
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Add LANG, LC_MESSAGES and TERM to the environment whitelist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit e462c3223ec71e4567916c74b7e02ec167d91819
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fix seg fault
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 06f195ce37769fda1bbc2cfde13534abeb7f1176
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    increment version number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit 04f05c30d13ec83b85164a536eb570f29a66b275
 | 
				
			||||||
 | 
					Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update ChangeLog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
commit 9473ac514cb72663d5c3bac8b5473cced4a20bf7
 | 
					commit 9473ac514cb72663d5c3bac8b5473cced4a20bf7
 | 
				
			||||||
Author: joe9 <joe9mail@gmail.com>
 | 
					Author: joe9 <joe9mail@gmail.com>
 | 
				
			||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
					Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
@@ -1281,51 +1489,3 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    X-Gentoo-Bug: 540006
 | 
					    X-Gentoo-Bug: 540006
 | 
				
			||||||
    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=540006
 | 
					    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=540006
 | 
				
			||||||
 | 
					 | 
				
			||||||
commit 3100114bc104741145fb6c1d4b1664759114cc5c
 | 
					 | 
				
			||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Add nfsclient to netmount use dependencies
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    X-Gentoo-Bug: 537996
 | 
					 | 
				
			||||||
    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=537996
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
commit 3f80f22e22ec16ed517397fd303c3df99f9340fc
 | 
					 | 
				
			||||||
Author: Will Miles <wmiles@sgl.com>
 | 
					 | 
				
			||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Prioritize local includes and libraries
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    This fixes #35.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
commit 8250ac94dfc6156075081e0e2d0986cb51b3098d
 | 
					 | 
				
			||||||
Author: Consus <consus@gmx.com>
 | 
					 | 
				
			||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    tmpfiles.*: Follow OpenRC's message style
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    Just to be consistent.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
commit fbdd669ba7c5d1a67129236b4ffcd76198340a1b
 | 
					 | 
				
			||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Makefile: add variable for path to source tree
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    Add a new variable, ${TOP}, to the top level makefile, which points to
 | 
					 | 
				
			||||||
    the path of the source tree.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
commit cddb4aad08615420320f75050042d946b18d2bb5
 | 
					 | 
				
			||||||
Author: Will Miles <wmiles@sgl.com>
 | 
					 | 
				
			||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Fix off-by-one error in --test argument printout in start-stop-daemon.
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    Fixes #34.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
commit 3c5dc0ec7774a72e243da43ac5180ea36a311ad8
 | 
					 | 
				
			||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    tmpfiles.dev: pass --boot to tmpfiles.sh so kmod works properly
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,13 +76,3 @@ Why: The getline() function was standardized in POSIX.1-2008, so it
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Who:
 | 
					Who:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### rc_sys()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
When: 1.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Why: The OpenRC code now uses two internal functions, detect_container()
 | 
					 | 
				
			||||||
	 and detect_vm() to handle this. rc_sys() is broken because it
 | 
					 | 
				
			||||||
	 doesn't differentiate between containers and vm's.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Who:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
NAME=		openrc
 | 
					NAME=		openrc
 | 
				
			||||||
VERSION=	0.20
 | 
					VERSION=	0.20.5
 | 
				
			||||||
PKG=		${NAME}-${VERSION}
 | 
					PKG=		${NAME}-${VERSION}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,9 @@
 | 
				
			|||||||
# Stop the unmounting of certain points.
 | 
					# Stop the unmounting of certain points.
 | 
				
			||||||
# This could be useful for some NFS related work.
 | 
					# This could be useful for some NFS related work.
 | 
				
			||||||
#no_umounts="/dir1:/var/dir2"
 | 
					#no_umounts="/dir1:/var/dir2"
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Ignore errors when mounting local file systems.
 | 
				
			||||||
 | 
					# This should be left alone unless you know what you are doing. If it is
 | 
				
			||||||
 | 
					# set to yes, not only will we allow mount failures, but we will ignore
 | 
				
			||||||
 | 
					# syntax errors in fstab.
 | 
				
			||||||
 | 
					#ignore_mount_errors="NO"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,11 @@ start()
 | 
				
			|||||||
	rc=$?
 | 
						rc=$?
 | 
				
			||||||
	if [ "$RC_UNAME" != Linux ]; then
 | 
						if [ "$RC_UNAME" != Linux ]; then
 | 
				
			||||||
		rc=0
 | 
							rc=0
 | 
				
			||||||
 | 
						elif yesno "${ignore_mount_errors:-NO}"; then
 | 
				
			||||||
 | 
							if [ $rc -ne 0 ]; then
 | 
				
			||||||
 | 
								ewarn "localmount: errors detected, but ignored"
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							rc=0
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	return $rc
 | 
						return $rc
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ depend()
 | 
				
			|||||||
		esac
 | 
							esac
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 	config /etc/fstab
 | 
					 	config /etc/fstab
 | 
				
			||||||
	want $mywant	
 | 
						want $mywant
 | 
				
			||||||
	use afc-client amd openvpn
 | 
						use afc-client amd openvpn
 | 
				
			||||||
	use dns
 | 
						use dns
 | 
				
			||||||
	keyword -jail -prefix -systemd-nspawn -vserver -lxc
 | 
						keyword -jail -prefix -systemd-nspawn -vserver -lxc
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -172,9 +172,9 @@ The service will start after these services and stop before these services.
 | 
				
			|||||||
The service will start before these services and stop after these services.
 | 
					The service will start before these services and stop after these services.
 | 
				
			||||||
.It Ic provide
 | 
					.It Ic provide
 | 
				
			||||||
The service provides this virtual service. For example, named provides dns.
 | 
					The service provides this virtual service. For example, named provides dns.
 | 
				
			||||||
Virtual services take precedence over real services, so it is highly
 | 
					Note that it is not legal to have a virtual and real service with the
 | 
				
			||||||
recommended that you do not have a real service that has the same name
 | 
					same name. If you do this, you will receive an error message, and you
 | 
				
			||||||
as a virtual service.
 | 
					must rename either the real or virtual service.
 | 
				
			||||||
.It Ic config
 | 
					.It Ic config
 | 
				
			||||||
We should recalculate our dependencies if the listed files have changed.
 | 
					We should recalculate our dependencies if the listed files have changed.
 | 
				
			||||||
.It Ic keyword
 | 
					.It Ic keyword
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,8 +52,8 @@ if [ ! -d $scandir ]; then
 | 
				
			|||||||
	exit 1
 | 
						exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Make sure s6-svscan is running 
 | 
					# Make sure s6-svscan is running
 | 
				
			||||||
if ! pgrep s6-svscan >/dev/null ; then 
 | 
					if ! pgrep s6-svscan >/dev/null ; then
 | 
				
			||||||
	printf "s6-svscan is not running\n"
 | 
						printf "s6-svscan is not running\n"
 | 
				
			||||||
	exit 1
 | 
						exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
@@ -141,7 +141,7 @@ do
 | 
				
			|||||||
	fi
 | 
						fi
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Cleanup 
 | 
					# Cleanup
 | 
				
			||||||
rm -f $statfile 2>/dev/null
 | 
					rm -f $statfile 2>/dev/null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
printf "\n\n"
 | 
					printf "\n\n"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -244,7 +244,7 @@ for _cmd; do
 | 
				
			|||||||
		break
 | 
							break
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
# Load our script
 | 
					# Load our script
 | 
				
			||||||
sourcex "$RC_SERVICE"
 | 
					sourcex "$RC_SERVICE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								sh/s6.sh
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sh/s6.sh
									
									
									
									
									
								
							@@ -41,7 +41,7 @@ s6_stop()
 | 
				
			|||||||
 fi
 | 
					 fi
 | 
				
			||||||
	s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
 | 
						s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
 | 
				
			||||||
	ebegin "Stopping ${name:-$RC_SVCNAME}"
 | 
						ebegin "Stopping ${name:-$RC_SVCNAME}"
 | 
				
			||||||
	s6-svc -Dd -T ${s6_service_timeout_stop:-10000} "${s6_service_link}"
 | 
						s6-svc -wD -d -T ${s6_service_timeout_stop:-10000} "${s6_service_link}"
 | 
				
			||||||
	set -- $(s6-svstat "${s6_service_link}")
 | 
						set -- $(s6-svstat "${s6_service_link}")
 | 
				
			||||||
	[ "$1" = "down" ]
 | 
						[ "$1" = "down" ]
 | 
				
			||||||
	eend $? "Failed to stop $RC_SVCNAME"
 | 
						eend $? "Failed to stop $RC_SVCNAME"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,6 @@
 | 
				
			|||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "helpers.h"
 | 
					#include "helpers.h"
 | 
				
			||||||
#include "rc.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RC_LEVEL_BOOT           "boot"
 | 
					#define RC_LEVEL_BOOT           "boot"
 | 
				
			||||||
#define RC_LEVEL_DEFAULT        "default"
 | 
					#define RC_LEVEL_DEFAULT        "default"
 | 
				
			||||||
@@ -61,10 +60,6 @@ int is_writable(const char *);
 | 
				
			|||||||
#define service_stop(service)  exec_service(service, "stop");
 | 
					#define service_stop(service)  exec_service(service, "stop");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int parse_mode(mode_t *, char *);
 | 
					int parse_mode(mode_t *, char *);
 | 
				
			||||||
const char *detect_prefix(void);
 | 
					 | 
				
			||||||
const char *get_systype(void);
 | 
					 | 
				
			||||||
const char *detect_container(void);
 | 
					 | 
				
			||||||
const char *detect_vm(void);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Handy function so we can wrap einfo around our deptree */
 | 
					/* Handy function so we can wrap einfo around our deptree */
 | 
				
			||||||
RC_DEPTREE *_rc_deptree_load (int, int *);
 | 
					RC_DEPTREE *_rc_deptree_load (int, int *);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -717,14 +717,16 @@ rc_deptree_update_needed(time_t *newest, char *file)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
librc_hidden_def(rc_deptree_update_needed)
 | 
					librc_hidden_def(rc_deptree_update_needed)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* This is a 6 phase operation
 | 
					/* This is a 7 phase operation
 | 
				
			||||||
   Phase 1 is a shell script which loads each init script and config in turn
 | 
					   Phase 1 is a shell script which loads each init script and config in turn
 | 
				
			||||||
   and echos their dependency info to stdout
 | 
					   and echos their dependency info to stdout
 | 
				
			||||||
   Phase 2 takes that and populates a depinfo object with that data
 | 
					   Phase 2 takes that and populates a depinfo object with that data
 | 
				
			||||||
   Phase 3 adds any provided services to the depinfo object
 | 
					   Phase 3 adds any provided services to the depinfo object
 | 
				
			||||||
   Phase 4 scans that depinfo object and puts in backlinks
 | 
					   Phase 4 scans that depinfo object and puts in backlinks
 | 
				
			||||||
   Phase 5 removes broken before dependencies
 | 
					   Phase 5 removes broken before dependencies
 | 
				
			||||||
   Phase 6 saves the depinfo object to disk
 | 
					   Phase 6 looks for duplicate services indicating a real and virtual service
 | 
				
			||||||
 | 
					   with the same names
 | 
				
			||||||
 | 
					   Phase 7 saves the depinfo object to disk
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
bool
 | 
					bool
 | 
				
			||||||
rc_deptree_update(void)
 | 
					rc_deptree_update(void)
 | 
				
			||||||
@@ -733,15 +735,16 @@ rc_deptree_update(void)
 | 
				
			|||||||
	RC_DEPTREE *deptree, *providers;
 | 
						RC_DEPTREE *deptree, *providers;
 | 
				
			||||||
	RC_DEPINFO *depinfo = NULL, *depinfo_np, *di;
 | 
						RC_DEPINFO *depinfo = NULL, *depinfo_np, *di;
 | 
				
			||||||
	RC_DEPTYPE *deptype = NULL, *dt_np, *dt, *provide;
 | 
						RC_DEPTYPE *deptype = NULL, *dt_np, *dt, *provide;
 | 
				
			||||||
	RC_STRINGLIST *config, *types, *sorted, *visited;
 | 
						RC_STRINGLIST *config, *dupes, *types, *sorted, *visited;
 | 
				
			||||||
	RC_STRING *s, *s2, *s2_np, *s3, *s4;
 | 
						RC_STRING *s, *s2, *s2_np, *s3, *s4;
 | 
				
			||||||
	char *line = NULL;
 | 
						char *line = NULL;
 | 
				
			||||||
	size_t len = 0;
 | 
						size_t len = 0;
 | 
				
			||||||
	char *depend, *depends, *service, *type, *nosys, *onosys;
 | 
						char *depend, *depends, *service, *type, *nosys, *onosys;
 | 
				
			||||||
	size_t i, k, l;
 | 
						size_t i, k, l;
 | 
				
			||||||
	bool retval = true;
 | 
						bool retval = true;
 | 
				
			||||||
	const char *sys = NULL;
 | 
						const char *sys = rc_sys();
 | 
				
			||||||
	struct utsname uts;
 | 
						struct utsname uts;
 | 
				
			||||||
 | 
						int serrno;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Some init scripts need RC_LIBEXECDIR to source stuff
 | 
						/* Some init scripts need RC_LIBEXECDIR to source stuff
 | 
				
			||||||
	   Ideally we should be setting our full env instead */
 | 
						   Ideally we should be setting our full env instead */
 | 
				
			||||||
@@ -847,9 +850,6 @@ rc_deptree_update(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Phase 2 - if we're a special system, remove services that don't
 | 
						/* Phase 2 - if we're a special system, remove services that don't
 | 
				
			||||||
	 * work for them. This doesn't stop them from being run directly. */
 | 
						 * work for them. This doesn't stop them from being run directly. */
 | 
				
			||||||
	sys = detect_container();
 | 
					 | 
				
			||||||
		if (!sys)
 | 
					 | 
				
			||||||
			sys = detect_vm();
 | 
					 | 
				
			||||||
	if (sys) {
 | 
						if (sys) {
 | 
				
			||||||
		len = strlen(sys);
 | 
							len = strlen(sys);
 | 
				
			||||||
		nosys = xmalloc(len + 2);
 | 
							nosys = xmalloc(len + 2);
 | 
				
			||||||
@@ -999,7 +999,22 @@ rc_deptree_update(void)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	rc_stringlist_free(types);
 | 
						rc_stringlist_free(types);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Phase 6 - save to disk
 | 
						/* Phase 6 - Print errors for duplicate services */
 | 
				
			||||||
 | 
						dupes = rc_stringlist_new();
 | 
				
			||||||
 | 
						TAILQ_FOREACH(depinfo, deptree, entries) {
 | 
				
			||||||
 | 
							serrno = errno;
 | 
				
			||||||
 | 
							errno = 0;
 | 
				
			||||||
 | 
							rc_stringlist_addu(dupes,depinfo->service);
 | 
				
			||||||
 | 
							if (errno == EEXIST) {
 | 
				
			||||||
 | 
								fprintf(stderr,
 | 
				
			||||||
 | 
										"Error: %s is the name of a real and virtual service.\n",
 | 
				
			||||||
 | 
										depinfo->service);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							errno = serrno;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rc_stringlist_free(dupes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Phase 7 - save to disk
 | 
				
			||||||
	   Now that we're purely in C, do we need to keep a shell parseable file?
 | 
						   Now that we're purely in C, do we need to keep a shell parseable file?
 | 
				
			||||||
	   I think yes as then it stays human readable
 | 
						   I think yes as then it stays human readable
 | 
				
			||||||
	   This works and should be entirely shell parseable provided that depend
 | 
						   This works and should be entirely shell parseable provided that depend
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -198,13 +198,9 @@ found:
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *
 | 
					static const char *
 | 
				
			||||||
rc_sys(void)
 | 
					get_systype(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef PREFIX
 | 
					 | 
				
			||||||
	return RC_SYS_PREFIX;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	char *systype = rc_conf_value("rc_sys");
 | 
						char *systype = rc_conf_value("rc_sys");
 | 
				
			||||||
	if (systype) {
 | 
						if (systype) {
 | 
				
			||||||
		char *s = systype;
 | 
							char *s = systype;
 | 
				
			||||||
@@ -215,10 +211,37 @@ rc_sys(void)
 | 
				
			|||||||
			s++;
 | 
								s++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						return systype;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char *
 | 
				
			||||||
 | 
					detect_prefix(const char *systype)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef PREFIX
 | 
				
			||||||
 | 
						return RC_SYS_PREFIX;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						if (systype) {
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_NONE) == 0)
 | 
				
			||||||
 | 
								return NULL;
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_PREFIX) == 0)
 | 
				
			||||||
 | 
								return RC_SYS_PREFIX;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char *
 | 
				
			||||||
 | 
					detect_container(const char *systype)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
#ifdef __FreeBSD__
 | 
					#ifdef __FreeBSD__
 | 
				
			||||||
	if (systype && strcmp(systype, RC_SYS_JAIL) == 0)
 | 
						if (systype) {
 | 
				
			||||||
		return RC_SYS_JAIL;
 | 
							if (strcmp(systype, RC_SYS_NONE) == 0)
 | 
				
			||||||
 | 
							       return NULL;
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_JAIL) == 0)
 | 
				
			||||||
 | 
								return RC_SYS_JAIL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int jailed = 0;
 | 
						int jailed = 0;
 | 
				
			||||||
	size_t len = sizeof(jailed);
 | 
						size_t len = sizeof(jailed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -227,25 +250,10 @@ rc_sys(void)
 | 
				
			|||||||
			return RC_SYS_JAIL;
 | 
								return RC_SYS_JAIL;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __NetBSD__
 | 
					 | 
				
			||||||
	if (systype) {
 | 
					 | 
				
			||||||
		if(strcmp(systype, RC_SYS_XEN0) == 0)
 | 
					 | 
				
			||||||
				return RC_SYS_XEN0;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_XENU) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_XENU;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (exists("/kern/xen/privcmd"))
 | 
					 | 
				
			||||||
		return RC_SYS_XEN0;
 | 
					 | 
				
			||||||
	if (exists("/kern/xen"))
 | 
					 | 
				
			||||||
		return RC_SYS_XENU;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __linux__
 | 
					#ifdef __linux__
 | 
				
			||||||
	if (systype) {
 | 
						if (systype) {
 | 
				
			||||||
		if (strcmp(systype, RC_SYS_XEN0) == 0)
 | 
							if (strcmp(systype, RC_SYS_NONE) == 0)
 | 
				
			||||||
			return RC_SYS_XEN0;
 | 
								return NULL;
 | 
				
			||||||
		if (strcmp(systype, RC_SYS_XENU) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_XENU;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_UML) == 0)
 | 
							if (strcmp(systype, RC_SYS_UML) == 0)
 | 
				
			||||||
			return RC_SYS_UML;
 | 
								return RC_SYS_UML;
 | 
				
			||||||
		if (strcmp(systype, RC_SYS_VSERVER) == 0)
 | 
							if (strcmp(systype, RC_SYS_VSERVER) == 0)
 | 
				
			||||||
@@ -261,11 +269,7 @@ rc_sys(void)
 | 
				
			|||||||
		if (strcmp(systype, RC_SYS_DOCKER) == 0)
 | 
							if (strcmp(systype, RC_SYS_DOCKER) == 0)
 | 
				
			||||||
				return RC_SYS_DOCKER;
 | 
									return RC_SYS_DOCKER;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (exists("/proc/xen")) {
 | 
						if (file_regex("/proc/cpuinfo", "UML"))
 | 
				
			||||||
		if (file_regex("/proc/xen/capabilities", "control_d"))
 | 
					 | 
				
			||||||
			return RC_SYS_XEN0;
 | 
					 | 
				
			||||||
		return RC_SYS_XENU;
 | 
					 | 
				
			||||||
	} else if (file_regex("/proc/cpuinfo", "UML"))
 | 
					 | 
				
			||||||
		return RC_SYS_UML;
 | 
							return RC_SYS_UML;
 | 
				
			||||||
	else if (file_regex("/proc/self/status",
 | 
						else if (file_regex("/proc/self/status",
 | 
				
			||||||
		"(s_context|VxID):[[:space:]]*[1-9]"))
 | 
							"(s_context|VxID):[[:space:]]*[1-9]"))
 | 
				
			||||||
@@ -287,6 +291,61 @@ rc_sys(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char *
 | 
				
			||||||
 | 
					detect_vm(const char *systype)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef __NetBSD__
 | 
				
			||||||
 | 
						if (systype) {
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_NONE) == 0)
 | 
				
			||||||
 | 
								return NULL;
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_XEN0) == 0)
 | 
				
			||||||
 | 
								return RC_SYS_XEN0;
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_XENU) == 0)
 | 
				
			||||||
 | 
								return RC_SYS_XENU;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (exists("/kern/xen/privcmd"))
 | 
				
			||||||
 | 
							return RC_SYS_XEN0;
 | 
				
			||||||
 | 
						if (exists("/kern/xen"))
 | 
				
			||||||
 | 
							return RC_SYS_XENU;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __linux__
 | 
				
			||||||
 | 
						if (systype) {
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_NONE) == 0)
 | 
				
			||||||
 | 
								return NULL;
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_XEN0) == 0)
 | 
				
			||||||
 | 
								return RC_SYS_XEN0;
 | 
				
			||||||
 | 
							if (strcmp(systype, RC_SYS_XENU) == 0)
 | 
				
			||||||
 | 
								return RC_SYS_XENU;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (exists("/proc/xen")) {
 | 
				
			||||||
 | 
							if (file_regex("/proc/xen/capabilities", "control_d"))
 | 
				
			||||||
 | 
								return RC_SYS_XEN0;
 | 
				
			||||||
 | 
							return RC_SYS_XENU;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char *
 | 
				
			||||||
 | 
					rc_sys(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const char *systype;
 | 
				
			||||||
 | 
						const char *sys;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						systype = get_systype();
 | 
				
			||||||
 | 
						sys = detect_prefix(systype);
 | 
				
			||||||
 | 
						if (!sys) {
 | 
				
			||||||
 | 
							sys = detect_container(systype);
 | 
				
			||||||
 | 
							if (!sys) {
 | 
				
			||||||
 | 
								sys = detect_vm(systype);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sys;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
librc_hidden_def(rc_sys)
 | 
					librc_hidden_def(rc_sys)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *
 | 
					static const char *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -318,6 +318,7 @@ bool rc_service_daemons_crashed(const char *);
 | 
				
			|||||||
 * Some services cannot work in these systems, or we do something else. */
 | 
					 * Some services cannot work in these systems, or we do something else. */
 | 
				
			||||||
#define RC_SYS_DOCKER  "DOCKER"
 | 
					#define RC_SYS_DOCKER  "DOCKER"
 | 
				
			||||||
#define RC_SYS_JAIL    "JAIL"
 | 
					#define RC_SYS_JAIL    "JAIL"
 | 
				
			||||||
 | 
					#define RC_SYS_NONE    ""
 | 
				
			||||||
#define RC_SYS_OPENVZ  "OPENVZ"
 | 
					#define RC_SYS_OPENVZ  "OPENVZ"
 | 
				
			||||||
#define RC_SYS_LXC     "LXC"
 | 
					#define RC_SYS_LXC     "LXC"
 | 
				
			||||||
#define RC_SYS_PREFIX  "PREFIX"
 | 
					#define RC_SYS_PREFIX  "PREFIX"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,9 @@
 | 
				
			|||||||
SRCS=	rc.c 	rc-logger.c rc-misc.c rc-plugin.c
 | 
					SRCS=	checkpath.c do_e.c do_mark_service.c do_service.c \
 | 
				
			||||||
 | 
							do_value.c fstabinfo.c is_newer_than.c is_older_than.c \
 | 
				
			||||||
 | 
							mountinfo.c openrc-run.c rc-abort.c rc.c \
 | 
				
			||||||
 | 
							rc-depend.c rc-logger.c rc-misc.c rc-plugin.c \
 | 
				
			||||||
 | 
							rc-service.c rc-status.c rc-update.c \
 | 
				
			||||||
 | 
							shell_var.c start-stop-daemon.c swclock.c _usage.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq (${MKSELINUX},yes)
 | 
					ifeq (${MKSELINUX},yes)
 | 
				
			||||||
SRCS+=		rc-selinux.c
 | 
					SRCS+=		rc-selinux.c
 | 
				
			||||||
@@ -75,7 +80,10 @@ check test::
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
all: ${ALL_PROGS}
 | 
					all: ${ALL_PROGS}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
checkpath: checkpath.o _usage.o rc-misc.o rc-selinux.o
 | 
					checkpath: checkpath.o _usage.o rc-misc.o
 | 
				
			||||||
 | 
					ifeq (${MKSELINUX},yes)
 | 
				
			||||||
 | 
					checkpath: rc-selinux.o
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
						${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
einfon einfo ewarnn ewarn eerrorn eerror ebegin eend ewend \
 | 
					einfon einfo ewarnn ewarn eerrorn eerror ebegin eend ewend \
 | 
				
			||||||
@@ -101,10 +109,13 @@ mark_service_hotplugged mark_service_failed: do_mark_service.o rc-misc.o
 | 
				
			|||||||
mountinfo: mountinfo.o _usage.o rc-misc.o
 | 
					mountinfo: mountinfo.o _usage.o rc-misc.o
 | 
				
			||||||
	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
						${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
openrc rc: rc.o rc-logger.o rc-misc.o rc-plugin.o rc-selinux.o _usage.o
 | 
					openrc rc: rc.o rc-logger.o rc-misc.o rc-plugin.o _usage.o
 | 
				
			||||||
	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
						${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
openrc-run runscript: openrc-run.o _usage.o rc-misc.o rc-plugin.o
 | 
					openrc-run runscript: openrc-run.o _usage.o rc-misc.o rc-plugin.o
 | 
				
			||||||
 | 
					ifeq (${MKSELINUX},yes)
 | 
				
			||||||
 | 
					openrc-run runscript: rc-selinux.o
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
						${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rc-abort: rc-abort.o
 | 
					rc-abort: rc-abort.o
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@
 | 
				
			|||||||
#include <ctype.h>
 | 
					#include <ctype.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include "rc.h"
 | 
				
			||||||
#include "rc-misc.h"
 | 
					#include "rc-misc.h"
 | 
				
			||||||
#include "_usage.h"
 | 
					#include "_usage.h"
 | 
				
			||||||
#include "version.h"
 | 
					#include "version.h"
 | 
				
			||||||
@@ -46,10 +47,7 @@ _noreturn void show_version(void)
 | 
				
			|||||||
	const char *systype = NULL;
 | 
						const char *systype = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("%s (OpenRC", applet);
 | 
						printf("%s (OpenRC", applet);
 | 
				
			||||||
	systype = detect_container();
 | 
						if ((systype = rc_sys()))
 | 
				
			||||||
	if (!systype)
 | 
					 | 
				
			||||||
		systype = detect_vm();
 | 
					 | 
				
			||||||
	if (systype)
 | 
					 | 
				
			||||||
		printf(" [%s]", systype);
 | 
							printf(" [%s]", systype);
 | 
				
			||||||
	printf(") %s", VERSION);
 | 
						printf(") %s", VERSION);
 | 
				
			||||||
#ifdef BRANDING
 | 
					#ifdef BRANDING
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@
 | 
				
			|||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "einfo.h"
 | 
					#include "einfo.h"
 | 
				
			||||||
 | 
					#include "rc.h"
 | 
				
			||||||
#include "rc-misc.h"
 | 
					#include "rc-misc.h"
 | 
				
			||||||
#include "rc-selinux.h"
 | 
					#include "rc-selinux.h"
 | 
				
			||||||
#include "_usage.h"
 | 
					#include "_usage.h"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@
 | 
				
			|||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "einfo.h"
 | 
					#include "einfo.h"
 | 
				
			||||||
 | 
					#include "rc.h"
 | 
				
			||||||
#include "rc-misc.h"
 | 
					#include "rc-misc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *applet = NULL;
 | 
					const char *applet = NULL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@
 | 
				
			|||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "rc.h"
 | 
				
			||||||
#include "rc-misc.h"
 | 
					#include "rc-misc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char **argv)
 | 
					int main(int argc, char **argv)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@
 | 
				
			|||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "rc.h"
 | 
				
			||||||
#include "rc-misc.h"
 | 
					#include "rc-misc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char **argv)
 | 
					int main(int argc, char **argv)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -390,6 +390,14 @@ svc_exec(const char *arg1, const char *arg2)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (exists(RC_SVCDIR "/openrc-run.sh")) {
 | 
							if (exists(RC_SVCDIR "/openrc-run.sh")) {
 | 
				
			||||||
 | 
								if (arg2)
 | 
				
			||||||
 | 
									einfov("Executing: %s %s %s %s %s",
 | 
				
			||||||
 | 
										RC_SVCDIR "/openrc-run.sh", RC_SVCDIR "/openrc-run.sh",
 | 
				
			||||||
 | 
										service, arg1, arg2);
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									einfov("Executing: %s %s %s %s",
 | 
				
			||||||
 | 
										RC_SVCDIR "/openrc-run.sh", RC_SVCDIR "/openrc-run.sh",
 | 
				
			||||||
 | 
										service, arg1);
 | 
				
			||||||
			execl(RC_SVCDIR "/openrc-run.sh",
 | 
								execl(RC_SVCDIR "/openrc-run.sh",
 | 
				
			||||||
			    RC_SVCDIR "/openrc-run.sh",
 | 
								    RC_SVCDIR "/openrc-run.sh",
 | 
				
			||||||
			    service, arg1, arg2, (char *) NULL);
 | 
								    service, arg1, arg2, (char *) NULL);
 | 
				
			||||||
@@ -397,6 +405,16 @@ svc_exec(const char *arg1, const char *arg2)
 | 
				
			|||||||
			    service, strerror(errno));
 | 
								    service, strerror(errno));
 | 
				
			||||||
			_exit(EXIT_FAILURE);
 | 
								_exit(EXIT_FAILURE);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 | 
								if (arg2)
 | 
				
			||||||
 | 
									einfov("Executing: %s %s %s %s %s",
 | 
				
			||||||
 | 
										RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
				
			||||||
 | 
										RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
				
			||||||
 | 
								    	service, arg1, arg2);
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									einfov("Executing: %s %s %s %s",
 | 
				
			||||||
 | 
										RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
				
			||||||
 | 
										RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
				
			||||||
 | 
								    	service, arg1);
 | 
				
			||||||
			execl(RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
								execl(RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
				
			||||||
			    RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
								    RC_LIBEXECDIR "/sh/openrc-run.sh",
 | 
				
			||||||
			    service, arg1, arg2, (char *) NULL);
 | 
								    service, arg1, arg2, (char *) NULL);
 | 
				
			||||||
@@ -1103,6 +1121,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		exit(EXIT_FAILURE);
 | 
							exit(EXIT_FAILURE);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						applet = basename_c(argv[0]);
 | 
				
			||||||
 | 
						if (strcmp(applet, "runscript") == 0)
 | 
				
			||||||
 | 
							ewarnv("runscript is deprecated, please use openrc-run instead.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (stat(argv[1], &stbuf) != 0) {
 | 
						if (stat(argv[1], &stbuf) != 0) {
 | 
				
			||||||
		fprintf(stderr, "openrc-run `%s': %s\n",
 | 
							fprintf(stderr, "openrc-run `%s': %s\n",
 | 
				
			||||||
		    argv[1], strerror(errno));
 | 
							    argv[1], strerror(errno));
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										171
									
								
								src/rc/rc-misc.c
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								src/rc/rc-misc.c
									
									
									
									
									
								
							@@ -27,7 +27,6 @@
 | 
				
			|||||||
#include <ctype.h>
 | 
					#include <ctype.h>
 | 
				
			||||||
#include <fcntl.h>
 | 
					#include <fcntl.h>
 | 
				
			||||||
#include <limits.h>
 | 
					#include <limits.h>
 | 
				
			||||||
#  include <regex.h>
 | 
					 | 
				
			||||||
#include <signal.h>
 | 
					#include <signal.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
@@ -53,6 +52,7 @@ rc_conf_yesno(const char *setting)
 | 
				
			|||||||
static const char *const env_whitelist[] = {
 | 
					static const char *const env_whitelist[] = {
 | 
				
			||||||
	"EERROR_QUIET", "EINFO_QUIET",
 | 
						"EERROR_QUIET", "EINFO_QUIET",
 | 
				
			||||||
	"IN_BACKGROUND", "IN_HOTPLUG",
 | 
						"IN_BACKGROUND", "IN_HOTPLUG",
 | 
				
			||||||
 | 
						"LANG", "LC_MESSAGES", "TERM",
 | 
				
			||||||
	NULL
 | 
						NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,6 +68,12 @@ env_filter(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Add the user defined list of vars */
 | 
						/* Add the user defined list of vars */
 | 
				
			||||||
	env_allow = rc_stringlist_split(rc_conf_value("rc_env_allow"), " ");
 | 
						env_allow = rc_stringlist_split(rc_conf_value("rc_env_allow"), " ");
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * If '*' is an entry in rc_env_allow, do nothing as we are to pass
 | 
				
			||||||
 | 
						 * through all environment variables.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (rc_stringlist_find(env_allow, "*"))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
	profile = rc_config_load(RC_PROFILE_ENV);
 | 
						profile = rc_config_load(RC_PROFILE_ENV);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Copy the env and work from this so we can manipulate it safely */
 | 
						/* Copy the env and work from this so we can manipulate it safely */
 | 
				
			||||||
@@ -125,7 +131,7 @@ env_config(void)
 | 
				
			|||||||
	char *np;
 | 
						char *np;
 | 
				
			||||||
	char *npp;
 | 
						char *npp;
 | 
				
			||||||
	char *tok;
 | 
						char *tok;
 | 
				
			||||||
	const char *sys = NULL;
 | 
						const char *sys = rc_sys();
 | 
				
			||||||
	char buffer[PATH_MAX];
 | 
						char buffer[PATH_MAX];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Ensure our PATH is prefixed with the system locations first
 | 
						/* Ensure our PATH is prefixed with the system locations first
 | 
				
			||||||
@@ -176,9 +182,7 @@ env_config(void)
 | 
				
			|||||||
	} else
 | 
						} else
 | 
				
			||||||
		setenv("RC_DEFAULTLEVEL", RC_LEVEL_DEFAULT, 1);
 | 
							setenv("RC_DEFAULTLEVEL", RC_LEVEL_DEFAULT, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sys = detect_container();
 | 
						if (sys)
 | 
				
			||||||
	if (!sys)
 | 
					 | 
				
			||||||
		sys = detect_vm();
 | 
					 | 
				
			||||||
		setenv("RC_SYS", sys, 1);
 | 
							setenv("RC_SYS", sys, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef PREFIX
 | 
					#ifdef PREFIX
 | 
				
			||||||
@@ -335,163 +339,6 @@ is_writable(const char *path)
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool file_regex(const char *file, const char *regex)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	FILE *fp;
 | 
					 | 
				
			||||||
	char *line = NULL;
 | 
					 | 
				
			||||||
	size_t len = 0;
 | 
					 | 
				
			||||||
	regex_t re;
 | 
					 | 
				
			||||||
	bool retval = true;
 | 
					 | 
				
			||||||
	int result;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!(fp = fopen(file, "r")))
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if ((result = regcomp(&re, regex, REG_EXTENDED | REG_NOSUB)) != 0) {
 | 
					 | 
				
			||||||
		fclose(fp);
 | 
					 | 
				
			||||||
		line = xmalloc(sizeof(char) * BUFSIZ);
 | 
					 | 
				
			||||||
		regerror(result, &re, line, BUFSIZ);
 | 
					 | 
				
			||||||
		fprintf(stderr, "file_regex: %s", line);
 | 
					 | 
				
			||||||
		free(line);
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	while ((rc_getline(&line, &len, fp))) {
 | 
					 | 
				
			||||||
		char *str = line;
 | 
					 | 
				
			||||||
		/* some /proc files have \0 separated content so we have to
 | 
					 | 
				
			||||||
		   loop through the 'line' */
 | 
					 | 
				
			||||||
		do {
 | 
					 | 
				
			||||||
			if (regexec(&re, str, 0, NULL, 0) == 0)
 | 
					 | 
				
			||||||
				goto found;
 | 
					 | 
				
			||||||
			str += strlen(str) + 1;
 | 
					 | 
				
			||||||
			/* len is the size of allocated buffer and we don't
 | 
					 | 
				
			||||||
			   want call regexec BUFSIZE times. find next str */
 | 
					 | 
				
			||||||
			while (str < line + len && *str == '\0')
 | 
					 | 
				
			||||||
				str++;
 | 
					 | 
				
			||||||
		} while (str < line + len);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	retval = false;
 | 
					 | 
				
			||||||
found:
 | 
					 | 
				
			||||||
	fclose(fp);
 | 
					 | 
				
			||||||
	free(line);
 | 
					 | 
				
			||||||
	regfree(&re);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return retval;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const char *detect_prefix(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
#ifdef PREFIX
 | 
					 | 
				
			||||||
	return RC_SYS_PREFIX;
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const char *get_systype(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char *systype = rc_conf_value("rc_sys");
 | 
					 | 
				
			||||||
	if (systype) {
 | 
					 | 
				
			||||||
		char *s = systype;
 | 
					 | 
				
			||||||
		/* Convert to uppercase */
 | 
					 | 
				
			||||||
		while (s && *s) {
 | 
					 | 
				
			||||||
			if (islower((unsigned char) *s))
 | 
					 | 
				
			||||||
				*s = toupper((unsigned char) *s);
 | 
					 | 
				
			||||||
			s++;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return systype;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const char *detect_container(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	const char *systype = get_systype();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __FreeBSD__
 | 
					 | 
				
			||||||
	if (systype && strcmp(systype, RC_SYS_JAIL) == 0)
 | 
					 | 
				
			||||||
		return RC_SYS_JAIL;
 | 
					 | 
				
			||||||
	int jailed = 0;
 | 
					 | 
				
			||||||
	size_t len = sizeof(jailed);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (sysctlbyname("security.jail.jailed", &jailed, &len, NULL, 0) == 0)
 | 
					 | 
				
			||||||
		if (jailed == 1)
 | 
					 | 
				
			||||||
			return RC_SYS_JAIL;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __linux__
 | 
					 | 
				
			||||||
	if (systype) {
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_UML) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_UML;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_VSERVER) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_VSERVER;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_OPENVZ) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_OPENVZ;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_LXC) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_LXC;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_RKT) == 0)
 | 
					 | 
				
			||||||
				return RC_SYS_RKT;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_SYSTEMD_NSPAWN) == 0)
 | 
					 | 
				
			||||||
				return RC_SYS_SYSTEMD_NSPAWN;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_DOCKER) == 0)
 | 
					 | 
				
			||||||
				return RC_SYS_DOCKER;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (file_regex("/proc/cpuinfo", "UML"))
 | 
					 | 
				
			||||||
		return RC_SYS_UML;
 | 
					 | 
				
			||||||
	else if (file_regex("/proc/self/status",
 | 
					 | 
				
			||||||
		"(s_context|VxID):[[:space:]]*[1-9]"))
 | 
					 | 
				
			||||||
		return RC_SYS_VSERVER;
 | 
					 | 
				
			||||||
	else if (exists("/proc/vz/veinfo") && !exists("/proc/vz/version"))
 | 
					 | 
				
			||||||
		return RC_SYS_OPENVZ;
 | 
					 | 
				
			||||||
	else if (file_regex("/proc/self/status",
 | 
					 | 
				
			||||||
		"envID:[[:space:]]*[1-9]"))
 | 
					 | 
				
			||||||
		return RC_SYS_OPENVZ; /* old test */
 | 
					 | 
				
			||||||
	else if (file_regex("/proc/1/environ", "container=lxc"))
 | 
					 | 
				
			||||||
		return RC_SYS_LXC;
 | 
					 | 
				
			||||||
	else if (file_regex("/proc/1/environ", "container=rkt"))
 | 
					 | 
				
			||||||
		return RC_SYS_RKT;
 | 
					 | 
				
			||||||
	else if (file_regex("/proc/1/environ", "container=systemd-nspawn"))
 | 
					 | 
				
			||||||
		return RC_SYS_SYSTEMD_NSPAWN;
 | 
					 | 
				
			||||||
	else if (file_regex("/proc/1/environ", "container=docker"))
 | 
					 | 
				
			||||||
		return RC_SYS_DOCKER;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const char *detect_vm(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	const char *systype = get_systype();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __NetBSD__
 | 
					 | 
				
			||||||
	if (systype) {
 | 
					 | 
				
			||||||
		if(strcmp(systype, RC_SYS_XEN0) == 0)
 | 
					 | 
				
			||||||
				return RC_SYS_XEN0;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_XENU) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_XENU;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (exists("/kern/xen/privcmd"))
 | 
					 | 
				
			||||||
		return RC_SYS_XEN0;
 | 
					 | 
				
			||||||
	if (exists("/kern/xen"))
 | 
					 | 
				
			||||||
		return RC_SYS_XENU;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __linux__
 | 
					 | 
				
			||||||
	if (systype) {
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_XEN0) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_XEN0;
 | 
					 | 
				
			||||||
		if (strcmp(systype, RC_SYS_XENU) == 0)
 | 
					 | 
				
			||||||
			return RC_SYS_XENU;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (exists("/proc/xen")) {
 | 
					 | 
				
			||||||
		if (file_regex("/proc/xen/capabilities", "control_d"))
 | 
					 | 
				
			||||||
			return RC_SYS_XEN0;
 | 
					 | 
				
			||||||
		return RC_SYS_XENU;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
RC_DEPTREE * _rc_deptree_load(int force, int *regen)
 | 
					RC_DEPTREE * _rc_deptree_load(int force, int *regen)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int fd;
 | 
						int fd;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,8 +15,6 @@
 | 
				
			|||||||
 *    except according to the terms contained in the LICENSE file.
 | 
					 *    except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef HAVE_SELINUX
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stddef.h>
 | 
					#include <stddef.h>
 | 
				
			||||||
#include <errno.h>
 | 
					#include <errno.h>
 | 
				
			||||||
#include <dlfcn.h>
 | 
					#include <dlfcn.h>
 | 
				
			||||||
@@ -386,5 +384,3 @@ out:
 | 
				
			|||||||
	free(run_init_t);
 | 
						free(run_init_t);
 | 
				
			||||||
	free(curr_t);
 | 
						free(curr_t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,10 +25,10 @@ void selinux_setup(char **argv);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* always return false for selinux_util_open() */
 | 
					/* always return false for selinux_util_open() */
 | 
				
			||||||
#define selinux_util_open() (0)
 | 
					#define selinux_util_open() (0)
 | 
				
			||||||
#define selinux_util_label(x) do { } while(0)
 | 
					#define selinux_util_label(x) do { } while (0)
 | 
				
			||||||
#define selinux_util_close() do { } while(0)
 | 
					#define selinux_util_close() do { } while (0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define selinux_setup(x) do { } while(0)
 | 
					#define selinux_setup(x) do { } while (0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								src/rc/rc.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								src/rc/rc.c
									
									
									
									
									
								
							@@ -281,15 +281,10 @@ open_shell(void)
 | 
				
			|||||||
	struct passwd *pw;
 | 
						struct passwd *pw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __linux__
 | 
					#ifdef __linux__
 | 
				
			||||||
	const char *sys = NULL;
 | 
						const char *sys = rc_sys();
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	sys = detect_container();
 | 
					 | 
				
			||||||
	if (!sys)
 | 
					 | 
				
			||||||
		sys = detect_vm();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* VSERVER and OPENVZ systems cannot really drop to shells */
 | 
						/* VSERVER systems cannot really drop to shells */
 | 
				
			||||||
	if (sys &&
 | 
						if (sys && strcmp(sys, RC_SYS_VSERVER) == 0)
 | 
				
			||||||
	    (strcmp(sys, "VSERVER") == 0 || strcmp(sys, "OPENVZ") == 0))
 | 
					 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		execl("/sbin/halt", "/sbin/halt", "-f", (char *) NULL);
 | 
							execl("/sbin/halt", "/sbin/halt", "-f", (char *) NULL);
 | 
				
			||||||
		eerrorx("%s: unable to exec `/sbin/halt': %s",
 | 
							eerrorx("%s: unable to exec `/sbin/halt': %s",
 | 
				
			||||||
@@ -491,10 +486,7 @@ do_sysinit()
 | 
				
			|||||||
	    uts.machine);
 | 
						    uts.machine);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sys = detect_container();
 | 
						if ((sys = rc_sys()))
 | 
				
			||||||
	if (!sys)
 | 
					 | 
				
			||||||
		sys = detect_vm();
 | 
					 | 
				
			||||||
	if (sys)
 | 
					 | 
				
			||||||
		printf(" [%s]", sys);
 | 
							printf(" [%s]", sys);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("%s\n\n", ecolor(ECOLOR_NORMAL));
 | 
						printf("%s\n\n", ecolor(ECOLOR_NORMAL));
 | 
				
			||||||
@@ -509,10 +501,7 @@ do_sysinit()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* init may have mounted /proc so we can now detect or real
 | 
						/* init may have mounted /proc so we can now detect or real
 | 
				
			||||||
	 * sys */
 | 
						 * sys */
 | 
				
			||||||
	sys = detect_container();
 | 
						if ((sys = rc_sys()))
 | 
				
			||||||
	if (!sys)
 | 
					 | 
				
			||||||
		sys = detect_vm();
 | 
					 | 
				
			||||||
	if (sys)
 | 
					 | 
				
			||||||
		setenv("RC_SYS", sys, 1);
 | 
							setenv("RC_SYS", sys, 1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -832,9 +821,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
			eerrorx("%s: %s", applet, strerror(errno));
 | 
								eerrorx("%s: %s", applet, strerror(errno));
 | 
				
			||||||
			/* NOTREACHED */
 | 
								/* NOTREACHED */
 | 
				
			||||||
		case 'S':
 | 
							case 'S':
 | 
				
			||||||
			systype = detect_container();
 | 
								systype = rc_sys();
 | 
				
			||||||
			if (!systype)
 | 
					 | 
				
			||||||
				systype = detect_vm();
 | 
					 | 
				
			||||||
			if (systype)
 | 
								if (systype)
 | 
				
			||||||
				printf("%s\n", systype);
 | 
									printf("%s\n", systype);
 | 
				
			||||||
			exit(EXIT_SUCCESS);
 | 
								exit(EXIT_SUCCESS);
 | 
				
			||||||
@@ -843,6 +830,8 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (strcmp(applet, "rc") == 0)
 | 
				
			||||||
 | 
							ewarnv("rc is deprecated, please use openrc instead.");
 | 
				
			||||||
	newlevel = argv[optind++];
 | 
						newlevel = argv[optind++];
 | 
				
			||||||
	/* To make life easier, we only have the shutdown runlevel as
 | 
						/* To make life easier, we only have the shutdown runlevel as
 | 
				
			||||||
	 * nothing really needs to know that we're rebooting.
 | 
						 * nothing really needs to know that we're rebooting.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@
 | 
				
			|||||||
#include <utime.h>
 | 
					#include <utime.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "einfo.h"
 | 
					#include "einfo.h"
 | 
				
			||||||
 | 
					#include "rc.h"
 | 
				
			||||||
#include "rc-misc.h"
 | 
					#include "rc-misc.h"
 | 
				
			||||||
#include "_usage.h"
 | 
					#include "_usage.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -85,12 +85,14 @@ eend $? "Trailing newlines need to be deleted:"$'\n'"${out}"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ebegin "Checking for obsolete functions"
 | 
					ebegin "Checking for obsolete functions"
 | 
				
			||||||
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
 | 
					out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
 | 
				
			||||||
 | 
						! -name queue.h \
 | 
				
			||||||
	-exec grep -n -E '\<(malloc|memory|sys/(errno|fcntl|signal|stropts|termios|unistd))\.h\>' {} +)
 | 
						-exec grep -n -E '\<(malloc|memory|sys/(errno|fcntl|signal|stropts|termios|unistd))\.h\>' {} +)
 | 
				
			||||||
[ -z "${out}" ]
 | 
					[ -z "${out}" ]
 | 
				
			||||||
eend $? "Avoid these obsolete functions:"$'\n'"${out}"
 | 
					eend $? "Avoid these obsolete functions:"$'\n'"${out}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ebegin "Checking for x* func usage"
 | 
					ebegin "Checking for x* func usage"
 | 
				
			||||||
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
 | 
					out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
 | 
				
			||||||
 | 
						! -name queue.h \
 | 
				
			||||||
	-exec grep -n -E '\<(malloc|strdup)[[:space:]]*\(' {} + \
 | 
						-exec grep -n -E '\<(malloc|strdup)[[:space:]]*\(' {} + \
 | 
				
			||||||
	| grep -v \
 | 
						| grep -v \
 | 
				
			||||||
		-e src/includes/helpers.h \
 | 
							-e src/includes/helpers.h \
 | 
				
			||||||
@@ -100,6 +102,7 @@ eend $? "These need to be using the x* variant:"$'\n'"${out}"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ebegin "Checking spacing style"
 | 
					ebegin "Checking spacing style"
 | 
				
			||||||
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
 | 
					out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
 | 
				
			||||||
 | 
						! -name queue.h \
 | 
				
			||||||
	-exec grep -n -E \
 | 
						-exec grep -n -E \
 | 
				
			||||||
		-e '\<(for|if|switch|while)\(' \
 | 
							-e '\<(for|if|switch|while)\(' \
 | 
				
			||||||
		-e '\<(for|if|switch|while) \( ' \
 | 
							-e '\<(for|if|switch|while) \( ' \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,3 @@ LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBR
 | 
				
			|||||||
PATH=${top_builddir}/src/rc:${PATH}
 | 
					PATH=${top_builddir}/src/rc:${PATH}
 | 
				
			||||||
export LD_LIBRARY_PATH PATH
 | 
					export LD_LIBRARY_PATH PATH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd ${top_srcdir}/src/rc
 | 
					 | 
				
			||||||
${MAKE:-make} links >/dev/null
 | 
					 | 
				
			||||||
cd -
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user