]> git.saurik.com Git - apple/libinfo.git/blobdiff - membership.subproj/membership.h
Libinfo-330.3.tar.gz
[apple/libinfo.git] / membership.subproj / membership.h
index 9a0aef0aa5eff204c78142351e26cd7b2bb0cf62..32c8a8ac97ebd03188181aa2c0f63860c79e7289 100644 (file)
@@ -18,7 +18,7 @@
  * under the License.
  *
  * @APPLE_LICENSE_HEADER_END@
- */             
+ */
 
 #ifndef _MEMBERSHIP_H_
 #define _MEMBERSHIP_H_
 #include <uuid/uuid.h>
 #include <ntsid.h>
 
-#define ID_TYPE_UID 0
-#define ID_TYPE_GID 1
+/*!
+       @defined    ID_TYPE_UID
+       @abstract   is of type uid_t
+       @discussion is of type uid_t
+*/
+#define ID_TYPE_UID                            0
+
+/*!
+       @defined    ID_TYPE_GID
+       @abstract   is of type gid_t
+       @discussion is of type gid_t
+*/
+#define ID_TYPE_GID                            1
+
+/*!
+    @defined    ID_TYPE_SID
+    @abstract   is of type ntsid_t
+    @discussion is of type ntsid_t
+*/
+#define ID_TYPE_SID                            3
+
+/*!
+    @defined    ID_TYPE_USERNAME
+    @abstract   is a NULL terminated UTF8 string
+    @discussion is a NULL terminated UTF8 string
+*/
+#define ID_TYPE_USERNAME               4
+
+/*!
+    @defined    ID_TYPE_GROUPNAME
+    @abstract   is a NULL terminated UTF8 string
+    @discussion is a NULL terminated UTF8 string
+*/
+#define ID_TYPE_GROUPNAME              5
+
+/*!
+       @defined    ID_TYPE_GSS_EXPORT_NAME
+       @abstract       is a gss exported name
+       @discussion     is the data in gss_buffer_t as returned from gss_export_name.
+*/
+#define ID_TYPE_GSS_EXPORT_NAME        10
+
+/*!
+       @defined    ID_TYPE_X509_DN
+       @abstract       is a NULL terminated string representation of the X.509 certificate identity
+       @discussion     is a NULL terminated string with the format of:
+                               <I>DN of the Certificate authority<S>DN of the holder
+                               Example:
+                               <I>DC=com,DC=example,CN=CertificatAuthority<S>DC=com,DC=example,CN=username
+*/
+#define ID_TYPE_X509_DN                        11
+
+/*!
+       @defined    ID_TYPE_KERBEROS
+       @abstract       is a NULL terminated string representation of a Kerberos principal
+       @discussion     is a NULL terminated string in the form of user\@REALM representing a typical 
+                               Kerberos principal.
+*/
+#define ID_TYPE_KERBEROS               12
 
 __BEGIN_DECLS
 
-int mbr_uid_to_uuid(uid_t id, uuid_t uu);
-int mbr_gid_to_uuid(gid_t id, uuid_t uu);
-int mbr_uuid_to_id( const uuid_t uu, uid_t* id, int* id_type);
-int mbr_sid_to_uuid( const nt_sid_t* sid, uuid_t uu);
-int mbr_uuid_to_sid( const uuid_t uu, nt_sid_t* sid);
+/*!
+       @function   mbr_uid_to_uuid
+       @abstract       convert a UID to a corresponding UUID
+       @discussion     will convert a UID of a user to a corresponding UUID value.
+                               This call will always succeed and may return a synthesized
+                               UUID with the prefix FFFFEEEE-DDDD-CCCC-BBBB-AAAAxxxxxxxx,
+                               where 'xxxxxxxx' is a hex conversion of the UID. The returned
+                               UUID can be used for any operation including ACL and SACL
+                               memberships, even if a UUID is later assigned to the user
+                               record.
+       @param          uid the uid_t to be converted
+       @param          uu is the UUID found for the provided UID
+       @result         returns 0 on success or appropriate errno code.
+*/
+int mbr_uid_to_uuid(uid_t uid, uuid_t uu);
 
+/*!
+       @function   mbr_gid_to_uuid
+       @abstract   convert a GID to a corresponding UUID
+       @discussion will convert a GID of a group to a corresponding UUID value.
+                               This call will always succeed and may return a synthesized
+                               UUID with the prefix AAAABBBB-CCCC-DDDD-EEEE-FFFFxxxxxxxx,
+                               where 'xxxxxxxx' is a hex conversion of the UID. The returned
+                               UUID can be used for any operation including ACL and SACL
+                               memberships, even if a UUID is later assigned to the group
+                               record.
+       @param          gid the gid_t to be converted
+       @param          uu is the UUID found for the provided GID
+       @result         returns 0 on success or appropriate errno code.
+*/
+int mbr_gid_to_uuid(gid_t gid, uuid_t uu);
+
+/*!
+       @function   mbr_sid_to_uuid
+       @abstract       convert a SID to a corresponding UUID
+       @discussion will convert a SID to a corresponding UUID value. This call
+                               can fail for records that do not have a valid SID or RID.
+       @param          sid the nt_sid_t to be converted
+       @param          uu is the UUID found for the provided GID
+       @result         returns 0 on success or appropriate errno code.
+*/
+int mbr_sid_to_uuid(const nt_sid_t* sid, uuid_t uu);
+
+/*!
+       @function       mbr_identifier_to_uuid
+       @abstract       resolves various identifiers to corresponding UUID
+       @discussion     will resolve various identifiers such as X.509 Distinguished 
+                               Names, Kerberos ID or other forms of security identifiers to a
+                               corresponding UUID.
+       @param          id_type is one of the defined types
+       @param          identifier is a generic pointer as defined by the type
+       @param          identifier_size is the size of the data pointed to in identifier
+       @param          uu is the UUID found for the identifier
+       @result         returns 0 on success or appropriate errno code.
+*/
+int mbr_identifier_to_uuid(int id_type, const void *identifier, size_t identifier_size,
+                                                  uuid_t uu);
+
+/*!
+       @function       mbr_uuid_to_id
+       @abstract       resolves a UUID to a corresponding ID and type
+       @discussion     will resolve a UUID to a corresponding GID or UID and return
+                               the type of ID (ID_TYPE_UID or ID_TYPE_GID).  Synthesized
+                               UUID values will be directly translated to corresponding ID.
+                               A UID will always be returned even if the UUID is not found.  
+                               The returned ID is not persistant, but can be used to map back
+                               to the UUID during runtime.
+       @param          uu is the UUID to be resolved
+       @param          uid_or_gid is the UID or GID found for the UUID
+       @param          id_type is the type of ID
+       @result         returns 0 on success or appropriate errno code.
+*/
+int mbr_uuid_to_id(const uuid_t uu, id_t* uid_or_gid, int* id_type);
+
+/*!
+       @function       mbr_uuid_to_sid
+       @abstract       resolves a UUID to a corresponding SID
+       @discussion will resolve a UUID to a corresponding SID.
+       @param          uu is the UUID to be resolved
+       @param          sid is the SID found for the UUID
+       @result         returns 0 on success or appropriate errno code.
+*/
+int mbr_uuid_to_sid(const uuid_t uu, nt_sid_t* sid);
+
+/*!
+       @function       mbr_check_membership
+       @abstract       checks if a user is a member of a group
+       @discussion     will check if a user is a member of a group either through
+                               direct membership or via nested group membership.
+       @param          user is the UUID of the user in question
+       @param          group is the UUID of the group to be checked
+       @param          ismember is set to 1 if user is a member of the group,
+                               otherwise 0 is returned
+       @result         returns 0 on success or appropriate errno code.
+*/
 int mbr_check_membership(uuid_t user, uuid_t group, int* ismember);
 
+/*!
+       @function       mbr_check_service_membership
+       @abstract   checks if a user is part of a service group
+       @discussion will check if a user is a member of a service access group.
+                               The servicename provided will be automatically prefixed with
+                               "com.apple.access_" (e.g., "afp" becomes "com.apple.access_afp").
+                               In addition a special service group "com.apple.access_all_services"
+                               will be checked in addition to the specific service.
+       @param          user is the UUID of the user in question
+       @param          servicename is the service type (e.g., "afp", "ftp", etc.)
+       @param          ismember is set to 1 if user is a member of the group,
+                               otherwise 0 is returned
+       @result         returns 0 on success or appropriate errno code.
+*/
+int mbr_check_service_membership(const uuid_t user, const char *servicename, 
+                                                                int *ismember);
+
 __END_DECLS
 
 #endif /* !_MEMBERSHIP_H_ */