mirror of
				https://github.com/mintty/wsltty.git
				synced 2025-10-30 22:54:03 +00:00 
			
		
		
		
	static linking of wslbridge-backend to make it work in all distros (#156),
own (partial) implementation of getpwuid to this aim
This commit is contained in:
		
							
								
								
									
										11
									
								
								makefile
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								makefile
									
									
									
									
									
								
							| @@ -8,10 +8,10 @@ | ||||
|  | ||||
|  | ||||
| # wsltty release | ||||
| ver=3.0.0 | ||||
| ver=3.0.0.2 | ||||
|  | ||||
| # wsltty appx release - must have 4 parts! | ||||
| verx=3.0.0.0 | ||||
| verx=3.0.0.2 | ||||
|  | ||||
| # Windows SDK version for appx | ||||
| WINSDKKEY=/HKEY_LOCAL_MACHINE/SOFTWARE/WOW6432Node/Microsoft/.NET Framework Platform/Setup/Multi-Targeting Pack | ||||
| @@ -121,20 +121,21 @@ wslbridge-package: | ||||
|  | ||||
| wslbridge-source:	wslbridge-$(wslbridge-commit).zip | ||||
| 	unzip -o wslbridge-$(wslbridge-commit).zip | ||||
| 	cd wslbridge-$(wslbridge-commit)/backend; patch -p1 < ../../wslbridge-backend-static.patch | ||||
| 	tr -d '\015' < wslbridge-$(wslbridge-commit)/LICENSE.txt > LICENSE.wslbridge | ||||
|  | ||||
| wslbridge-$(wslbridge-commit).zip: | ||||
| 	$(wgeto) https://github.com/rprichard/wslbridge/archive/$(wslbridge-commit).zip -o wslbridge-$(wslbridge-commit).zip | ||||
|  | ||||
| wslbridge-frontend:	wslbridge-source | ||||
| 	echo ------------- Compiling wslbridge frontend | ||||
| 	cd wslbridge-$(wslbridge-commit)/frontend; make | ||||
| 	strip wslbridge-$(wslbridge-commit)/out/wslbridge.exe | ||||
| 	mkdir -p bin | ||||
| 	cp wslbridge-$(wslbridge-commit)/out/wslbridge.exe bin/ | ||||
|  | ||||
| wslbridge-backend:	wslbridge-source bin/wslbridge-backend | ||||
|  | ||||
| bin/wslbridge-backend: | ||||
| wslbridge-backend:	wslbridge-source | ||||
| 	echo ------------- Compiling wslbridge backend | ||||
| 	cd wslbridge-$(wslbridge-commit)/backend; if uname -m | grep x86_64; then cmd /C wsl make; else wslbridge make; fi | ||||
| 	mkdir -p bin | ||||
| 	cp wslbridge-$(wslbridge-commit)/out/wslbridge-backend bin/ | ||||
|   | ||||
							
								
								
									
										61
									
								
								wslbridge-backend-static.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								wslbridge-backend-static.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| diff -rup orig/Makefile new/Makefile | ||||
| --- orig/Makefile	2018-05-06 01:12:36.000000000 +0200 | ||||
| +++ new/Makefile	2019-05-01 08:16:53.647051200 +0200 | ||||
| @@ -5,7 +5,7 @@ all : ../out/wslbridge-backend | ||||
|  ../out/wslbridge-backend : wslbridge-backend.cc ../common/SocketIo.cc ../common/SocketIo.h ../VERSION.txt Makefile | ||||
|  	mkdir -p ../out | ||||
|  	$(CXX) -std=c++11 -fno-exceptions \ | ||||
| -		-static-libgcc -static-libstdc++ \ | ||||
| +		-static -static-libgcc -static-libstdc++ \ | ||||
|  		-D_GNU_SOURCE \ | ||||
|  		-DWSLBRIDGE_VERSION=$(shell cat ../VERSION.txt) \ | ||||
|  		-Wall -O2 $< ../common/SocketIo.cc -o $@ -lutil -pthread | ||||
| diff -rup orig/wslbridge-backend.cc new/wslbridge-backend.cc | ||||
| --- orig/wslbridge-backend.cc	2018-05-06 01:12:36.000000000 +0200 | ||||
| +++ new/wslbridge-backend.cc	2019-05-01 08:19:12.799688500 +0200 | ||||
| @@ -494,6 +494,45 @@ static void frontendVersionCheck(const c | ||||
|   | ||||
|  } // namespace | ||||
|   | ||||
| +#define getpwuid _getpwuid | ||||
| + | ||||
| +struct passwd * getpwuid(int uid) | ||||
| +{ | ||||
| +    FILE * pwd = fopen("/etc/passwd", "r"); | ||||
| +    if (pwd) { | ||||
| +        char pwbuf[222]; | ||||
| +        static struct passwd pw; | ||||
| +        pw.pw_shell = 0; | ||||
| +        while (fgets(pwbuf, sizeof pwbuf, pwd)) { | ||||
| +            char * sep = strchr(pwbuf, ':'); | ||||
| +            if (!sep) continue; | ||||
| +            sep = strchr(++sep, ':'); | ||||
| +            if (!sep) continue; | ||||
| +            int pwuid; | ||||
| +            if (sscanf(sep, ":%d:", &pwuid) == 1 && pwuid == uid) { | ||||
| +                // pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell | ||||
| +                //                  ^ | ||||
| +                sep = strchr(++sep, ':'); | ||||
| +                if (!sep) continue; | ||||
| +                sep = strchr(++sep, ':'); | ||||
| +                if (!sep) continue; | ||||
| +                sep = strchr(++sep, ':'); | ||||
| +                if (!sep) continue; | ||||
| +                sep = strchr(++sep, ':'); | ||||
| +                if (!sep) continue; | ||||
| +                pw.pw_shell = ++sep; | ||||
| +                sep = strchr(++sep, '\n'); | ||||
| +                if (sep) | ||||
| +                    *sep = 0; | ||||
| +                break; | ||||
| +            } | ||||
| +        } | ||||
| +        fclose(pwd); | ||||
| +        return &pw; | ||||
| +    } | ||||
| +    return 0; | ||||
| +} | ||||
| + | ||||
|  int main(int argc, char *argv[]) { | ||||
|   | ||||
|      // If the backend crashes, it prints a message to its stderr, which is a | ||||
		Reference in New Issue
	
	Block a user