Part of Slepp's ProjectsPastebinTURLImagebinFilebin
Feedback -- English French German Japanese
Create Upload Newest Tools Donate
Sign In | Create Account

phh
Wednesday, March 10th, 2010 at 11:24:31am MST 

  1. /*
  2.  * Copyright (C) 2007 The Android Open Source Project
  3.  *
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  *
  8.  *      http://www.apache.org/licenses/LICENSE-2.0
  9.  *
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16.  
  17. /* This file is used to define the properties of the filesystem
  18. ** images generated by build tools (mkbootfs and mkyaffs2image) and
  19. ** by the device side of adb.
  20. */
  21.  
  22. #ifndef _ANDROID_FILESYSTEM_CONFIG_H_
  23. #define _ANDROID_FILESYSTEM_CONFIG_H_
  24.  
  25. #include <string.h>
  26. #include <sys/stat.h>
  27. #include <sys/types.h>
  28.  
  29. /* This is the master Users and Groups config for the platform.
  30. ** DO NOT EVER RENUMBER.
  31. */
  32.  
  33. #define AID_ROOT             0  /* traditional unix root user */
  34.  
  35. #define AID_SYSTEM        1000  /* system server */
  36.  
  37. #define AID_RADIO         1001  /* telephony subsystem, RIL */
  38. #define AID_BLUETOOTH     1002  /* bluetooth subsystem */
  39. #define AID_GRAPHICS      1003  /* graphics devices */
  40. #define AID_INPUT         1004  /* input devices */
  41. #define AID_AUDIO         1005  /* audio devices */
  42. #define AID_CAMERA        1006  /* camera devices */
  43. #define AID_LOG           1007  /* log devices */
  44. #define AID_COMPASS       1008  /* compass device */
  45. #define AID_MOUNT         1009  /* mountd socket */
  46. #define AID_WIFI          1010  /* wifi subsystem */
  47. #define AID_ADB           1011  /* android debug bridge (adbd) */
  48. #define AID_INSTALL       1012  /* group for installing packages */
  49. #define AID_MEDIA         1013  /* mediaserver process */
  50. #define AID_DHCP          1014  /* dhcp client */
  51. #define AID_SDCARD_RW     1015  /* external storage write access */
  52. #define AID_VPN           1016  /* vpn system */
  53. #define AID_KEYSTORE      1017  /* keystore subsystem */
  54.  
  55. #define AID_SHELL         2000  /* adb and debug shell user */
  56. #define AID_CACHE         2001  /* cache access */
  57. #define AID_DIAG          2002  /* access to diagnostic resources */
  58.  
  59. /* The 3000 series are intended for use as supplemental group id's only.
  60.  * They indicate special Android capabilities that the kernel is aware of. */
  61. #define AID_NET_BT_ADMIN  3001  /* bluetooth: create any socket */
  62. #define AID_NET_BT        3002  /* bluetooth: create sco, rfcomm or l2cap sockets */
  63. #define AID_INET          3003  /* can create AF_INET and AF_INET6 sockets */
  64. #define AID_NET_RAW       3004  /* can create raw INET sockets */
  65. #define AID_NET_ADMIN     3005  /* can configure interfaces and routing tables. */
  66.  
  67. #define AID_MISC          9998  /* access to misc storage */
  68. #define AID_NOBODY        9999
  69.  
  70. #define AID_APP          10000 /* first app user */
  71.  
  72. #if !defined(EXCLUDE_FS_CONFIG_STRUCTURES)
  73. struct android_id_info {
  74.     const char *name;
  75.     unsigned aid;
  76. };
  77.  
  78. static struct android_id_info android_ids[] = {
  79.     { "root",      AID_ROOT, },
  80.     { "system",    AID_SYSTEM, },
  81.     { "radio",     AID_RADIO, },
  82.     { "bluetooth", AID_BLUETOOTH, },
  83.     { "graphics",  AID_GRAPHICS, },
  84.     { "input",     AID_INPUT, },
  85.     { "audio",     AID_AUDIO, },
  86.     { "camera",    AID_CAMERA, },
  87.     { "log",       AID_LOG, },
  88.     { "compass",   AID_COMPASS, },
  89.     { "mount",     AID_MOUNT, },
  90.     { "wifi",      AID_WIFI, },
  91.     { "dhcp",      AID_DHCP, },
  92.     { "adb",       AID_ADB, },
  93.     { "install",   AID_INSTALL, },
  94.     { "media",     AID_MEDIA, },
  95.     { "shell",     AID_SHELL, },
  96.     { "cache",     AID_CACHE, },
  97.     { "diag",      AID_DIAG, },
  98.     { "net_bt_admin", AID_NET_BT_ADMIN, },
  99.     { "net_bt",    AID_NET_BT, },
  100.     { "sdcard_rw", AID_SDCARD_RW, },
  101.     { "vpn",       AID_VPN, },
  102.     { "keystore",  AID_KEYSTORE, },
  103.     { "inet",      AID_INET, },
  104.     { "net_raw",   AID_NET_RAW, },
  105.     { "net_admin", AID_NET_ADMIN, },
  106.     { "misc",      AID_MISC, },
  107.     { "nobody",    AID_NOBODY, },
  108. };
  109.  
  110. #define android_id_count \
  111.     (sizeof(android_ids) / sizeof(android_ids[0]))
  112.    
  113. struct fs_path_config {
  114.     unsigned mode;
  115.     unsigned uid;
  116.     unsigned gid;
  117.     const char *prefix;
  118. };
  119.  
  120. /* Rules for directories.
  121. ** These rules are applied based on "first match", so they
  122. ** should start with the most specific path and work their
  123. ** way up to the root.
  124. */
  125.  
  126. static struct fs_path_config android_dirs[] = {
  127.     { 00770, AID_SYSTEM, AID_CACHE,  "cache" },
  128.     { 00771, AID_SYSTEM, AID_SYSTEM, "data/app" },
  129.     { 00771, AID_SYSTEM, AID_SYSTEM, "data/app-private" },
  130.     { 00771, AID_SYSTEM, AID_SYSTEM, "data/dalvik-cache" },
  131.     { 00771, AID_SYSTEM, AID_SYSTEM, "data/data" },
  132.     { 00771, AID_SHELL,  AID_SHELL,  "data/local/tmp" },
  133.     { 00771, AID_SHELL,  AID_SHELL,  "data/local" },
  134.     { 01771, AID_SYSTEM, AID_MISC,   "data/misc" },
  135.     { 00770, AID_DHCP,   AID_DHCP,   "data/misc/dhcp" },
  136.     { 00771, AID_SYSTEM, AID_SYSTEM, "data" },
  137.     { 00750, AID_ROOT,   AID_SHELL,  "sbin" },
  138.     { 00755, AID_ROOT,   AID_SHELL,  "system/bin" },
  139.     { 00755, AID_ROOT,   AID_SHELL,  "system/xbin" },
  140.     { 00755, AID_ROOT,   AID_ROOT,   "system/etc/ppp" },
  141.     { 00777, AID_ROOT,   AID_ROOT,   "sdcard" },
  142.     { 00755, AID_ROOT,   AID_ROOT,   0 },
  143. };
  144.  
  145. /* Rules for files.
  146. ** These rules are applied based on "first match", so they
  147. ** should start with the most specific path and work their
  148. ** way up to the root. Prefixes ending in * denotes wildcard
  149. ** and will allow partial matches.
  150. */
  151. static struct fs_path_config android_files[] = {
  152.     { 00440, AID_ROOT,      AID_SHELL,     "system/etc/init.goldfish.rc" },
  153.     { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.goldfish.sh" },
  154.     { 00440, AID_ROOT,      AID_SHELL,     "system/etc/init.trout.rc" },
  155.     { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.ril" },
  156.     { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.testmenu" },
  157.     { 00550, AID_DHCP,      AID_SHELL,     "system/etc/dhcpcd/dhcpcd-run-hooks" },
  158.     { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/dbus.conf" },
  159.     { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/main.conf" },
  160.     { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/input.conf" },
  161.     { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/audio.conf" },
  162.     { 00444, AID_RADIO,     AID_AUDIO,     "system/etc/AudioPara4.csv" },
  163.     { 00555, AID_ROOT,      AID_ROOT,      "system/etc/ppp/*" },
  164.     { 00644, AID_SYSTEM,    AID_SYSTEM,    "data/app/*" },
  165.     { 00644, AID_SYSTEM,    AID_SYSTEM,    "data/app-private/*" },
  166.     { 00644, AID_APP,       AID_APP,       "data/data/*" },
  167.         /* the following two files are INTENTIONALLY set-gid and not set-uid.
  168.          * Do not change. */
  169.     { 02755, AID_ROOT,      AID_NET_RAW,   "system/bin/ping" },
  170.     { 02755, AID_ROOT,      AID_INET,      "system/bin/netcfg" },
  171.         /* the following four files are INTENTIONALLY set-uid, but they
  172.          * are NOT included on user builds. */
  173.     { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/su" },
  174.     { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/librank" },
  175.     { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/procrank" },
  176.     { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/procmem" },
  177.     { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/tcpdump" },
  178.     { 00755, AID_ROOT,      AID_SHELL,     "system/bin/*" },
  179.     { 00755, AID_ROOT,      AID_SHELL,     "system/xbin/*" },
  180.     { 00750, AID_ROOT,      AID_SHELL,     "sbin/*" },
  181.     { 00755, AID_ROOT,      AID_ROOT,      "bin/*" },
  182.     { 00750, AID_ROOT,      AID_SHELL,     "init*" },
  183.     { 00644, AID_ROOT,      AID_ROOT,       0 },
  184. };
  185.  
  186. static inline void fs_config(const char *path, int dir,
  187.                              unsigned *uid, unsigned *gid, unsigned *mode)
  188. {
  189.     struct fs_path_config *pc;
  190.     int plen;
  191.    
  192.     pc = dir ? android_dirs : android_files;
  193.     plen = strlen(path);
  194.     for(; pc->prefix; pc++){
  195.         int len = strlen(pc->prefix);
  196.         if (dir) {
  197.             if(plen < len) continue;
  198.             if(!strncmp(pc->prefix, path, len)) break;
  199.             continue;
  200.         }
  201.         /* If name ends in * then allow partial matches. */
  202.         if (pc->prefix[len -1] == '*') {
  203.             if(!strncmp(pc->prefix, path, len - 1)) break;
  204.         } else if (plen == len){
  205.             if(!strncmp(pc->prefix, path, len)) break;
  206.         }
  207.     }
  208.     *uid = pc->uid;
  209.     *gid = pc->gid;
  210.     *mode = (*mode & (~07777)) | pc->mode;
  211.    
  212. #if 0
  213.     fprintf(stderr,"< '%s' '%s' %d %d %o >\n",
  214.             path, pc->prefix ? pc->prefix : "", *uid, *gid, *mode);
  215. #endif
  216. }
  217. #endif
  218. #endif

advertising

Update the Post

Either update this post and resubmit it with changes, or make a new post.

You may also comment on this post.

update paste below
details of the post (optional)

Note: Only the paste content is required, though the following information can be useful to others.

Save name / title?

(space separated, optional)



Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.

fantasy-obligation