Taste the Rainbow:0.7.2: Difference between revisions

From OLPC
Jump to navigation Jump to search
(New page: This page is a guided tour of the [http://dev.laptop.org/git?p=users/mstone/security;a=commit;h=b6a2a0c96f522956a69871c6d839bc67d2f78424 source code] of the rainbow-0.7.0 relea...)
 
No edit summary
 
Line 1: Line 1:
This page is a guided tour of the [http://dev.laptop.org/git?p=users/mstone/security;a=commit;h=b6a2a0c96f522956a69871c6d839bc67d2f78424 source code] of the [[Rainbow|rainbow-0.7.0]] release.
This page is a guided tour of the [http://dev.laptop.org/git?p=users/mstone/security;a=tree;hb=5718e427e3c6830669c996403435a4fc794c66c0 source code] of the [[Rainbow|rainbow-0.7.2]] release.


== Source Code Overview ==
== Source Code Overview ==
Please start in my [http://dev.laptop.org/git?p=users/mstone/security;a=tree;f=rainbow;h=b76a41fcc968b22196b14fa868e50db0f4b1b9bc;hb=b6a2a0c96f522956a69871c6d839bc67d2f78424 rainbow-0.7.0 tree].
Please start in my [http://dev.laptop.org/git?p=users/mstone/security;a=tree;f=rainbow;h=f3f9f1eec7f55d59f1538cf3394a20e26e34657f;hb=5718e427e3c6830669c996403435a4fc794c66c0 rainbow-0.7.2 tree].


./rainbow
./
|--- README : Standard boilerplate about where work gets done; somewhat dated in this release.
|--- README : Standard boilerplate about where work gets done; somewhat dated in this release.
|--- rainbow.spec.in : spec-file template for building RPMS
|--- Makefile.package : package-specific variables for use in ../Makefile.fedora
|--- conf : installation-time configuration files
|--- conf : installation-time configuration files
| \--- session-olpc.conf : applies some unusual dbus rules to allow many uids
| \--- session-olpc.conf : applies some unusual dbus rules to allow many uids
Line 16: Line 18:
| |--- DESIGN : A discussion of how the predecessor to the current architecture arose.
| |--- DESIGN : A discussion of how the predecessor to the current architecture arose.
| \--- NOTES : various problems I have encountered and thoughts on how to solve them.
| \--- NOTES : various problems I have encountered and thoughts on how to solve them.
| *--- [http://dev.laptop.org/git?p=security;a=blob;f=rainbow.txt;hb=HEAD rainbow.txt] : a sketch & justification of the current design
| *--- [http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow.txt;hb=HEAD rainbow.txt] : a sketch & justification of the current design
|
|
\--- rainbow : source code
\--- rainbow : source code
Line 22: Line 24:
| neuralis did together a few weeks ago
| neuralis did together a few weeks ago
|--- util : functions wrapping frequently used idioms or useful syscalls
|--- util : functions wrapping frequently used idioms or useful syscalls
|--- stages : logic implementing activity launching
|--- inject.py : logic implementing activity launching
|--- targets : control flow describing how to call activity-launching code
\--- service.py : dbus service entry-point
\--- service.py : dbus service entry-point
./rainbow.spec.in : spec-file template for building RPMS
./Makefile.package : package-specific variables for use in ../Makefile.fedora
../Makefile.fedora : rules for making local snapshot builds and
internal releases, prior to pushing to Fedora


== Activity Launching ==
== Activity Launching ==


The key functions for launching activities are
The key functions for launching activities are
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/stages/sugar.py;h=ad68b168d1cbab33a511d65d25e44a8151d06e60;hb=b6a2a0c96f522956a69871c6d839bc67d2f78424#l10 stages/sugar.py:begin()],
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/inject.py;h=dd39a3f648b97cddfae68a5a34c731d7f54567ee;hb=5718e427e3c6830669c996403435a4fc794c66c0#l86 inject.py:grab_home()],
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/stages/sugar.py;h=ad68b168d1cbab33a511d65d25e44a8151d06e60;hb=b6a2a0c96f522956a69871c6d839bc67d2f78424#l72 stages/sugar.py:prepare()], and
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/inject.py;h=dd39a3f648b97cddfae68a5a34c731d7f54567ee;hb=5718e427e3c6830669c996403435a4fc794c66c0#l110 inject.py:configure_home_and_scratch()], and
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/stages/activation.py;h=97228604c9781b3129767f4374e25f345ef49197;hb=b6a2a0c96f522956a69871c6d839bc67d2f78424#l16 stages/activation.py:launch()].
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/inject.py;h=dd39a3f648b97cddfae68a5a34c731d7f54567ee;hb=5718e427e3c6830669c996403435a4fc794c66c0#l142 inject.py:launch()].


These functions are called in the order listed from
These functions are called in the order listed from
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/targets/sugar.py;h=504e4ae5fcad44fe70b8eb32403319ea451353ee;hb=b6a2a0c96f522956a69871c6d839bc67d2f78424#l8 targets/sugar.py:launch()] and
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/inject.py;h=dd39a3f648b97cddfae68a5a34c731d7f54567ee;hb=5718e427e3c6830669c996403435a4fc794c66c0#l197 inject.py:run()]
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/targets/sugar.py;h=504e4ae5fcad44fe70b8eb32403319ea451353ee;hb=b6a2a0c96f522956a69871c6d839bc67d2f78424#l28 targets/sugar.py:_exile()]


which are, in turn, called from
which which is, in turn, called from
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/service.py;h=aaa6fc140511a5d9c08f25319b9c6f8f106c8cc6;hb=b6a2a0c96f522956a69871c6d839bc67d2f78424#l57 service.py:Rainbow.CreateActivity()]
*[http://dev.laptop.org/git?p=users/mstone/security;a=blob;f=rainbow/rainbow/service.py;h=9468b3e64b2d6cb286b8a62b033629afefb0e40d;hb=5718e427e3c6830669c996403435a4fc794c66c0#l58 service.py:Rainbow.CreateActivity()]


These six functions (and the relatively simple helpers they call) exhaust the functionality provided by rainbow-0.7.0.
These six functions (and the relatively simple helpers they call) exhaust the functionality provided by rainbow-0.7.2.


== Developing Rainbow ==
== Developing Rainbow ==

Latest revision as of 20:18, 6 November 2007

This page is a guided tour of the source code of the rainbow-0.7.2 release.

Source Code Overview

Please start in my rainbow-0.7.2 tree.

 ./
  |--- README : Standard boilerplate about where work gets done; somewhat dated in this release.
  |--- rainbow.spec.in : spec-file template for building RPMS
  |--- Makefile.package : package-specific variables for use in ../Makefile.fedora
  |--- conf : installation-time configuration files
  |     \--- session-olpc.conf : applies some unusual dbus rules to allow many uids
  |                              to use the same session bus and enables OLPC-specific 
  |                              dbus access checks. When /etc/olpc-security exists, 
  |                              session-olpc.conf is loaded by /usr/bin/sugar 
  | 
  |--- docs : explanations & notes
  |     |--- DESIGN : A discussion of how the predecessor to the current architecture arose.
  |     \--- NOTES : various problems I have encountered and thoughts on how to solve them.
  |     *--- rainbow.txt : a sketch & justification of the current design
  |
  \--- rainbow : source code
        |--- permissions : a stub based on the secure installation work that marcopg and 
        |                  neuralis did together a few weeks ago
        |--- util : functions wrapping frequently used idioms or useful syscalls
        |--- inject.py : logic implementing activity launching
        \--- service.py : dbus service entry-point

Activity Launching

The key functions for launching activities are

These functions are called in the order listed from

which which is, in turn, called from

These six functions (and the relatively simple helpers they call) exhaust the functionality provided by rainbow-0.7.2.

Developing Rainbow

I develop Rainbow in four basic modes:

  • From a live git clone, when developing new features.
 cp setup.py.in setup.py 
 sed -i -e 's/@VERSION@/1/' setup.py 
 python setup.py develop
  • By packaging snapshots of a git clone to try out packaging changes.
 make snapshot
  • With locally-built or scratch-built packages, when I'm getting ready to tag a release.
 make release