Skip to content
This repository has been archived by the owner on Jan 8, 2024. It is now read-only.

Commit

Permalink
Fix rirud readdir & display status on Magisk
Browse files Browse the repository at this point in the history
  • Loading branch information
yujincheng08 authored and RikkaW committed Jul 13, 2021
1 parent b85ac80 commit dd0297c
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 21 deletions.
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Mon Jul 12 12:36:51 CST 2021
#Mon Jul 12 21:05:17 CST 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
3 changes: 0 additions & 3 deletions riru/build.gradle
@@ -1,4 +1,3 @@
import org.apache.tools.ant.DirectoryScanner
import org.apache.tools.ant.filters.FixCrLfFilter
import org.apache.tools.ant.filters.ReplaceTokens

Expand All @@ -8,8 +7,6 @@ plugins {
id 'com.android.application'
}

DirectoryScanner.removeDefaultExclude('**/.gitattributes')

def versionNameShort = "v${riruApiVersion}.${versionNameMinor}.${versionNamePatch}"
def versionName = "${versionNameShort}.r${gitCommitCount}.${gitCommitId}"
def versionCode = gitCommitCount
Expand Down
3 changes: 3 additions & 0 deletions riru/src/main/java/riru/Daemon.java
Expand Up @@ -74,6 +74,7 @@ private void startWait(boolean allowRestart, boolean isFirst) {
DaemonUtils.resetNativeBridgeProp(DaemonUtils.getOriginalNativeBridge());

Log.i(TAG, "Riru loaded, stop rirud socket...");
DaemonUtils.writeStatus("Riru is loaded normally");
serverThread.stopServer();

try {
Expand All @@ -84,7 +85,9 @@ private void startWait(boolean allowRestart, boolean isFirst) {
}

public static void main(String[] args) {
DaemonUtils.init(args);
DaemonUtils.killParentProcess();
DaemonUtils.writeStatus("app_process launched");
int magiskVersionCode = DaemonUtils.getMagiskVersionCode();
String magiskTmpfsPath = DaemonUtils.getMagiskTmpfsPath();

Expand Down
15 changes: 10 additions & 5 deletions riru/src/main/java/riru/DaemonSocketServerThread.java
Expand Up @@ -15,6 +15,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
Expand Down Expand Up @@ -191,7 +192,9 @@ private void handleReadDir(LittleEndianDataInputStream in, LittleEndianDataOutpu
}
if (files == null || index >= size) {
out.writeInt(-1);
continue;
break;
} else {
out.writeInt(0);
}

File f = files[index];
Expand All @@ -200,13 +203,15 @@ private void handleReadDir(LittleEndianDataInputStream in, LittleEndianDataOutpu
boolean isFile = f.isFile();
boolean isDir = f.isDirectory();
if (isFile)
out.writeChar(/*DT_REG*/ 8);
out.writeByte(/*DT_REG*/ 8);
else if (isDir)
out.writeChar(/*DT_DIR*/ 4);
out.writeByte(/*DT_DIR*/ 4);
else
out.writeChar(/*DT_UNKNOWN*/0);
out.writeByte(/*DT_UNKNOWN*/0);

out.write(f.getName().getBytes());
byte[] name = Arrays.copyOf(f.getName().getBytes(StandardCharsets.UTF_8), 256);
name[255] = 0; // null-terminated
out.write(name);
}
}

Expand Down
30 changes: 28 additions & 2 deletions riru/src/main/java/riru/DaemonUtils.java
@@ -1,5 +1,7 @@
package riru;

import static riru.Daemon.TAG;

import android.os.Build;
import android.os.IBinder;
import android.os.ServiceManager;
Expand All @@ -11,18 +13,18 @@
import android.util.Log;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import java.security.SecureRandom;
import java.util.Locale;

import static riru.Daemon.TAG;

public class DaemonUtils {

private static Boolean has32Bit = null, has64Bit = null;
Expand All @@ -39,6 +41,11 @@ public class DaemonUtils {
}
}

public static void init(String[] args) {
magiskVersionCode = Integer.parseInt(args[0]);
magiskTmpfsPath = args[1];
}

public static void killParentProcess() {
int ppid = Os.getppid();
try {
Expand All @@ -49,6 +56,25 @@ public static void killParentProcess() {
}
}

public static void writeStatus(String status) {
File prop = new File("module.prop");
try (BufferedReader br = new BufferedReader(new FileReader(prop))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line.replaceFirst("^description=(\\[.*]\\s*)?", "description=[" + status + "] "));
sb.append(System.lineSeparator());
line = br.readLine();
}
String content = sb.toString();
try (DataOutputStream os = new DataOutputStream(new FileOutputStream(prop, false))) {
os.write(content.getBytes());
}
} catch (Throwable e) {
Log.e(TAG, "fail to write status", e);
}
}

public static boolean has32Bit() {
if (has32Bit == null) {
has32Bit = Build.SUPPORTED_32_BIT_ABIS.length > 0;
Expand Down
3 changes: 1 addition & 2 deletions template/magisk_module/customize.sh
Expand Up @@ -56,6 +56,7 @@ fi

extract "$ZIPFILE" 'module.prop' "$MODPATH"
extract "$ZIPFILE" 'post-fs-data.sh' "$MODPATH"
extract "$ZIPFILE" 'service.sh' "$MODPATH"
extract "$ZIPFILE" 'system.prop' "$MODPATH"
extract "$ZIPFILE" 'util_functions.sh' "$MODPATH"
extract "$ZIPFILE" 'uninstall.sh' "$MODPATH"
Expand Down Expand Up @@ -100,9 +101,7 @@ ui_print "- Setting permissions"
set_perm_recursive "$MODPATH" 0 0 0755 0644

ui_print "- Extracting rirud"
extract "$ZIPFILE" "rirud" "$MODPATH"
extract "$ZIPFILE" "rirud.dex" "$MODPATH"
set_perm "$MODPATH/rirud" 0 0 0700
set_perm "$MODPATH/rirud.dex" 0 0 0600

ui_print "- Checking if your ROM has incorrect SELinux rules"
Expand Down
7 changes: 5 additions & 2 deletions template/magisk_module/post-fs-data.sh
@@ -1,5 +1,8 @@
#!/system/bin/sh
MODDIR=${0%/*}

chmod 700 "$MODPATH/rirud"
"$MODDIR/rirud"
chmod 700 "$MODDIR/rirud"
sed -Ei 's/^description=(\[.*][[:space:]]*)?/description=[app_process fails to run] /g' "$MODDIR/module.prop"
export CLASSPATH=$MODDIR/rirud.dex
cd $MODDIR
flock "module.prop" -c "/system/bin/app_process -Djava.class.path=rirud.dex /system/bin --nice-name=rirud riru.Daemon $(magisk -V) $(magisk --path)"
5 changes: 0 additions & 5 deletions template/magisk_module/rirud

This file was deleted.

3 changes: 3 additions & 0 deletions template/magisk_module/service.sh
@@ -0,0 +1,3 @@
#!/system/bin/sh
MODDIR=${0%/*}
flock -n "$MODDIR/module.prop" -c "sed -Ei 's/^description=(\[.*][[:space:]]*)?/description=[post-fs-data.sh fails to run] /g' \"$MODDIR/module.prop\""

0 comments on commit dd0297c

Please sign in to comment.