Android 9 - failure with root acess enabled
Description:
Hi
I'm trying to use syncopoli to save most of my android device (all apps preferences among others).
I need to access /data/data to push it to a remote host. This require root access. However, ssh binary tries to load config from a strange path "//.ssh".
After investigation I noticed that env vars HOME and SSH_PASSWORD are not kept after execution of su --preserve-environment.
I reproduced with 2 ways :
manually
adb root adb shell run-as org.amoradi.syncopoli SSH_PASSWORD=p@ssw0rd echo $HOME echo $SSH_PASSWORD su --preserve-environment --command sh echo $HOME echo $SSH_PASSWORD set
by modifying the source code to show env vars in log
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9ed4b05..a4894e2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.amoradi.syncopoli">
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
diff --git a/app/src/main/java/org/amoradi/syncopoli/BackupHandler.java b/app/src/main/java/org/amoradi/syncopoli/BackupHandler.java
index e61a3c8..660f985 100644
--- a/app/src/main/java/org/amoradi/syncopoli/BackupHandler.java
+++ b/app/src/main/java/org/amoradi/syncopoli/BackupHandler.java
@@ -390,7 +390,7 @@ public class BackupHandler implements IBackupHandler {
final_cmd.add("su");
final_cmd.add("--preserve-environment");
final_cmd.add("--command");
- final_cmd.add(sb.toString());
+ final_cmd.add("set");
Log.d(TAG, "with su: " + final_cmd.toString());
} else {
Configs (local and global, remove personal info):
LineageOS 16 (Android 9) on a Samsung Galaxy S5 SM-G900F + su from Lineage
Setup Syncopoli with a task to upload /data/data to a server.
Logcat output (see readme on how to get this):
I will add soon a logcat, in-app log and output with manual attempt as described above.
Solution
I'm searching for an acceptable solution, but without success so far (I lack experience with Android development)
- find a ssh binary which has an argument to specify path to .ssh folder