#ifndef __aod_h__
#define __aod_h__ 1
#include <uuid/uuid.h>
#include <DirectoryService/DirServices.h>
#include <DirectoryService/DirServicesUtils.h>
#include <DirectoryService/DirServicesConst.h>
#include "prot.h"
#define kXMLKeyAttrVersion "kAttributeVersion"
#define kXMLValueVersion "Apple Mail 1.0"
#define kXMLKeyAcctState "kMailAccountState"
#define kXMLValueAcctEnabled "Enabled"
#define kXMLValueAcctDisabled "Off"
#define kXMLValueAcctFwd "Forward"
#define kXMLKeyAutoFwd "kAutoForwardValue"
#define kXMLKeykIMAPLoginState "kIMAPLoginState"
#define kXMLValueIMAPLoginOK "IMAPAllowed"
#define kXMLValueIMAPLogInNotOK "IMAPDeny"
#define kXMLKeyPOP3LoginState "kPOP3LoginState"
#define kXMLValuePOP3LoginOK "POP3Allowed"
#define kXMLValuePOP3LoginNotOK "POP3Deny"
#define kXMLKeyAcctLoc "kMailAccountLocation"
#define kXMLKeyAltDataStoreLoc "kAltMailStoreLoc"
#define kXMLKeyDiskQuota "kUserDiskQuota"
#define kXMLDictionary "cyrus"
#define kXMLSMTP_Principal "smtp_principal"
#define kXMLIMAP_Principal "imap_principal"
#define kXMLPOP3_Principal "pop_principal"
#define kPlistFilePath "/etc/MailServicesOther.plist"
#define kMAX_GUID_LEN 128
#define kONE_K_BUF 1024
#define MAX_USER_NAME_SIZE 256
#define MAX_USER_BUF_SIZE 512
#define MAX_CHAL_BUF_SIZE 2048
#define MAX_IO_BUF_SIZE 21848
typedef enum {
eAODNoErr = 0,
eAODParamErr = -1,
eAODOpenDSFailed = -2,
eAODOpenSearchFailed = -3,
eAODUserNotFound = -4,
eAODCantOpenUserNode = -5,
eAODAuthFailed = -6,
eAODAuthWarnNewPW = -7,
eAODAuthWarnExpirePW = -8,
eAODAllocError = -9,
eAODConfigError = -10,
eAODMethodNotEnabled = -11,
eAODAuthCanceled = -12,
eAODProtocolError = -13,
eAODInvalidDataType = -14,
eAODItemNotFound = -15,
eAODWrongVersion = -16,
eAODLostConnection = -17,
eAODNullbuffer = -18,
eAOD = 0xFF
} eAODError;
typedef enum {
eUnknownState = 0x00000000,
eUnknownUser = 0x00000001,
eAccountEnabled = 0x00000002,
eIMAPEnabled = 0x00000004,
ePOPEnabled = 0x00000008,
eAutoForwardedEnabled = 0x00000010,
eACLNotMember = 0x00000020
} eAccountState;
struct od_user_opts
{
tDirReference fDirRef;
tDirNodeReference fSearchNodeRef;
eAccountState fAccountState;
int fDiskQuota;
char *fUserIDPtr;
uuid_t *fUserUUID;
char *fAuthIDNamePtr;
char *fRecNamePtr;
char *fAccountLocPtr;
char *fAltDataLocPtr;
char *fAutoFwdPtr;
char *fUserLocPtr;
};
typedef enum
{
kSGSSSuccess = 0,
kSGSSBufferSizeErr = -70001,
kSGSSImportNameErr = -70002,
kSGSSAquireCredErr = -70003,
kSGSSInquireCredErr = -70004,
kSGSSAuthFailed = -70005,
kGSSErrUnknownType = -70010,
kUnknownErr = -70010
} eGSSError;
#define CHAR64(c) (((c) < 0 || (c) > 127) ? -1 : index_64[(c)])
static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????";
static char index_64[ 128 ] =
{
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
-1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
};
int odGetUserOpts ( const char *inUserID, struct od_user_opts *inOutOpts );
void odFreeUserOpts ( struct od_user_opts *inOutOpts, int inFreeOD );
int odCheckPass ( const char *inPasswd, struct od_user_opts *inOutOpts );
int odCheckAPOP ( const char *inChallenge, const char *inResponse, struct od_user_opts *inOutOpts );
int odCRAM_MD5 ( const char *inChallenge, const char *inResponse, struct od_user_opts *inOutOpts );
int odDoAuthenticate ( const char *inMethod, const char *inDigest, const char *inCont,
const char *inProtocol, struct protstream *inStreamIn,
struct protstream *inStreamOut, struct od_user_opts *inOutOpts );
int odIsMember ( const char *inUser, const char *inGroup );
typedef struct
{
int len;
char key[ FILENAME_MAX ];
int reserved;
} CallbackUserData;
int apple_password_callback ( char *inBuf, int inSize, int in_rwflag, void *inUserData );
#endif