J'essaie d'obtenir une liste de tous les utilisateurs et tous les groupes sur Mac OS X 10.5+. Comment puis-je faire ceci? Par exemple, la liste de tous les utilisateurs sur ma machine doit 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é minutieusement compilé manuellement).Liste de tous les utilisateurs et groupes
Comment puis-je obtenir cette liste (et la liste correspondante de tous les groupes) par programme? Je suis ouvert à d'autres (non-c) sur la base des solutions, comme AppleScript, commandline, etc.
mise à jour depuis longtemps plus tard
TALlama's answer m'a incité à enquêter sur l'API Open Directory et je trouve que cette liste peut être facilement acquise par programme:
#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]);
}
qui se connectera les noms d'utilisateur de tous les utilisateurs du système. En remplaçant par kODRecordTypeGroups
vous obtiendrez la liste de tous les groupes.
La méthode -[ODQuery resultsAllowingPartial:error:]
est un blocage appel, de sorte que vous souhaitez soit à exécuter ce code sur un thread d'arrière-plan, ou d'utiliser un <ODQueryDelegate>
pour agréger les résultats.
Malheureusement, le fait que vous ayez pu faire cette liste exhaustive manuellement suggère que vous aviez déjà un moyen de l'automatiser. Vous avez probablement lu une liste de noms de répertoires ou quelque chose? Bonne question à poser cependant. Google a montré la réponse dans environ 15 secondes. – TheJacobTaylor
Je l'ai eu d'un autre programme. –
Clarification: l'autre programme avait la liste dans un popup, et je l'ai copié. Je veux un popup popup similaire. =) Quant à google, j'ai passé un moment à chercher des variations sur "mac get list de tous les utilisateurs" et je n'ai rien trouvé de pertinent. –