Search in sources :

Example 66 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class EphemeralApplicationRegistry method parseMetadataFile.

private static UninstalledEphemeralAppState parseMetadataFile(File metadataFile) {
    if (!metadataFile.exists()) {
        return null;
    }
    FileInputStream in;
    try {
        in = new AtomicFile(metadataFile).openRead();
    } catch (FileNotFoundException fnfe) {
        Slog.i(LOG_TAG, "No ephemeral metadata file");
        return null;
    }
    final File ephemeralDir = metadataFile.getParentFile();
    final long timestamp = metadataFile.lastModified();
    final String packageName = ephemeralDir.getName();
    try {
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(in, StandardCharsets.UTF_8.name());
        return new UninstalledEphemeralAppState(parseMetadata(parser, packageName), timestamp);
    } catch (XmlPullParserException | IOException e) {
        throw new IllegalStateException("Failed parsing ephemeral" + " metadata file: " + metadataFile, e);
    } finally {
        IoUtils.closeQuietly(in);
    }
}
Also used : AtomicFile(android.util.AtomicFile) FileNotFoundException(java.io.FileNotFoundException) XmlPullParser(org.xmlpull.v1.XmlPullParser) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) AtomicFile(android.util.AtomicFile) File(java.io.File) FileInputStream(java.io.FileInputStream)

Example 67 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class TrustManagerService method getSettingsComponentName.

private ComponentName getSettingsComponentName(PackageManager pm, ResolveInfo resolveInfo) {
    if (resolveInfo == null || resolveInfo.serviceInfo == null || resolveInfo.serviceInfo.metaData == null)
        return null;
    String cn = null;
    XmlResourceParser parser = null;
    Exception caughtException = null;
    try {
        parser = resolveInfo.serviceInfo.loadXmlMetaData(pm, TrustAgentService.TRUST_AGENT_META_DATA);
        if (parser == null) {
            Slog.w(TAG, "Can't find " + TrustAgentService.TRUST_AGENT_META_DATA + " meta-data");
            return null;
        }
        Resources res = pm.getResourcesForApplication(resolveInfo.serviceInfo.applicationInfo);
        AttributeSet attrs = Xml.asAttributeSet(parser);
        int type;
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
        // Drain preamble.
        }
        String nodeName = parser.getName();
        if (!"trust-agent".equals(nodeName)) {
            Slog.w(TAG, "Meta-data does not start with trust-agent tag");
            return null;
        }
        TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.TrustAgent);
        cn = sa.getString(com.android.internal.R.styleable.TrustAgent_settingsActivity);
        sa.recycle();
    } catch (PackageManager.NameNotFoundException e) {
        caughtException = e;
    } catch (IOException e) {
        caughtException = e;
    } catch (XmlPullParserException e) {
        caughtException = e;
    } finally {
        if (parser != null)
            parser.close();
    }
    if (caughtException != null) {
        Slog.w(TAG, "Error parsing : " + resolveInfo.serviceInfo.packageName, caughtException);
        return null;
    }
    if (cn == null) {
        return null;
    }
    if (cn.indexOf('/') < 0) {
        cn = resolveInfo.serviceInfo.packageName + "/" + cn;
    }
    return ComponentName.unflattenFromString(cn);
}
Also used : XmlResourceParser(android.content.res.XmlResourceParser) PackageManager(android.content.pm.PackageManager) AttributeSet(android.util.AttributeSet) TypedArray(android.content.res.TypedArray) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) Resources(android.content.res.Resources) IOException(java.io.IOException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) RemoteException(android.os.RemoteException) IOException(java.io.IOException) DeadObjectException(android.os.DeadObjectException)

Example 68 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class Owners method readLegacyOwnerFileLocked.

private boolean readLegacyOwnerFileLocked(File file) {
    if (!file.exists()) {
        // Already migrated or the device has no owners.
        return false;
    }
    try {
        InputStream input = new AtomicFile(file).openRead();
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(input, StandardCharsets.UTF_8.name());
        int type;
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
            if (type != XmlPullParser.START_TAG) {
                continue;
            }
            String tag = parser.getName();
            if (tag.equals(TAG_DEVICE_OWNER)) {
                String name = parser.getAttributeValue(null, ATTR_NAME);
                String packageName = parser.getAttributeValue(null, ATTR_PACKAGE);
                mDeviceOwner = new OwnerInfo(name, packageName, /* userRestrictionsMigrated =*/
                false, /* remoteBugreportUri =*/
                null, /* remoteBugreportHash =*/
                null);
                mDeviceOwnerUserId = UserHandle.USER_SYSTEM;
            } else if (tag.equals(TAG_DEVICE_INITIALIZER)) {
            // Deprecated tag
            } else if (tag.equals(TAG_PROFILE_OWNER)) {
                String profileOwnerPackageName = parser.getAttributeValue(null, ATTR_PACKAGE);
                String profileOwnerName = parser.getAttributeValue(null, ATTR_NAME);
                String profileOwnerComponentStr = parser.getAttributeValue(null, ATTR_COMPONENT_NAME);
                int userId = Integer.parseInt(parser.getAttributeValue(null, ATTR_USERID));
                OwnerInfo profileOwnerInfo = null;
                if (profileOwnerComponentStr != null) {
                    ComponentName admin = ComponentName.unflattenFromString(profileOwnerComponentStr);
                    if (admin != null) {
                        profileOwnerInfo = new OwnerInfo(profileOwnerName, admin, /* userRestrictionsMigrated =*/
                        false, null, null);
                    } else {
                        // This shouldn't happen but switch from package name -> component name
                        // might have written bad device owner files. b/17652534
                        Slog.e(TAG, "Error parsing device-owner file. Bad component name " + profileOwnerComponentStr);
                    }
                }
                if (profileOwnerInfo == null) {
                    profileOwnerInfo = new OwnerInfo(profileOwnerName, profileOwnerPackageName, /* userRestrictionsMigrated =*/
                    false, /* remoteBugreportUri =*/
                    null, /* remoteBugreportHash =*/
                    null);
                }
                mProfileOwners.put(userId, profileOwnerInfo);
            } else if (TAG_SYSTEM_UPDATE_POLICY.equals(tag)) {
                mSystemUpdatePolicy = SystemUpdatePolicy.restoreFromXml(parser);
            } else {
                throw new XmlPullParserException("Unexpected tag in device owner file: " + tag);
            }
        }
        input.close();
    } catch (XmlPullParserException | IOException e) {
        Slog.e(TAG, "Error parsing device-owner file", e);
    }
    return true;
}
Also used : AtomicFile(android.util.AtomicFile) InputStream(java.io.InputStream) XmlPullParser(org.xmlpull.v1.XmlPullParser) ComponentName(android.content.ComponentName) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException)

Example 69 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class DevicePolicyManagerService method loadSettingsLocked.

private void loadSettingsLocked(DevicePolicyData policy, int userHandle) {
    JournaledFile journal = makeJournaledFile(userHandle);
    FileInputStream stream = null;
    File file = journal.chooseForRead();
    try {
        stream = new FileInputStream(file);
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(stream, StandardCharsets.UTF_8.name());
        int type;
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
        }
        String tag = parser.getName();
        if (!"policies".equals(tag)) {
            throw new XmlPullParserException("Settings do not start with policies tag: found " + tag);
        }
        // Extract the permission provider component name if available
        String permissionProvider = parser.getAttributeValue(null, ATTR_PERMISSION_PROVIDER);
        if (permissionProvider != null) {
            policy.mRestrictionsProvider = ComponentName.unflattenFromString(permissionProvider);
        }
        String userSetupComplete = parser.getAttributeValue(null, ATTR_SETUP_COMPLETE);
        if (userSetupComplete != null && Boolean.toString(true).equals(userSetupComplete)) {
            policy.mUserSetupComplete = true;
        }
        String paired = parser.getAttributeValue(null, ATTR_DEVICE_PAIRED);
        if (paired != null && Boolean.toString(true).equals(paired)) {
            policy.mPaired = true;
        }
        String deviceProvisioningConfigApplied = parser.getAttributeValue(null, ATTR_DEVICE_PROVISIONING_CONFIG_APPLIED);
        if (deviceProvisioningConfigApplied != null && Boolean.toString(true).equals(deviceProvisioningConfigApplied)) {
            policy.mDeviceProvisioningConfigApplied = true;
        }
        String provisioningState = parser.getAttributeValue(null, ATTR_PROVISIONING_STATE);
        if (!TextUtils.isEmpty(provisioningState)) {
            policy.mUserProvisioningState = Integer.parseInt(provisioningState);
        }
        String permissionPolicy = parser.getAttributeValue(null, ATTR_PERMISSION_POLICY);
        if (!TextUtils.isEmpty(permissionPolicy)) {
            policy.mPermissionPolicy = Integer.parseInt(permissionPolicy);
        }
        policy.mDelegatedCertInstallerPackage = parser.getAttributeValue(null, ATTR_DELEGATED_CERT_INSTALLER);
        policy.mApplicationRestrictionsManagingPackage = parser.getAttributeValue(null, ATTR_APPLICATION_RESTRICTIONS_MANAGER);
        type = parser.next();
        int outerDepth = parser.getDepth();
        policy.mLockTaskPackages.clear();
        policy.mAdminList.clear();
        policy.mAdminMap.clear();
        policy.mAffiliationIds.clear();
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
                continue;
            }
            tag = parser.getName();
            if ("admin".equals(tag)) {
                String name = parser.getAttributeValue(null, "name");
                try {
                    DeviceAdminInfo dai = findAdmin(ComponentName.unflattenFromString(name), userHandle, /* throwForMissionPermission= */
                    false);
                    if (VERBOSE_LOG && (UserHandle.getUserId(dai.getActivityInfo().applicationInfo.uid) != userHandle)) {
                        Slog.w(LOG_TAG, "findAdmin returned an incorrect uid " + dai.getActivityInfo().applicationInfo.uid + " for user " + userHandle);
                    }
                    if (dai != null) {
                        ActiveAdmin ap = new ActiveAdmin(dai, /* parent */
                        false);
                        ap.readFromXml(parser);
                        policy.mAdminMap.put(ap.info.getComponent(), ap);
                    }
                } catch (RuntimeException e) {
                    Slog.w(LOG_TAG, "Failed loading admin " + name, e);
                }
            } else if ("failed-password-attempts".equals(tag)) {
                policy.mFailedPasswordAttempts = Integer.parseInt(parser.getAttributeValue(null, "value"));
            } else if ("password-owner".equals(tag)) {
                policy.mPasswordOwner = Integer.parseInt(parser.getAttributeValue(null, "value"));
            } else if ("active-password".equals(tag)) {
                policy.mActivePasswordQuality = Integer.parseInt(parser.getAttributeValue(null, "quality"));
                policy.mActivePasswordLength = Integer.parseInt(parser.getAttributeValue(null, "length"));
                policy.mActivePasswordUpperCase = Integer.parseInt(parser.getAttributeValue(null, "uppercase"));
                policy.mActivePasswordLowerCase = Integer.parseInt(parser.getAttributeValue(null, "lowercase"));
                policy.mActivePasswordLetters = Integer.parseInt(parser.getAttributeValue(null, "letters"));
                policy.mActivePasswordNumeric = Integer.parseInt(parser.getAttributeValue(null, "numeric"));
                policy.mActivePasswordSymbols = Integer.parseInt(parser.getAttributeValue(null, "symbols"));
                policy.mActivePasswordNonLetter = Integer.parseInt(parser.getAttributeValue(null, "nonletter"));
            } else if (TAG_ACCEPTED_CA_CERTIFICATES.equals(tag)) {
                policy.mAcceptedCaCertificates.add(parser.getAttributeValue(null, ATTR_NAME));
            } else if (TAG_LOCK_TASK_COMPONENTS.equals(tag)) {
                policy.mLockTaskPackages.add(parser.getAttributeValue(null, "name"));
            } else if (TAG_STATUS_BAR.equals(tag)) {
                policy.mStatusBarDisabled = Boolean.parseBoolean(parser.getAttributeValue(null, ATTR_DISABLED));
            } else if (DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML.equals(tag)) {
                policy.doNotAskCredentialsOnBoot = true;
            } else if (TAG_AFFILIATION_ID.equals(tag)) {
                policy.mAffiliationIds.add(parser.getAttributeValue(null, "id"));
            } else if (TAG_ADMIN_BROADCAST_PENDING.equals(tag)) {
                String pending = parser.getAttributeValue(null, ATTR_VALUE);
                policy.mAdminBroadcastPending = Boolean.toString(true).equals(pending);
            } else if (TAG_INITIALIZATION_BUNDLE.equals(tag)) {
                policy.mInitBundle = PersistableBundle.restoreFromXml(parser);
            } else {
                Slog.w(LOG_TAG, "Unknown tag: " + tag);
                XmlUtils.skipCurrentTag(parser);
            }
        }
    } catch (FileNotFoundException e) {
    // Don't be noisy, this is normal if we haven't defined any policies.
    } catch (NullPointerException | NumberFormatException | XmlPullParserException | IOException | IndexOutOfBoundsException e) {
        Slog.w(LOG_TAG, "failed parsing " + file, e);
    }
    try {
        if (stream != null) {
            stream.close();
        }
    } catch (IOException e) {
    // Ignore
    }
    // Generate a list of admins from the admin map
    policy.mAdminList.addAll(policy.mAdminMap.values());
    // Validate that what we stored for the password quality matches
    // sufficiently what is currently set.  Note that this is only
    // a sanity check in case the two get out of sync; this should
    // never normally happen.
    final long identity = mInjector.binderClearCallingIdentity();
    try {
        int actualPasswordQuality = mLockPatternUtils.getActivePasswordQuality(userHandle);
        if (actualPasswordQuality < policy.mActivePasswordQuality) {
            Slog.w(LOG_TAG, "Active password quality 0x" + Integer.toHexString(policy.mActivePasswordQuality) + " does not match actual quality 0x" + Integer.toHexString(actualPasswordQuality));
            policy.mActivePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
            policy.mActivePasswordLength = 0;
            policy.mActivePasswordUpperCase = 0;
            policy.mActivePasswordLowerCase = 0;
            policy.mActivePasswordLetters = 0;
            policy.mActivePasswordNumeric = 0;
            policy.mActivePasswordSymbols = 0;
            policy.mActivePasswordNonLetter = 0;
        }
    } finally {
        mInjector.binderRestoreCallingIdentity(identity);
    }
    validatePasswordOwnerLocked(policy);
    updateMaximumTimeToLockLocked(userHandle);
    updateLockTaskPackagesLocked(policy.mLockTaskPackages, userHandle);
    if (policy.mStatusBarDisabled) {
        setStatusBarDisabledInternal(policy.mStatusBarDisabled, userHandle);
    }
}
Also used : JournaledFile(com.android.internal.util.JournaledFile) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) ParcelableString(com.android.internal.util.ParcelableString) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) DeviceAdminInfo(android.app.admin.DeviceAdminInfo) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile)

Example 70 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class DevicePolicyManagerService method findAdmin.

public DeviceAdminInfo findAdmin(ComponentName adminName, int userHandle, boolean throwForMissiongPermission) {
    if (!mHasFeature) {
        return null;
    }
    enforceFullCrossUsersPermission(userHandle);
    ActivityInfo ai = null;
    try {
        ai = mIPackageManager.getReceiverInfo(adminName, PackageManager.GET_META_DATA | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userHandle);
    } catch (RemoteException e) {
    // shouldn't happen.
    }
    if (ai == null) {
        throw new IllegalArgumentException("Unknown admin: " + adminName);
    }
    if (!permission.BIND_DEVICE_ADMIN.equals(ai.permission)) {
        final String message = "DeviceAdminReceiver " + adminName + " must be protected with " + permission.BIND_DEVICE_ADMIN;
        Slog.w(LOG_TAG, message);
        if (throwForMissiongPermission && ai.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) {
            throw new IllegalArgumentException(message);
        }
    }
    try {
        return new DeviceAdminInfo(mContext, ai);
    } catch (XmlPullParserException | IOException e) {
        Slog.w(LOG_TAG, "Bad device admin requested for user=" + userHandle + ": " + adminName, e);
        return null;
    }
}
Also used : ActivityInfo(android.content.pm.ActivityInfo) DeviceAdminInfo(android.app.admin.DeviceAdminInfo) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) ParcelableString(com.android.internal.util.ParcelableString) IOException(java.io.IOException) RemoteException(android.os.RemoteException)

Aggregations

XmlPullParserException (org.xmlpull.v1.XmlPullParserException)1071 IOException (java.io.IOException)630 XmlPullParser (org.xmlpull.v1.XmlPullParser)440 FileNotFoundException (java.io.FileNotFoundException)187 XmlResourceParser (android.content.res.XmlResourceParser)186 FileInputStream (java.io.FileInputStream)182 AttributeSet (android.util.AttributeSet)159 TypedArray (android.content.res.TypedArray)156 Resources (android.content.res.Resources)101 File (java.io.File)101 ArrayList (java.util.ArrayList)99 PackageManager (android.content.pm.PackageManager)62 HashMap (java.util.HashMap)58 ComponentName (android.content.ComponentName)57 InputStream (java.io.InputStream)57 Intent (android.content.Intent)54 XmlSerializer (org.xmlpull.v1.XmlSerializer)54 AtomicFile (android.util.AtomicFile)50 BufferedInputStream (java.io.BufferedInputStream)44 TypedValue (android.util.TypedValue)43