package info.androiddevice.deviceinventory.info; import android.os.Build; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import static info.androiddevice.deviceinventory.info.Utils.readFile; public class DirProperty implements Property { private static final String[] directories = new String[] {"/dev/socket", "/system/bin", "/system/xbin"}; @Override public Object getProperty() { JSONObject jsonDirectories = new JSONObject(); for(String directory: directories) { try { jsonDirectories.put(directory, getDirListing(new File(directory))); } catch (JSONException e) { e.printStackTrace(); } } return jsonDirectories; } @Override public String getName() { return "directories"; } private JSONArray getDirListing(File directory) { try { JSONArray result = new JSONArray(); if(!directory.isDirectory()) { return result; } File[] files = directory.listFiles(); if(files == null) { return result; } for(File file: files) { try { JSONObject jsonFile = new JSONObject(); jsonFile.put("pathname", file.getName()); StructStat info = getFileInfo(file); jsonFile.put("st_mode", info.st_mode); jsonFile.put("st_uid", info.st_uid); jsonFile.put("st_gid", info.st_gid); result.put(jsonFile); } catch(Exception e) { continue; } } return result; } catch (Exception e) { return new JSONArray(); } } private StructStat getFileInfo(File file) throws Exception { if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { libcore.io.Os os = libcore.io.Libcore.os; libcore.io.StructStat fileInfo = os.lstat(file.getAbsolutePath()); return new StructStat(fileInfo); } else { android.system.StructStat fileInfo = android.system.Os.lstat(file.getAbsolutePath()); return new StructStat(fileInfo); } } private static class StructStat { public final int st_uid; public final int st_gid; public final int st_mode; public StructStat(libcore.io.StructStat info) { this.st_uid = info.st_uid; this.st_gid = info.st_gid; this.st_mode = info.st_mode; } public StructStat(android.system.StructStat info) { this.st_uid = info.st_uid; this.st_gid = info.st_gid; this.st_mode = info.st_mode; } } }