diff options
-rw-r--r-- | src/libutil/util.c | 216 |
1 files changed, 1 insertions, 215 deletions
diff --git a/src/libutil/util.c b/src/libutil/util.c index 0e3a7b97e..3dc1adea1 100644 --- a/src/libutil/util.c +++ b/src/libutil/util.c @@ -566,195 +566,6 @@ rspamd_title_dtor (gpointer d) } #endif -#ifdef __APPLE__ - -/* Code is based on darwin-proctitle.c used almost everywhere */ - -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include <dlfcn.h> -#include <TargetConditionals.h> -#include <CoreFoundation/CoreFoundation.h> -#include <ApplicationServices/ApplicationServices.h> - -/* Darwin is just brain damaged */ -static int (*dynamic_pthread_setname_np)(const char* name); -static CFStringRef (*pCFStringCreateWithCString)(CFAllocatorRef, - const char*, - CFStringEncoding); -static CFBundleRef (*pCFBundleGetBundleWithIdentifier)(CFStringRef); -static void *(*pCFBundleGetDataPointerForName)(CFBundleRef, CFStringRef); -static void *(*pCFBundleGetFunctionPointerForName)(CFBundleRef, CFStringRef); -static CFTypeRef (*pLSGetCurrentApplicationASN)(void); -static OSStatus (*pLSSetApplicationInformationItem)(int, - CFTypeRef, - CFStringRef, - CFStringRef, - CFDictionaryRef*); -static CFBundleRef launch_services_bundle; -static CFStringRef* display_name_key; -static CFDictionaryRef (*pCFBundleGetInfoDictionary)(CFBundleRef); -static CFBundleRef (*pCFBundleGetMainBundle)(void); -static CFBundleRef hi_services_bundle; -static OSStatus (*pSetApplicationIsDaemon)(int); -static CFDictionaryRef (*pLSApplicationCheckIn)(int, CFDictionaryRef); -static void (*pLSSetApplicationLaunchServicesServerConnectionStatus)(uint64_t, - void*); -#define APPLE_S(s) pCFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8) -/* Dlfunc handles */ -struct rspamd_osx_handles { - gpointer application_services_handle; - gpointer core_foundation_handle; -}; - -static -void rspamd_darwin_title_dtor (void *ud) -{ - struct rspamd_osx_handles *hdls = (struct rspamd_osx_handles *)ud; - - if (hdls->core_foundation_handle != NULL) { - dlclose (hdls->core_foundation_handle); - } - - if (hdls->application_services_handle != NULL) { - dlclose (hdls->application_services_handle); - } -} - -static void -rspamd_darwin_init_title (rspamd_mempool_t *pool) -{ - struct rspamd_osx_handles *hdls; - /* Assumed that pthreads are already linked */ - *(void **)(&dynamic_pthread_setname_np) = - dlsym (RTLD_DEFAULT, "pthread_setname_np"); - - hdls = rspamd_mempool_alloc0 (pool, sizeof (*hdls)); - - hdls->application_services_handle = dlopen("/System/Library/Frameworks/" - "ApplicationServices.framework/" - "Versions/A/ApplicationServices", - RTLD_LAZY | RTLD_LOCAL); - hdls->core_foundation_handle = dlopen("/System/Library/Frameworks/" - "CoreFoundation.framework/" - "Versions/A/CoreFoundation", - RTLD_LAZY | RTLD_LOCAL); - - if (hdls->application_services_handle == NULL || - hdls->core_foundation_handle == NULL) { - goto out; - } - - /* Fill procedures via dlsym */ - *(void **)(&pCFStringCreateWithCString) = - dlsym (hdls->core_foundation_handle, "CFStringCreateWithCString"); - *(void **)(&pCFBundleGetBundleWithIdentifier) = - dlsym (hdls->core_foundation_handle, "CFBundleGetBundleWithIdentifier"); - *(void **)(&pCFBundleGetDataPointerForName) = - dlsym (hdls->core_foundation_handle, "CFBundleGetDataPointerForName"); - *(void **)(&pCFBundleGetFunctionPointerForName) = - dlsym (hdls->core_foundation_handle, "CFBundleGetFunctionPointerForName"); - - if (pCFStringCreateWithCString == NULL || - pCFBundleGetBundleWithIdentifier == NULL || - pCFBundleGetDataPointerForName == NULL || - pCFBundleGetFunctionPointerForName == NULL) { - goto out; - } - - launch_services_bundle = - pCFBundleGetBundleWithIdentifier(APPLE_S("com.apple.LaunchServices")); - - if (launch_services_bundle == NULL) { - goto out; - } - - *(void **)(&pLSGetCurrentApplicationASN) = - pCFBundleGetFunctionPointerForName(launch_services_bundle, - APPLE_S("_LSGetCurrentApplicationASN")); - - if (pLSGetCurrentApplicationASN == NULL) { - goto out; - } - - *(void **)(&pLSSetApplicationInformationItem) = - pCFBundleGetFunctionPointerForName(launch_services_bundle, - APPLE_S("_LSSetApplicationInformationItem")); - - if (pLSSetApplicationInformationItem == NULL) { - goto out; - } - - display_name_key = pCFBundleGetDataPointerForName(launch_services_bundle, - APPLE_S("_kLSDisplayNameKey")); - - if (display_name_key == NULL || *display_name_key == NULL) { - goto out; - } - - *(void **)(&pCFBundleGetInfoDictionary) = dlsym (hdls->core_foundation_handle, - "CFBundleGetInfoDictionary"); - *(void **)(&pCFBundleGetMainBundle) = dlsym (hdls->core_foundation_handle, - "CFBundleGetMainBundle"); - - if (pCFBundleGetInfoDictionary == NULL || pCFBundleGetMainBundle == NULL) { - goto out; - } - - /* Black 10.9 magic, to remove (Not responding) mark in Activity Monitor */ - hi_services_bundle = - pCFBundleGetBundleWithIdentifier(APPLE_S("com.apple.HIServices")); - - if (hi_services_bundle == NULL) { - goto out; - } - - *(void **)(&pSetApplicationIsDaemon) = pCFBundleGetFunctionPointerForName( - hi_services_bundle, - APPLE_S("SetApplicationIsDaemon")); - *(void **)(&pLSApplicationCheckIn) = pCFBundleGetFunctionPointerForName( - launch_services_bundle, - APPLE_S("_LSApplicationCheckIn")); - *(void **)(&pLSSetApplicationLaunchServicesServerConnectionStatus) = - pCFBundleGetFunctionPointerForName( - launch_services_bundle, - APPLE_S("_LSSetApplicationLaunchServicesServerConnectionStatus")); - - if (pSetApplicationIsDaemon == NULL || - pLSApplicationCheckIn == NULL || - pLSSetApplicationLaunchServicesServerConnectionStatus == NULL) { - goto out; - } - - rspamd_mempool_add_destructor (pool, - rspamd_darwin_title_dtor, hdls); - - return; - -out: - rspamd_darwin_title_dtor (hdls); -} - -#endif - gint init_title (rspamd_mempool_t *pool, gint argc, gchar *argv[], gchar *envp[]) @@ -815,8 +626,6 @@ init_title (rspamd_mempool_t *pool, rspamd_mempool_add_destructor (pool, rspamd_title_dtor, new_environ); -#elif defined(__APPLE__) - rspamd_darwin_init_title (pool); #endif return 0; @@ -864,30 +673,7 @@ setproctitle (const gchar *fmt, ...) written = strlen (title_buffer); memset (title_buffer + written, '\0', title_buffer_size - written); #elif defined(__APPLE__) - static gchar titlebuf[128]; - - va_list ap; - int r; - va_start (ap, fmt); - r = rspamd_snprintf (titlebuf, sizeof (titlebuf), "rspamd: "); - rspamd_vsnprintf (titlebuf + r, sizeof (titlebuf) - r, fmt, ap); - va_end (ap); - - if (pSetApplicationIsDaemon != NULL && pSetApplicationIsDaemon (1) != noErr) { - CFTypeRef asn; - pLSSetApplicationLaunchServicesServerConnectionStatus (0, NULL); - pLSApplicationCheckIn (/* Magic value */ -2, - pCFBundleGetInfoDictionary (pCFBundleGetMainBundle())); - asn = pLSGetCurrentApplicationASN (); - pLSSetApplicationInformationItem (/* Magic value */ -2, asn, - *display_name_key, APPLE_S (titlebuf), NULL); - } - - if (dynamic_pthread_setname_np != NULL) { - char namebuf[64]; /* MAXTHREADNAMESIZE */ - rspamd_strlcpy (namebuf, titlebuf, sizeof(namebuf)); - dynamic_pthread_setname_np (namebuf); - } + /* OSX is broken, ignore this brain damaged system */ #else /* Last resort (usually broken, but eh...) */ GString *dest; |