Jamf has decided to archive the NoMAD repos on GitHub. Going forward they aren’t going to receive any updates.
While they are read-only, they aren’t being deleted. That means that anyone who wants to fork and use the code is welcome to do so. Everything remains MIT licensed and open source.
The projects are still here and still open source, they just won’t be maintained by Jamf. Any existing issues or PRs have been closed.
You can see the official announcement on the Jamf Blog.
There is still an active user community on the MacAdmins Slack nomad channel.
As always, have fun and read the man pages.
macshome
Congratulations, you're about to experience the blood, sweat and tears of the thousands of development hours that have gone into NoMAD's Active Directory authentication! This framework will allow you to easily add in robust AD integration to any macOS application.
This framework is written primarily in Swift 4.2 on Xcode 10 and while much of the functionality is working, it should be considered beta at this point.
The NoMAD AD Authentication Framework allows you to present a username and password to the Framework and have it get tickets for the user and then lookup the user's information in AD. In addition the framework is:
- site aware
- able to change passwords
- able to use SSL for AD lookups
- can have the site forced or ignored
- is aware of network changes, and will mark sites to be re-discovered on changes
- perform recursive group lookups
- Drag the framework into your project in the Embedded Binaries section of the target
- Import NoMAD_ADAuth into your class
- Adopt NoMADUserSessionDelegate, and then add the stubs suggested to conform to the protocol
- create a NoMADSession object
let session = NoMADSession.init(domain: "nomad.test", user: "ftest@NOMAD.TEST", type: .AD)
- set a password on the session object
session.userPass = "Secret1!"
- set the session delegate to your class
session.delegate = self
- try to authenticate
session.authenticate()
- the delegate callbacks will then let you know if the auth succeeded or not
- Drag the framework into your project in the Embedded Binaries section of the target
- Import
NoMAD_ADAuth
- Make a
NoMADSession
object viainit(domain: String, user: String, type: LDAPType = .AD)
- Set the session's
userPass
variable - Call the session's
getKerberosTicket(principal: String? = nil, completion: @escaping (KerberosTicketResult) -> Void)
function - If the optional
principal
parameter is supplied, this function tries to fetch an existing ticket for this principal, - and then if unsuccessful, continues by trying to get a new ticket
- This function shares its result by running the supplied closure upon completion
- with
KerberosTicketResult
containing either anADUserRecord
on success or aNoMADSessionError
on failure