867
|
1 *
|
|
2 * Identity system calls
|
|
3 *
|
|
4 use ..../defs/os9defs.a
|
|
5
|
|
6 *
|
|
7 * Equates for level one pointers (sorry!)
|
|
8 *
|
|
9 D.Proc equ $4b
|
|
10 P$User equ $9
|
|
11
|
|
12 psect id_a,0,0,1,0,0
|
|
13
|
|
14 * getpid()
|
|
15 getpid: pshs y save data pointer
|
|
16 os9 F$ID
|
|
17 puls y
|
|
18 bcc getp10
|
|
19 lbcs _os9err
|
|
20
|
|
21 getp10 tfr a,b
|
|
22 clra
|
|
23 rts
|
|
24
|
|
25 * getuid()
|
|
26 getuid: pshs y
|
|
27 os9 F$ID
|
|
28 bcc getu10
|
|
29
|
|
30 errexit puls y
|
|
31 lbra _os9err
|
|
32
|
|
33 getu10 tfr y,d
|
|
34 puls y,pc
|
|
35
|
|
36 * setuid()
|
|
37 setuid:
|
|
38 pshs y
|
|
39 bsr getuid get user id
|
|
40 std -2,s superuser?
|
|
41 beq setu10 bra if so
|
|
42 ldb #E$FNA not allowed
|
|
43 bra errexit
|
|
44
|
|
45 setu10 ldy 4,s get new user id
|
|
46 os9 F$SUSER set user id
|
|
47 bcc setu20 bra if ok
|
|
48
|
|
49 cmpb #E$UNKSVC illegal code?
|
|
50 bne errexit bra if not
|
|
51
|
|
52 ** Illegal code (sorry) ***
|
|
53 tfr y,d
|
|
54 ldy >D.Proc
|
|
55 std P$User,y
|
|
56
|
|
57 setu20 clra
|
|
58 clrb
|
|
59 puls y,pc
|
|
60
|
|
61 endsect
|