Je voudrais utiliser l'appel système setgid, pour changer l'ID du groupe du processus en cours. Essayer de rechercher cette fonction, la seule mise en œuvre que j'ai trouvé est kern_prot.c:OSX appel système setgid - quelle API est la bonne
/*
* setgid
*
* Description: Set group ID system call
*
* Parameters: uap->gid gid to set
...
..
.
*/
int
setgid(proc_t p, struct setgid_args *uap, __unused int32_t *retval)
{
...
..
.
}
Notez que selon /usr/unistd.h, l'API est complètement différent (int setgid(gid_t);
).
- -t
int setgid(gid_t);
est une enveloppe deint setgid(proc_t p, struct setgid_args *uap, __unused int32_t *retval)
- Où puis-je trouver la mise en œuvre de
int setgid(gid_t);
? - Y at-il une option pour appeler l'implémentation de setgid de kern_prot.c?
MISE À JOUR:
Après le suivi mon programme avec dtruss
pour observer les appels système, il semble que l'appel setgid(gid_t)
déclencheur l'appel système avec 3 paramètres setgid(0x2, 0x7F9AA3803200, 0x1000)
qui correspond à la mise en œuvre kern_prot.c. La question est, où puis-je trouver le code source d'emballage, et quelle bibliothèque fait, il appartient à (glibc peut-être?)
grâce,
Vous êtes très probablement raison de dire que l'API setgid exposée à l'espace utilisateur est en fait une enveloppe de la glibc autour du syscall setgid . – mauzel
@mauzel, merci pour le commentaire. la seule chose qui me dérange toujours est que si je '#include #include #include ' et qu'exécuter le syscall suivant que cela semble fonctionner et l'API est avec le seul paramètre ('syscall (SYS_setgid, gid); '). Je n'ai toujours pas cette contradiction. –
Zohar81
donc je ne sais rien à propos de Mac OS X/BSD, mais êtes-vous sûr que ça ne l'appelle pas? http://lxr.free-electrons.com/source/kernel/sys.c?v=3.10#L646 – mauzel