| | 303 | |
| | 304 | == Lezione 10 == |
| | 305 | |
| | 306 | === Slide === |
| | 307 | |
| | 308 | * '''Turno 2 (22 maggio 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab10b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab10b-handout.pdf Versione stampa]) |
| | 309 | |
| | 310 | ==== Aggiunta di una system call a MINIX ==== |
| | 311 | |
| | 312 | * Aggiunta di una syscall {{{chuid}}} che permette di modifcare il proprietario di un processo |
| | 313 | |
| | 314 | {{{ |
| | 315 | #!c |
| | 316 | PUBLIC int do_chuid() |
| | 317 | { |
| | 318 | int p, u; |
| | 319 | struct mproc *rmp; |
| | 320 | |
| | 321 | p = m_in.m1_i1; |
| | 322 | u = m_in.m1_i2; |
| | 323 | |
| | 324 | printf("PID: %d UID: %d\n", p, u); |
| | 325 | |
| | 326 | for (rmp = &mproc[0]; rmp < &mproc[NR_PROCS]; rmp++) { |
| | 327 | if (rmp->mp_pid == p) { |
| | 328 | printf("FOUND: %s\n", rmp->mp_name); |
| | 329 | printf("Switched UID from %d to %d\n", rmp->mp_realuid, u); |
| | 330 | rmp->mp_realuid = u; |
| | 331 | rmp->mp_effuid = u; |
| | 332 | break; |
| | 333 | } |
| | 334 | } |
| | 335 | } |
| | 336 | }}} |