fix issue with gids not being added for packages with shared user id

Squashed commit of the following:

commit 2bc4c29dab22d8a541dfca0a20320b307ba64cfb
Author: Suchi Amalapurapu <asuchitra@google.com>
Date:   Tue Aug 4 16:24:55 2009 -0700

    fix issue with gids not being added for packages with shared user id
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index bd79d1d..89f854e 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -2884,7 +2884,7 @@
         if (gp.gids == null) {
             gp.gids = mGlobalGids;
         }
-        
+       
         final int N = pkg.requestedPermissions.size();
         for (int i=0; i<N; i++) {
             String name = pkg.requestedPermissions.get(i);
@@ -3755,7 +3755,7 @@
             }
         }
     }
-    
+   
     private void updateSettingsLI(String pkgName, File tmpPackageFile, 
             String destFilePath, File destPackageFile,
             File destResourceFile, 
@@ -4220,7 +4220,7 @@
         synchronized (mPackages) {
             if ( (deletedPs != null) && (deletedPs.sharedUser != null)) {
                 // remove permissions associated with package
-                mSettings.updateSharedUserPerms (deletedPs);
+                mSettings.updateSharedUserPermsLP(deletedPs, mGlobalGids);
             }
             // Save settings now
             mSettings.writeLP ();
@@ -6008,7 +6008,15 @@
             }
         }
 
-        private void updateSharedUserPerms (PackageSetting deletedPs) {
+        /*
+         * Update the shared user setting when a package using
+         * specifying the shared user id is removed. The gids
+         * associated with each permission of the deleted package
+         * are removed from the shared user's gid list only if its
+         * not in use by other permissions of packages in the
+         * shared user setting.
+         */
+        private void updateSharedUserPermsLP(PackageSetting deletedPs, int[] globalGids) {
             if ( (deletedPs == null) || (deletedPs.pkg == null)) {
                 Log.i(TAG, "Trying to update info for null package. Just ignoring");
                 return;
@@ -6037,13 +6045,14 @@
                 }
             }
             // Update gids
-            int newGids[] = null;
-            for (PackageSetting pkg:sus.packages) {
-                newGids = appendInts(newGids, pkg.gids);
+            int newGids[] = globalGids;
+            for (String eachPerm : sus.grantedPermissions) {
+                BasePermission bp = mPermissions.get(eachPerm);
+                newGids = appendInts(newGids, bp.gids);
             }
             sus.gids = newGids;
         }
-        
+
         private int removePackageLP(String name) {
             PackageSetting p = mPackages.get(name);
             if (p != null) {