| 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 | }}} |