uncommited
This commit is contained in:
		
							
								
								
									
										117
									
								
								arch-user/bin/wsudo
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										117
									
								
								arch-user/bin/wsudo
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,117 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| parse() { | ||||
| 	sudo_user="root" | ||||
| 	sudo_command="" | ||||
| 	sudo_login_shell="" | ||||
| 	local args=("$@") | ||||
| 	local i=0 | ||||
| 	local arg_count=${#args[@]} | ||||
| 	while [[ $i -lt $arg_count ]]; do | ||||
| 		case "${args[$i]}" in | ||||
| 			-u|--user) | ||||
| 				((i++)) | ||||
| 				if [[ $i -lt $arg_count ]]; then | ||||
| 					sudo_user="${args[$i]}" | ||||
| 				fi | ||||
| 				((i++)) | ||||
| 				;; | ||||
| 			-i|--login) | ||||
| 				sudo_login_shell=true | ||||
| 				((i++)) | ||||
| 				;; | ||||
| 			-s|--shell) | ||||
| 				((i++)) | ||||
| 				;; | ||||
| 			--) | ||||
| 				((i++)) | ||||
| 				sudo_command="${args[*]:$i}" | ||||
| 				break | ||||
| 				;; | ||||
| 			-*) | ||||
| 				((i++)) | ||||
| 				;; | ||||
| 			su) | ||||
| 				((i++)) | ||||
| 				local su_user="" | ||||
| 				while [[ $i -lt $arg_count ]]; do | ||||
| 					case "${args[$i]}" in | ||||
| 						-|-l|--login) | ||||
| 							sudo_login_shell=true | ||||
| 							((i++)) | ||||
| 							;; | ||||
| 						-c|--command) | ||||
| 							((i++)) | ||||
| 							if [[ $i -lt $arg_count ]]; then | ||||
| 								sudo_command="${args[$i]}" | ||||
| 								((i++)) | ||||
| 							fi | ||||
| 							;; | ||||
| 						--session-command=*) | ||||
| 							sudo_command="${args[$i]#*=}" | ||||
| 							((i++)) | ||||
| 							;; | ||||
| 						-m|-p|--preserve-environment) | ||||
| 							((i++)) | ||||
| 							;; | ||||
| 						-s|--shell) | ||||
| 							((i++)) | ||||
| 							if [[ $i -lt $arg_count && "${args[$i]}" != -* ]]; then | ||||
| 								((i++)) | ||||
| 							fi | ||||
| 							;; | ||||
| 						-*) | ||||
| 							((i++)) | ||||
| 							;; | ||||
| 						*) | ||||
| 							if [[ -z "$su_user" ]]; then | ||||
| 								su_user="${args[$i]}" | ||||
| 								((i++)) | ||||
| 							else | ||||
| 								((i++)) | ||||
| 							fi | ||||
| 							;; | ||||
| 					esac | ||||
| 				done | ||||
| 				if [[ -n "$su_user" ]]; then | ||||
| 					sudo_user="$su_user" | ||||
| 				fi | ||||
| 				break | ||||
| 				;; | ||||
| 			*) | ||||
| 				sudo_command="${args[*]:$i}" | ||||
| 				break | ||||
| 				;; | ||||
| 		esac | ||||
| 	done | ||||
| } | ||||
| parse "$@" | ||||
|  | ||||
| [ -z "$WSCOMPAT_MASTER" ] && WSCOMPAT_MASTER="$(whoami)" | ||||
| read -r -d '' init_cmd << WSCOMPAT_EOF_9oqn7IVF || true | ||||
| 	export WS_IS_COMPAT=1 | ||||
| 	export WSCOMPAT_MASTER="$WSCOMPAT_MASTER" | ||||
| 	export WSCOMPAT_DIR="/tmp/wscompat_${WSCOMPAT_MASTER}_\$(whoami)" | ||||
| 	rm -rf "\$WSCOMPAT_DIR" && mkdir -p "\$WSCOMPAT_DIR" && chmod 700 "\$WSCOMPAT_DIR" | ||||
| 	cat << 'WSCOMPAT_EOF_84EbM3la' > "\$WSCOMPAT_DIR/profile" | ||||
| $( | ||||
| 	sed 's/WSCOMPAT_EOF_/WSCOMPAT_EOF__/g' "$WSCOMPAT_DIR/profile" | ||||
| 	for file in "$WSCOMPAT_DIR.profile"*.sh; do | ||||
| 		if [ -f "$file" ]; then | ||||
| 			sed 's/WSCOMPAT_EOF_/WSCOMPAT_EOF__/g' "$file" | ||||
| 		fi | ||||
| 	done | ||||
| ) | ||||
| WSCOMPAT_EOF_84EbM3la | ||||
| 	. \$WSCOMPAT_DIR/profile | ||||
| WSCOMPAT_EOF_9oqn7IVF | ||||
|  | ||||
| if [ -z "$sudo_command" ]; then | ||||
| 	sudo_command="exec /bin/bash --rcfile \"\$WSCOMPAT_DIR/bashrc\"" | ||||
| fi | ||||
| if [ "$sudo_login_shell" ]; then | ||||
| 	bash_flags="--login --noprofile --norc"; | ||||
| else | ||||
| 	bash_flags="--noprofile --norc"; | ||||
| fi | ||||
| exec /bin/sudo -u "$sudo_user" /bin/bash $bash_flags -c "$init_cmd; $sudo_command" | ||||
		Reference in New Issue
	
	Block a user