X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/67c8f8a10700c05d2460d60f5927f23cb5cb9241..672757b60c624961fea11e4a8daff622e0908058:/mDNSMacOSX/helper.h diff --git a/mDNSMacOSX/helper.h b/mDNSMacOSX/helper.h index 00d5289..eedf738 100644 --- a/mDNSMacOSX/helper.h +++ b/mDNSMacOSX/helper.h @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4 -*- * - * Copyright (c) 2007 Apple Inc. All rights reserved. + * Copyright (c) 2007-2013 Apple Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,78 +13,141 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - - Change History (most recent first): - -$Log: helper.h,v $ -Revision 1.6 2007/09/20 22:33:17 cheshire -Tidied up inconsistent and error-prone naming -- used to be mDNSResponderHelper in -some places and mDNSResponder.helper in others; now mDNSResponderHelper everywhere - -Revision 1.5 2007/09/07 22:44:03 mcguire - Move CFUserNotification code to mDNSResponderHelper - -Revision 1.4 2007/09/04 22:32:58 mcguire - BTMM: BTMM overwrites /etc/racoon/remote/anonymous.conf - -Revision 1.3 2007/08/23 21:51:44 cheshire -Made code layout style consistent with existing project style; added $Log header - -Revision 1.1 2007/08/08 22:34:58 mcguire - Security: Run mDNSResponder as user id mdnsresponder instead of root */ #ifndef H_HELPER_H #define H_HELPER_H -#define kmDNSHelperServiceName "com.apple.mDNSResponderHelper" +#include + +#define kHelperService "com.apple.mDNSResponder_Helper" + +#define kmDNSHelperProgramArgs CFSTR("com.apple.mDNSResponderHelper") +#define kPreferencesKey_mDNSHelperLog CFSTR("mDNSHelperDebugLogging") + +#define kHelperMode "HelperMode" +#define kHelperReplyStatus "HelperReplyStatusToClient" +#define kHelperErrCode "HelperErrorCodefromCall" + +#define kPrefsNameKey "PreferencesNameKey" +#define kPrefsOldName "PreferencesOldName" +#define kPrefsNewName "PreferencesNewName" + +extern int mDNSHelperLogEnabled; + +extern os_log_t log_handle; + +typedef enum +{ + bpf_request = 1, + set_name = 2, + p2p_packetfilter = 3, + user_notify = 4, + power_req = 5, + send_wakepkt = 6, + set_localaddr_cacheentry = 7, + send_keepalive = 8, + retreive_tcpinfo = 9, + keychain_getsecrets = 10, + autotunnel_setkeys = 11, + request_other, +} HelperModes; + +typedef enum +{ + kHelperReply_ACK = 0, +} HelperReplyStatusCodes; + + +typedef enum +{ + kHelperErr_NoErr = 0, + kHelperErr_DefaultErr = -1, + kHelperErr_NotConnected = -2, + kHelperErr_NoResponse = -3, + kHelperErr_UndefinedMode = -4, + kHelperErr_ApiErr = -5, + kHelperErr_InvalidTunnelSetKeysOperation = -6, + kHelperErr_InvalidNetworkAddress = -7, + kHelperErr_ResultTooLarge = -8, + kHelperErr_RacoonConfigCreationFailed = -9, + kHelperErr_IPsecPolicySocketCreationFailed = -10, + kHelperErr_IPsecPolicyCreationFailed = -11, + kHelperErr_IPsecPolicySetFailed = -12, + kHelperErr_IPsecRemoveSAFailed = -13, + kHelperErr_IPsecDisabled = -14, + kHelperErr_RoutingSocketCreationFailed = -15, + kHelperErr_RouteDeletionFailed = -16, + kHelperErr_RouteAdditionFailed = -17, + kHelperErr_RacoonStartFailed = -18, + kHelperErr_RacoonNotificationFailed = -19, +} HelperErrorCodes; -enum mDNSDynamicStoreSetConfigKey - { - kmDNSMulticastConfig = 1, - kmDNSDynamicConfig, - kmDNSPrivateConfig, - kmDNSBackToMyMacConfig - }; enum mDNSPreferencesSetNameKey - { - kmDNSComputerName = 1, - kmDNSLocalHostName - }; +{ + kmDNSComputerName = 1, + kmDNSLocalHostName +}; enum mDNSUpDown - { - kmDNSUp = 1, - kmDNSDown - }; +{ + kmDNSUp = 1, + kmDNSDown +}; enum mDNSAutoTunnelSetKeysReplaceDelete - { - kmDNSAutoTunnelSetKeysReplace = 1, - kmDNSAutoTunnelSetKeysDelete - }; - -#define ERROR(x, y) x, -enum mDNSHelperErrors - { - mDNSHelperErrorBase = 2300, - #include "helper-error.h" - mDNSHelperErrorEnd - }; -#undef ERROR +{ + kmDNSAutoTunnelSetKeysReplace = 1, + kmDNSAutoTunnelSetKeysDelete +}; + + +// helper parses the system keychain and returns the information to mDNSResponder. +// It returns four attributes. Attributes are defined after how they show up in +// keychain access utility (the actual attribute name to retrieve these are different). +enum mDNSKeyChainAttributes +{ + kmDNSKcWhere, // Where + kmDNSKcAccount, // Account + kmDNSKcKey, // Key + kmDNSKcName // Name +}; #include "mDNSEmbeddedAPI.h" #include "helpermsg-types.h" extern const char *mDNSHelperError(int errornum); -extern int mDNSPreferencesSetName(int key, domainlabel* old, domainlabel* new); -extern int mDNSDynamicStoreSetConfig(int key, CFPropertyListRef value); -extern int mDNSKeychainGetSecrets(CFArrayRef *secrets); -extern int mDNSAutoTunnelInterfaceUpDown(int updown, v6addr_t addr); -extern int mDNSConfigureServer(int updown, const char *keydata); -extern int mDNSAutoTunnelSetKeys(int replacedelete, v6addr_t local_inner, - v4addr_t local_outer, short local_port, v6addr_t remote_inner, - v4addr_t remote_outer, short remote_port, const char *keydata); + +extern mStatus mDNSHelperInit(void); + + +extern void mDNSRequestBPF(void); +extern int mDNSPowerRequest(int key, int interval); +extern int mDNSSetLocalAddressCacheEntry(int ifindex, int family, const v6addr_t ip, const ethaddr_t eth); +extern void mDNSNotify(const char *title, const char *msg); // Both strings are UTF-8 text +extern void mDNSPreferencesSetName(int key, domainlabel *old, domainlabel *new); +extern int mDNSKeychainGetSecrets(CFArrayRef *secrets); +extern int mDNSAutoTunnelSetKeys(int replacedelete, v6addr_t local_inner, + v6addr_t local_outer, short local_port, v6addr_t remote_inner, + v6addr_t remote_outer, short remote_port, const char *const prefix, const domainname *const fqdn); +extern void mDNSSendWakeupPacket(unsigned ifid, char *eth_addr, char *ip_addr, int iteration); +extern void mDNSPacketFilterControl(uint32_t command, char * ifname, uint32_t count, pfArray_t portArray, pfArray_t protocolArray); +extern void mDNSSendKeepalive(const v6addr_t sadd, const v6addr_t dadd, uint16_t lport, uint16_t rport, unsigned seq, unsigned ack, uint16_t win); +extern int mDNSRetrieveTCPInfo(int family, v6addr_t laddr, uint16_t lport, v6addr_t raddr, uint16_t rport, uint32_t *seq, uint32_t *ack, uint16_t *win, int32_t *intfid); + +extern void RequestBPF(void); +extern void PreferencesSetName(int key, const char* old, const char* new); +extern void PacketFilterControl(uint32_t command, const char * ifname, uint32_t count, pfArray_t portArray, pfArray_t protocolArray); +extern void UserNotify(const char *title, const char *msg); // Both strings are UTF-8 text +extern void PowerRequest(int key, int interval, int *error); +extern void SendWakeupPacket(unsigned int ifid, const char *eth_addr, const char *ip_addr, int iteration); +extern void SetLocalAddressCacheEntry(int ifindex, int family, const v6addr_t ip, const ethaddr_t eth, int *err); +extern void SendKeepalive(const v6addr_t sadd6, const v6addr_t dadd6, uint16_t lport, uint16_t rport, uint32_t seq, uint32_t ack, uint16_t win); +extern void RetrieveTCPInfo(int family, const v6addr_t laddr, uint16_t lport, const v6addr_t raddr, uint16_t rport, uint32_t *seq, uint32_t *ack, uint16_t *win, int32_t *intfid, int *err); +extern void KeychainGetSecrets(__unused unsigned int *numsecrets,__unused unsigned long *secrets, __unused unsigned int *secretsCnt, __unused int *err); +extern int HelperAutoTunnelSetKeys(int replacedelete, const v6addr_t loc_inner, const v6addr_t loc_outer6, uint16_t loc_port, const v6addr_t rmt_inner, + const v6addr_t rmt_outer6, uint16_t rmt_port, const char *id, int *err); +extern void helper_exit(void); #endif /* H_HELPER_H */