X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=2.6 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW,RCVD_IN_SORBS_WEB,SPF_PASS X-Spam-Check-By: sourceware.org Message-ID: <009401ca9ddb$5da73bc0$ade37cc1@shem> From: "Dmitry Sheremetev" To: Subject: Can't start bash after set*id Date: Mon, 25 Jan 2010 18:27:26 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Hello, All! I start my pogram (compiled with using cygwin1.dll) as a user 1000 from "Administrators" group. When my program switches E*ID and RE*ID to another user 1013 from Users group and then starts a bash (via execv()) with a script in a parameters, bash fails (Process1312, exception C0000142 at 77FB17A4). When my program switches E*ID and RE*ID to another user 500 from Administrators group, bash works perfectly. Why it may be? A program behaviour is same and for using LSA module, and for password authentication with cygwin_logon_user() and cygwin_set_impersonation_token(). One important detail - after set*id, /usr/bin and /usr/lib disappear under any switched user, and therefore I mount them in /etc/fstab with "override" option: ====== /etc/fstab ======== D:/cygwin / ntfs binary,override,auto D:/cygwin/bin /usr/bin ntfs binary,override,auto D:/cygwin/lib /usr/lib ntfs binary,override,auto ====================== Fragment of my testing code: uid_t userID = 1013; gid_t groupID = 545; char *arg_list[] = { "D:/cygwin/bin/bash", "--login", "-c", "{ #!/bin/sh\n/cygdrive/E/writer.exe\n }", NULL }; child_pid = fork(); if(child_pid == 0) { setregid (groupID, -1); setregid (-1, groupID); setreuid(userID, -1); setreuid(-1, userID); execv(arg_list[0], arg_list); exit(0); } Here is fragment from strace output for abnormal work after switching to user 1013 and "Users" group 545 ("bash entering ReadFile loop" and then "Process 1312, exception C0000142 at 77FB17A4"): 404 404 [main] bash 1312 child_copy: cygheap - hp 0x2B0 low 0x6120C6E0, high 0x6120EFF4, res 1 172 576 [main] bash 1312 child_copy: done 168 744 [main] bash 1312 open_shared: name shared.5, n 5, shared 0x60FC0000 (wanted 0x60FC0000), h 0x358 106 850 [main] bash 1312 heap_init: heap base 0x680000, heap top 0x680000 83 933 [main] bash 1312 open_shared: name (null), n 1, shared 0x60FD0000 (wanted 0x60FD0000), h 0x348 73 1006 [main] bash 1312 user_shared_create: opening user shared for '' at 0x60FD0000 72 1078 [main] bash 1312 user_shared_create: user shared version 2E710001 94 1172 [main] bash (1312) open_shared: name (null), n 560, shared 0x60FF0000 (wanted 0x60FF0000), h 0x29C 299 1471 [main] bash 560 ********************************************** 68 1539 [main] bash 560 Program name: D:\cygwin\bin\bash.exe (pid 560, ppid 992) 66 1605 [main] bash 560 App version: 1007.1, api: 0.218 65 1670 [main] bash 560 DLL version: 1007.1, api: 0.218 65 1735 [main] bash 560 DLL build: 2009-12-07 11:48 69 1804 [main] bash 560 OS version: Windows NT-5.0 64 1868 [main] bash 560 Heap size: 402653184 64 1932 [main] bash 560 ********************************************** [...] 210 7423 [main] bash 560 events_init: windows_system_directory 'C:\SBIN\system32\', windows_system_directory_length 17 114 7537 [main] bash 560 dll_crt0_0: finished dll_crt0_0 initialization 1142 8679 [main] bash 560 _cygtls::remove: wait 0xFFFFFFFF 161 8840 [main] bash 560 _cygtls::remove: removed 0x22CE64 element 0 166 9006 [main] bash 560 _cygtls::remove: wait 0xFFFFFFFF 80 9086 [main] bash 560 _cygtls::remove: removed 0x22CE64 element 0 122 9208 [main] bash 560 _cygtls::remove: wait 0xFFFFFFFF 74 9282 [main] bash 560 _cygtls::remove: removed 0x22CE64 element 0 144 9426 [main] bash 560 _cygtls::remove: wait 0xFFFFFFFF 77 9503 [main] bash 560 _cygtls::remove: removed 0x22CE64 element 0 1750 11253 [sig] bash 560 wait_sig: entering ReadFile loop, my_readsig 0x32C, my_sendsig 0x324 --- Process 1312, exception C0000142 at 77FB17A4 72834 143553 [proc_waiter] sw 992 pinfo::maybe_set_exit_code_from_windows: pid 560, exit value - old 0x0, windows 0x0, cygwin 0x8000000 And here is fragment from strace for normal work after switching to user 500 and "Administrators" group 544 ("bash entering ReadFile loop" and then "_cygwin_istext_for_stdio: fd 0: opened as binary"): 894 894 [main] bash 164 child_copy: cygheap - hp 0x2B0 low 0x6120C6E0, high 0x6120EFB4, res 1 167 1061 [main] bash 164 child_copy: done 165 1226 [main] bash 164 open_shared: name shared.5, n 5, shared 0x60FC0000 (wanted 0x60FC0000), h 0x358 99 1325 [main] bash 164 heap_init: heap base 0x680000, heap top 0x680000 81 1406 [main] bash 164 open_shared: name (null), n 1, shared 0x60FD0000 (wanted 0x60FD0000), h 0x348 70 1476 [main] bash 164 user_shared_create: opening user shared for '' at 0x60FD0000 69 1545 [main] bash 164 user_shared_create: user shared version 2E710001 90 1635 [main] bash (164) open_shared: name (null), n 992, shared 0x60FF0000 (wanted 0x60FF0000), h 0x29C 292 1927 [main] bash 992 ********************************************** 64 1991 [main] bash 992 Program name: D:\cygwin\bin\bash.exe (pid 992, ppid 1400) 63 2054 [main] bash 992 App version: 1007.1, api: 0.218 112 2166 [main] bash 992 DLL version: 1007.1, api: 0.218 65 2231 [main] bash 992 DLL build: 2009-12-07 11:48 66 2297 [main] bash 992 OS version: Windows NT-5.0 61 2358 [main] bash 992 Heap size: 402653184 63 2421 [main] bash 992 ********************************************** [...] 190 7913 [main] bash 992 events_init: windows_system_directory 'C:\SBIN\system32\', windows_system_directory_length 17 108 8021 [main] bash 992 dll_crt0_0: finished dll_crt0_0 initialization 500 8521 [main] bash 992 _cygtls::remove: wait 0xFFFFFFFF 124 8645 [main] bash 992 _cygtls::remove: removed 0x22CE64 element 0 148 8793 [main] bash 992 _cygtls::remove: wait 0xFFFFFFFF 74 8867 [main] bash 992 _cygtls::remove: removed 0x22CE64 element 0 107 8974 [main] bash 992 _cygtls::remove: wait 0xFFFFFFFF 70 9044 [main] bash 992 _cygtls::remove: removed 0x22CE64 element 0 139 9183 [main] bash 992 _cygtls::remove: wait 0xFFFFFFFF 72 9255 [main] bash 992 _cygtls::remove: removed 0x22CE64 element 0 3563 12818 [main] bash 992 _cygtls::remove: wait 0xFFFFFFFF 127 12945 [main] bash 992 _cygtls::remove: removed 0x22CE64 element 0 292 13237 [sig] bash 992 wait_sig: entering ReadFile loop, my_readsig 0x31C, my_sendsig 0x318 545 13782 [main] bash 992 _cygwin_istext_for_stdio: fd 0: opened as binary 77 13859 [main] bash 992 _cygwin_istext_for_stdio: fd 1: opened as binary 117 13976 [main] bash 992 _cygwin_istext_for_stdio: fd 2: opened as binary Best regards, Dmitry Sheremetev, Gomel, Belarus -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple