1
0
mirror of http://galexander.org/git/simplesshd.git synced 2024-12-29 09:28:07 +00:00

build scp as a separate executable

This commit is contained in:
Greg Alexander 2014-12-21 14:58:24 -05:00
parent 226a02ff38
commit 7f0a8a63c0
6 changed files with 40 additions and 26 deletions

2
doit
View File

@ -1 +1 @@
ndk-build -j8 && ant debug && cat bin/SimpleSSHD-debug.apk | ssh roach 'cat > /sdcard/buh.apk; source .profile; pm install -r /sdcard/buh.apk'
ndk-build -j8 && mv libs/armeabi/scp libs/armeabi/libscp.so && ant debug && cat bin/SimpleSSHD-debug.apk | ssh roach 'cat > /sdcard/buh.apk; source .profile; pm install -r /sdcard/buh.apk'

View File

@ -574,29 +574,19 @@ int spawn_command(void(*exec_fn)(void *user_data), void *exec_data,
* re-enabled SIGPIPE. If cmd is NULL, will run a login shell.
*/
void run_shell_command(const char* cmd, unsigned int maxfd, char* usershell) {
char * argv[100];
char * argv[4];
char * baseshell = NULL;
unsigned int i;
/* Re-enable SIGPIPE for the executed process */
if (signal(SIGPIPE, SIG_DFL) == SIG_ERR) {
dropbear_exit("signal() error");
}
/* close file descriptors except stdin/stdout/stderr
* Need to be sure FDs are closed here to avoid reading files as root */
for (i = 3; i <= maxfd; i++) {
m_close(i);
}
baseshell = basename(usershell);
if (cmd && !strncmp(cmd, "scp ", 4)) {
int argc = split_cmd(cmd, argv, sizeof argv/sizeof argv[0]);
scp_main(argc, argv);
exit(0);
char *t = malloc(strlen(cmd)+strlen(NDK_EXECUTABLES_PATH)+80);
sprintf(t, "%s/lib%s.so %s", NDK_EXECUTABLES_PATH, "scp",
cmd+4);
cmd = t;
}
baseshell = basename(usershell);
if (cmd != NULL) {
argv[0] = baseshell;
} else {
@ -615,6 +605,17 @@ void run_shell_command(const char* cmd, unsigned int maxfd, char* usershell) {
argv[1] = NULL;
}
/* Re-enable SIGPIPE for the executed process */
if (signal(SIGPIPE, SIG_DFL) == SIG_ERR) {
dropbear_exit("signal() error");
}
/* close file descriptors except stdin/stdout/stderr
* Need to be sure FDs are closed here to avoid reading files as root */
for (i = 3; i <= maxfd; i++) {
m_close(i);
}
execv(usershell, argv);
}

View File

@ -302,7 +302,6 @@ void tolocal(int, char *[]);
void toremote(char *, int, char *[]);
void usage(void);
#if defined(DBMULTI_scp) || !defined(DROPBEAR_MULTI)
#if defined(DBMULTI_scp) && defined(DROPBEAR_MULTI)
int scp_main(int argc, char **argv)
#else
@ -453,7 +452,6 @@ main(int argc, char **argv)
}
exit(errs != 0);
}
#endif /* DBMULTI_scp stuff */
void
toremote(char *targ, int argc, char **argv)

View File

@ -5,7 +5,7 @@ include $(CLEAR_VARS)
LOCAL_CFLAGS :=
LOCAL_MODULE := simplesshd-jni
DROPBEAR_PATH := ../dropbear/
DROPBEAR_PATH := ../dropbear
DROPBEAR_SRCS := $(DROPBEAR_PATH)/atomicio.c \
$(DROPBEAR_PATH)/bignum.c \
$(DROPBEAR_PATH)/buffer.c \
@ -449,8 +449,6 @@ DROPBEAR_SRCS := $(DROPBEAR_PATH)/atomicio.c \
$(DROPBEAR_PATH)/progressmeter.c \
$(DROPBEAR_PATH)/queue.c \
$(DROPBEAR_PATH)/rsa.c \
$(DROPBEAR_PATH)/scp.c \
$(DROPBEAR_PATH)/scpmisc.c \
$(DROPBEAR_PATH)/signkey.c \
$(DROPBEAR_PATH)/sshpty.c \
$(DROPBEAR_PATH)/svr-agentfwd.c \
@ -473,3 +471,20 @@ LOCAL_C_INCLUDES:= dropbear dropbear/libtomcrypt/src/headers dropbear/libtommath
# LOCAL_LDLIBS :=
include $(BUILD_SHARED_LIBRARY)
# build separate scp executable
include $(CLEAR_VARS)
LOCAL_CFLAGS :=
LOCAL_MODULE := scp
DROPBEAR_PATH := ../dropbear
LOCAL_SRC_FILES := $(DROPBEAR_PATH)/scp.c \
$(DROPBEAR_PATH)/scpmisc.c \
$(DROPBEAR_PATH)/atomicio.c
LOCAL_C_INCLUDES:= dropbear dropbear/libtomcrypt/src/headers dropbear/libtommath
# LOCAL_LDLIBS :=
include $(BUILD_EXECUTABLE)

View File

@ -19,6 +19,7 @@
#define HAVE_BASENAME 1
#define HAVE_NETINET_TCP_H 1
#define HAVE_LIBGEN_H 1
#define USE_DEV_PTMX 1
#define DISABLE_ZLIB 1
@ -27,17 +28,16 @@
#define DROPBEAR_SERVER 1
#define DBMULTI_dropbear 1
#define DBMULTI_scp 1
#define DROPBEAR_MULTI 1
#define NDK_EXECUTABLES_PATH "/data/data/org.galexander.sshd/lib"
/* in jni/interface.c: */
extern const char *conf_path;
extern const char *conf_shell;
extern const char *conf_home;
const char *conf_path_file(const char *fn);
int split_cmd(const char *in, char **argv, int max_argc);
#endif /* __CONFIG_H__ */

View File

@ -54,7 +54,7 @@ jni_init(JNIEnv *env_)
}
/* split str into argv entries, honoring " and \ (but nothing else) */
int
static int
split_cmd(const char *in, char **argv, int max_argc)
{
char curr[1000];