Estoy tratando de obtener una lista de todos los usuarios y todos los grupos en Mac OS X 10.5+. ¿Cómo puedo hacer esto?Lista de todos los usuarios y grupos
Por ejemplo, la lista de todos los usuarios en mi máquina debería devolver: _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
(que se compiló minuciosamente manualmente).
¿Cómo puedo obtener esa lista (y la lista correspondiente de todos los grupos) mediante programación? Estoy abierto a soluciones alternativas (no basados en c), como Applescript, comandos, etc.
actualización de un largo tiempo después
TALlama's answer me llevó a investigar la API para abrir el directorio y me encontré con que esta lista puede ser fácilmente adquiridos mediante programación:
#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]);
}
que registrará los nombres de usuario de cada usuario en el sistema. Sustituyendo en kODRecordTypeGroups
obtendrá la lista de todos los grupos.
El método -[ODQuery resultsAllowingPartial:error:]
es una bloqueo de llamadas, así que más bien desea ejecutar este código en un subproceso de fondo, o utilizar una <ODQueryDelegate>
agregar los resultados.
Lamentablemente, el hecho de que haya podido hacer esa lista exhaustiva de forma manual sugiere que ya tenía una forma de automatizarla. ¿Presumiblemente leíste una lista de nombres de directorios o algo así? Una gran pregunta para preguntar sin embargo. Google apareció la respuesta en aproximadamente 15 segundos. – TheJacobTaylor
Lo obtuve de otro programa. –
Aclaración: el otro programa tenía la lista en un botón emergente, y lo copié. Quiero un botón emergente similar. =) En cuanto a google, pasé un tiempo buscando variaciones en "mac get list of all users" y no pude encontrar nada relevante. –