J'essaie d'obtenir une liste de tous les utilisateurs et tous les groupes sur Mac OS X 10.5+. Comment puis-je faire cela ?
Par exemple, la liste de tous les utilisateurs de ma machine devrait retourner : _amavisd, _appowner, _appserver, _ard, _atsserver, _calendar, _carddav, _clamav, _coreaudiod, _cvmsroot, _cvs, _cyrus, _devdocs, _dovecot, _eppc, _installer, _jabber, _lda, _locationd, _lp, _mailman, _mcxalr, _mdnsresponder, _mysql, _pcastagent, _pcastserver, _postfix, _qtss, _sandbox, _screensaver, _securityagent, _serialnumberd, _softwareupdate, _spotlight, _sshd, _svn, _teamsserver, _timezone, _tokend, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _windowserver, _www, _xgridagent, _xgridcontroller, daemon, dave, nobody, root
(qui a été laborieusement compilé manuellement).
Comment puis-je obtenir cette liste (et la liste correspondante de tous les groupes) de manière programmatique ? Je suis ouvert à d'autres solutions (non basées sur le programme), comme Applescript, la ligne de commande, etc.
Mise à jour un long moment plus tard
La réponse de TALlama m'a incité à enquêter sur l'API de l'Open Directory, et j'ai découvert que cette liste peut être facilement acquise par programmation :
#import <OpenDirectory/OpenDirectory.h>
ODSession *s = [ODSession defaultSession];
ODNode *root = [ODNode nodeWithSession:s name:@"/Local/Default" error:nil];
ODQuery *q = [ODQuery queryWithNode:root forRecordTypes:kODRecordTypeUsers attribute:nil matchType:0 queryValues:nil returnAttributes:nil maximumResults:0 error:nil];
NSArray *results = [q resultsAllowingPartial:NO error:nil];
for (ODRecord *r in results) {
NSLog(@"%@", [r recordName]);
}
Cela permettra d'enregistrer les noms d'utilisateur de tous les utilisateurs du système. En remplaçant par kODRecordTypeGroups
vous obtiendra la liste de tous les groupes.
En -[ODQuery resultsAllowingPartial:error:]
est une méthode blocage il faut donc soit exécuter ce code sur un thread d'arrière-plan, soit utiliser un fichier <ODQueryDelegate>
pour agréger les résultats.