Obj-C wrapper for OpenLDAP
Answerer's note: I'm moving commentary about NSString versus C-style strings out of this original answer and into their own answer.



The strings we use in creating the error objects, as well as the integers we use for the code in these objects should be defined, named constants (and probably an enum for the integers) all put together in one common place.  This way, if we ever want to reuse any of these, that's simple.  If we ever want to rename, reword, renumber, etc., they're all located in one easy to find location no matter how messy the code in this particular section gets.

The word "and" should be used to indicate that a method performs two distinct actions (and typically should just be two separate methods anyway).  We shouldn't use the word "and" to chain our variables.

Why not make an enumeration for our operation constants?  This will make our Objective-C code slightly more clear, and if someone uses this in a Swift project, they'll really like that they get errors if trying to send an invalid argument for this.

Our enum might look like this:

typedef NS_ENUM(NSInteger, LDAPOperation) {
    LDAPOperationAddUser = LDAP_MOD_ADD,
    LDAPOperationDeleteUser = LDAP_MOD_DELETE
};


And one final note about this code, given that it's Objective-C, we should use YES and NO rather than true or false.  There's no technical difference, but the Objective-C style is to use the YES/NO defines.