Initial import
[py-rsbac] / NOTES.txt
1 TTL: None = unlimited, otherwise a number of second clamped to 1 (so
2 any TTL below 1 will define an object that will disappear in the next
3 second.)
4
5 c_char_p are really a problem. Switch to c_byte_p ? ("c_byte_p =
6 c_char_p" at top of the header module.) The main problem is a '\x00'
7 in the middle of the string, and the other problem is that the string
8 is not always 0 terminated by ctypes.
9
10 Not threadsafe!
11
12 See Crock/py-rsbac.txt
13
14 Attributes can either return a mutable or immutable object.
15
16 If the object is mutable, then the attribute must be reached via
17 getXXX()/setXXX() methods, and reached via .XXX otherwise. (As a
18 convention.)
19
20 If the object return a tuple (a value and a TTL for example) then if
21 must also be reached via getXXX()/setXXX() methods.
22
23 To summarize, only atom whose value depend on the instance, can be
24 properties. Otherwise, the scheme value = instance.get(); update
25 value; instance.set(value); is expected.
26
27 Provides both?
28
29 For ff_flags, provides:
30
31  - .getFileFlags() -> FileFlags instance
32  - .setFileFlags(value)
33  - .ff_flags [R/W] (the raw value, as an integer.. or a immutable
34    Flags class.)
35
36 To add a single flag to ff_flags:
37
38  >> Good but not practical
39
40  - f = instance.getFileFlags()
41    f.foo = True
42    instance.setFileFlags( f )
43
44  >> Bad but practical
45
46  - f.ff_flags.foo = True
47
48  « a = f.ff_flags » # Oops, we can forget that 'a' hold flags for
49  'f'.. Not a copy of them.
50
51  >> Sort of compromise, but not really practical
52
53  - f.ff_flags_foo = True (note the syntax)
54
55  >> Another way:
56
57  - f.addFileFlags( 'foo' )
58  - f.removeFileFlags( 'foo' )
59
60 If the attribute doesn't depend on the instance, then there are no
61 such restrictions. (Example: rsbac.objects.FD.rcTypes proxy)
62
63 ---------
64
65 We have:
66
67 def add( role , type , requests ) :
68     """Allows 'requests' to 'role' for the given 'type'."""
69     rights , ttl = role.typeCompatibility[ type ]
70     rights |= requests
71     role.typeCompatibility[ type ] = rights , ttl
72
73 .. which is bad. Because we should be able to do that more easily
74 without the need for this function.
75
76 role.typeCompatibility[ type ] -> TypeCompatibility(role,type) instance.
77
78 t = TypeCompatibility( role , type )
79 print t.ttl
80 t.ttl = 17
81
82 t.rights |= blabla # read the TTL, update the rights and restore the
83 TTL? Seems not too bad.. Ask #rsbac about that.