From 7a52f700e70aa6a96e4358afcc64d043a60e868f Mon Sep 17 00:00:00 2001 From: Max Lv Date: Wed, 19 Dec 2012 19:40:34 +0800 Subject: [PATCH] disable redirect for commands --- jni/termExec.cpp | 32 +++++++++++++++++--------- libs/armeabi/libexec.so | Bin 17576 -> 17576 bytes src/com/github/shadowsocks/Exec.java | 3 ++- src/com/github/shadowsocks/Utils.java | 7 +++--- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/jni/termExec.cpp b/jni/termExec.cpp index d7089e11..f8881eda 100644 --- a/jni/termExec.cpp +++ b/jni/termExec.cpp @@ -99,7 +99,7 @@ static int throwOutOfMemoryError(JNIEnv *env, const char *message) return env->ThrowNew(exClass, message); } -static int create_subprocess(const char *cmd, char *const argv[], +static int create_subprocess(const int rdt, const char *cmd, char *const argv[], char *const envp[], const char* scripts, int* pProcessId) { pid_t pid; @@ -107,7 +107,10 @@ static int create_subprocess(const char *cmd, char *const argv[], int pfds2[2]; pipe(pfds); - pipe(pfds2); + + if (rdt) { + pipe(pfds2); + } pid = fork(); @@ -127,9 +130,13 @@ static int create_subprocess(const char *cmd, char *const argv[], dup2(pfds[0], 0); close(pfds[1]); - dup2(pfds2[1], 1); - dup2(pfds2[1], 2); - close(pfds2[0]); + if (rdt) { + close(1); + close(2); + dup2(pfds2[1], 1); + dup2(pfds2[1], 2); + close(pfds2[0]); + } execv(cmd, argv); @@ -144,15 +151,18 @@ static int create_subprocess(const char *cmd, char *const argv[], close(pfds[0]); write(pfds[1], scripts, strlen(scripts)+1); - - close(pfds2[1]); - return pfds2[0]; + if (rdt) { + close(pfds2[1]); + return pfds2[0]; + } else { + return -1; + } } } static jobject android_os_Exec_createSubProcess(JNIEnv *env, jobject clazz, - jstring cmd, jobjectArray args, jobjectArray envVars, jstring scripts, + jint rdt, jstring cmd, jobjectArray args, jobjectArray envVars, jstring scripts, jintArray processIdArray) { const jchar* str = cmd ? env->GetStringCritical(cmd, 0) : 0; @@ -215,7 +225,7 @@ static jobject android_os_Exec_createSubProcess(JNIEnv *env, jobject clazz, } int procId; - int ptm = create_subprocess(cmd_8.string(), argv, envp, scripts_8.string(), + int ptm = create_subprocess(rdt, cmd_8.string(), argv, envp, scripts_8.string(), &procId); if (argv) { @@ -324,7 +334,7 @@ static int register_FileDescriptor(JNIEnv *env) static const char *classPathName = "com/github/shadowsocks/Exec"; static JNINativeMethod method_table[] = { - { "createSubprocess", "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)Ljava/io/FileDescriptor;", + { "createSubprocess", "(ILjava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)Ljava/io/FileDescriptor;", (void*) android_os_Exec_createSubProcess }, { "waitFor", "(I)I", (void*) android_os_Exec_waitFor}, diff --git a/libs/armeabi/libexec.so b/libs/armeabi/libexec.so index a9659fc7f245281b1f20f9816a614a497eef1e7b..54d9372b768fb06724fe31680e57508c89913ed0 100755 GIT binary patch delta 2141 zcmZveeQZ-z6u{4YUAqo8(y_61+uios$Dmtb9|$_Ik*$nMee2n1`Z3BJyQ? zLzW0c$k>CVTf>Js!Vss0Moe@X4B%G=X`_GWQnB;vLFjAHENMiu=Xu@Rcw208-aWs2 z&OP_sb8h?Edyw=VBpt2hfhvH3qno#8>~aI75cxm_ zK%Ji9738mx=jc3$Jd9kc^F8D_c;B@9q?I_^j1_Q)J~1zvy5w-s)S1_vMvG}DZ$AaI zz?~jugcuiq?^?Tjr_3^n(v$$sg9Y&Wq;>$CG$T9Ey! zQy5D5v2-D=Ku_RS@m)Mrq+^8hx@9HrZ`j8Jmo7cZgBzmGp=CU&ZUZ%WDM32G1(DXF zK8{FVWmk#Lp&n-^1X>nSZQpvHq3O8K;}iDrV!U*}nmmvo3&@v`Ee%IVcOL+Eenoya zR6yj{*!{ipyHb0*Ai8yEbWb6{r1rGno&o6QnUh)tpe(?1!YYQ(mv&Bfh*x6&m&VA5 z@wj7Y)aq$OB8;Afwby*gazag3Crkl6aM&NybV~^gMq?1U6C;icOusT=#U~_ORMRs8 zURqA=DcvNd&T%F-6&>y>Q%(^KlNq)P;If2^Y1#rc`IkbjgX>;|phsL`&_6S5OW9|n z?7!%C2JKO$0M}DPM+&ei;L7>QDcnr;=mkD!9!s@Zro+ss;N^Lk2C*gJB4IVzqgZt9v|`q^ZY3+|qMrT^ zyd3ZF=lQ#zVXLs^*sgGq44k!>kw$CgSFmQH8zRrkQ?TFdvcCC#}P=G3j3VaWxU_u6CGm7z zJHc3a{Bd9v+0|4--Bddf7CxSk%g|nfj9;}lVe7n6**QMb7H1pT@%6h>_5ryVBUo5% z#Wq}DI8H)bmhI!TF&>ll=VcdeTLfUi#B3-tQ7TZ5q1;?3eUSGmDGHV4zez}QsL!55 z$WG~tf;Hq>si1H#SsFTCn8T1O(mDDZ>65aG&yxM2kBZk2(h|xleK(C6xfi;~dD9E$ z{;l4z*3G@`*2W8DUoZ&m_{#`wnbI_OWqJQ^s(4vN!SS5+LR%b1XlL5eepf}(OWN!> z27~XlEemaOzhWYdQg&62q*hLsMk?z=bye|cA>k1l$rkX}SbM>*!*}OulxFGR;=Sd7 z@Bdts+ctbF;@FO|1NFCXJcd$_dJxB}p}BSI8D>tAbi`X?_Fx>3bivD+Q-2wxA5qid K3n8-PEcp+i#&)p) delta 2077 zcmZvde{54#6vxkf{jnm0>^G&{ZEvlEZXGKu!vAP4ErX$-(;HUOW-r3^5T zEA$xLWKg(lC=WU@nHIxn@Q-ox4W08Zkgw|aEb@IF47fCpxVMJ+^_<9gT`+me~rv)+>U$|*{JcS$U{2)1o8vq3z~ijSznDI zJwtHff(1P%bQ@+)Vkh!_o$i~&uOM4zj|bQ~i93-Sb$Z|0NeeOL=c=)+ zT80;q_aN73d<}UJd9lV1k?$fa&y#Yad=plnI)28~Fm?GyF(WOeyeSd{N-H3~3ye8&>1?5M&WM%>XW z+xZdoBukgjYE;1fBG=7XMM7IaMetPWNol|n(`eAr zNG6GvhB<2JHy)6sx~v70pO=-T`mDJOu3b(+awtVAaxnRMSu_3{vrekab0S_^MXl<5 zN?6_?JrFJZfVas_cl1gi>h`pz0kiXU}m@bcKBqePduA; z@b!L{Mp{Q*)lJwvfNHHyt(l-6NXya(BH$%=iF5pO0tOmX+?rW3N0v5=FgxgNNGsKy zqE(ktW4$bG6Uh~|`V~s+0;1B!GLckZ!z7=`sG~=;AQgzvvlyHCx(KW+y{-Q9BG}2k zJAYi@x*GA#Zw1(oW=30Rg)->GNfd2p2EZ+}GicM1>(Ls7jm5JVn<#V^pAMeSxcsiM zLY&S3E2f=+`P4;~8_3dEnQXce_4&xMbRz_| z7th!OXr#GXhb^0U=p3gRwOTf0k?`)$!M6d`L(~{I<1_kX^z* zGuM&L!dhD!Srbp%3K{aVaFf14&I$g~qhw$FUguc`Z;q|;Z~2bJ zGxv6bGM*$mV=-vQcN>JB5(2K;ss}gZ;00L@KF0BwVu$xf|pBvOJPsgKtyi1I^;M&x)2O>|Wkhb*UEXk9Io` zU%&V*UxBt2=PPk+L2JVK792a`b3Lyz%w3zX*IQ-+^aH|4ufwE%@`Yb 0) { read = stdout.read(buf); - if (result != null) - result.append(new String(buf, 0, read)); + result.append(new String(buf, 0, read)); } } catch (Exception ex) {