コード例 #1
0
def disable_fde_autologin():
    '''Disables autologin to the unlocking user's account on a FileVault-
    encrypted machines.'''

    # See https://support.apple.com/en-us/HT202842
    # We attempt to store the original value of com.apple.loginwindow
    # DisableFDEAutoLogin so if the local admin has set it to True for #reasons
    # we don't inadvertently clear it when clearing bootstrap mode

    # is OriginalDisableFDEAutoLogin already set? If so, bootstrap mode was
    # already enabled, and never properly cleared. Don't stomp on it.
    original_value = CFPreferencesCopyValue('OriginalDisableFDEAutoLogin',
                                            'com.apple.loginwindow',
                                            kCFPreferencesAnyUser,
                                            kCFPreferencesCurrentHost)
    if not original_value:
        # get the current value of DisableFDEAutoLogin if any
        original_value = CFPreferencesCopyValue('DisableFDEAutoLogin',
                                                'com.apple.loginwindow',
                                                kCFPreferencesAnyUser,
                                                kCFPreferencesCurrentHost)
        if not original_value:
            # we need a way to record the original value was not set,
            # and we can't store None...
            original_value = '<not set>'
        # store it so we can restore it later
        CFPreferencesSetValue('OriginalDisableFDEAutoLogin', original_value,
                              'com.apple.loginwindow', kCFPreferencesAnyUser,
                              kCFPreferencesCurrentHost)
    # set com.apple.loginwindow DisableFDEAutoLogin to True
    CFPreferencesSetValue('DisableFDEAutoLogin', True, 'com.apple.loginwindow',
                          kCFPreferencesAnyUser, kCFPreferencesCurrentHost)
    CFPreferencesAppSynchronize('com.apple.loginwindow')
コード例 #2
0
ファイル: appleupdates.py プロジェクト: zdw/munki
def getSoftwareUpdatePref(prefname):
    '''Returns a preference from
    /Library/Preferences/com.apple.SoftwareUpdate using
    CoreFoundation methods'''
    return CFPreferencesCopyValue(prefname, 'com.apple.SoftwareUpdate',
                                  kCFPreferencesAnyUser,
                                  kCFPreferencesCurrentHost)
コード例 #3
0
def get_config_level(domain, pref_name, value):
    '''Returns a string indicating where the given preference is defined'''
    if value is None:
        return '[not set]'
    if CFPreferencesAppValueIsForced(pref_name, domain):
        return '[MANAGED]'
    # define all the places we need to search, in priority order
    levels = [
        {
            'file': ('/var/root/Library/Preferences/ByHost/'
                     '%s.xxxx.plist' % domain),
            'domain':
            domain,
            'user':
            kCFPreferencesCurrentUser,
            'host':
            kCFPreferencesCurrentHost
        },
        {
            'file': '/var/root/Library/Preferences/%s.plist' % domain,
            'domain': domain,
            'user': kCFPreferencesCurrentUser,
            'host': kCFPreferencesAnyHost
        },
        {
            'file': ('/var/root/Library/Preferences/ByHost/'
                     '.GlobalPreferences.xxxx.plist'),
            'domain':
            '.GlobalPreferences',
            'user':
            kCFPreferencesCurrentUser,
            'host':
            kCFPreferencesCurrentHost
        },
        {
            'file': '/var/root/Library/Preferences/.GlobalPreferences.plist',
            'domain': '.GlobalPreferences',
            'user': kCFPreferencesCurrentUser,
            'host': kCFPreferencesAnyHost
        },
        {
            'file': '/Library/Preferences/%s.plist' % domain,
            'domain': domain,
            'user': kCFPreferencesAnyUser,
            'host': kCFPreferencesCurrentHost
        },
        {
            'file': '/Library/Preferences/.GlobalPreferences.plist',
            'domain': '.GlobalPreferences',
            'user': kCFPreferencesAnyUser,
            'host': kCFPreferencesCurrentHost
        },
    ]
    for level in levels:
        if (value == CFPreferencesCopyValue(pref_name, level['domain'],
                                            level['user'], level['host'])):
            return '[%s]' % level['file']
    if value == DEFAULT_PREFS.get(pref_name):
        return '[default]'
    return '[unknown]'
コード例 #4
0
def get_receipts():
    """Get the delivery receipts for the current console user"""
    receipts = CFPreferencesCopyValue(
        "DeliveryReceipts", BUNDLE_ID, get_console_user()[0],
        kCFPreferencesAnyHost)
    # Convert result into a mutable python dict.
    return dict(receipts) if receipts else {}
コード例 #5
0
def reset_fde_autologin():
    '''Resets the state of com.apple.loginwindow DisableFDEAutoLogin to its
    value before we set it to True'''
    # get the previous value of DisableFDEAutoLogin if any
    original_value = CFPreferencesCopyValue(
        'OriginalDisableFDEAutoLogin', 'com.apple.loginwindow',
        kCFPreferencesAnyUser, kCFPreferencesCurrentHost)
    if original_value == '<not set>':
        original_value = None
    # reset DisableFDEAutoLogin to original value (if original_value is None,
    # the key gets deleted)
    CFPreferencesSetValue(
        'DisableFDEAutoLogin', original_value, 'com.apple.loginwindow',
        kCFPreferencesAnyUser, kCFPreferencesCurrentHost)
    # delete the OriginalDisableFDEAutoLogin key
    CFPreferencesSetValue(
        'OriginalDisableFDEAutoLogin', None, 'com.apple.loginwindow',
        kCFPreferencesAnyUser, kCFPreferencesCurrentHost)
    CFPreferencesAppSynchronize('com.apple.loginwindow')
コード例 #6
0
ファイル: yo_scheduler.py プロジェクト: swibrow/yo
def schedule_notification(args):
    """Schedule a notification to be delivered to users"""
    # Get the arguments from the system-level preferences (i.e.
    # /Library/Preferences/com.sheagcraig.yo.plist). This precludes us
    # from using the _slightly_ shorter CFPreferencesCopyAppValue.
    notifications = CFPreferencesCopyValue("Notifications", BUNDLE_ID,
                                           kCFPreferencesAnyUser,
                                           kCFPreferencesAnyHost)
    # We get an immutable NSCFDictionary back from CFPreferences, so
    # copy it to a mutable python dict.
    notifications = dict(notifications) if notifications else {}

    # Convert args to string representation of a python list for later
    # reconversion back to python.
    notifications[repr(args)] = NSDate.alloc().init()

    CFPreferencesSetValue("Notifications", notifications, BUNDLE_ID,
                          kCFPreferencesAnyUser, kCFPreferencesAnyHost)

    # Use the simpler `AppSynchroniize`; it seems to flush all changes,
    # despite having to use the primitive methods above.
    CFPreferencesAppSynchronize(BUNDLE_ID)
def fixSpotlight():
    DISABLED_ITEMS = set(["MENU_WEBSEARCH", "MENU_SPOTLIGHT_SUGGESTIONS"])
    REQUIRED_ITEM_KEYS = set(["enabled", "name"])
    BUNDLE_ID = "com.apple.Spotlight"
    PREF_NAME = "orderedItems"
    DEFAULT_VALUE = [{
        'enabled': True,
        'name': 'APPLICATIONS'
    }, {
        'enabled': False,
        'name': 'MENU_SPOTLIGHT_SUGGESTIONS'
    }, {
        'enabled': True,
        'name': 'MENU_CONVERSION'
    }, {
        'enabled': True,
        'name': 'MENU_EXPRESSION'
    }, {
        'enabled': True,
        'name': 'MENU_DEFINITION'
    }, {
        'enabled': True,
        'name': 'SYSTEM_PREFS'
    }, {
        'enabled': True,
        'name': 'DOCUMENTS'
    }, {
        'enabled': True,
        'name': 'DIRECTORIES'
    }, {
        'enabled': True,
        'name': 'PRESENTATIONS'
    }, {
        'enabled': True,
        'name': 'SPREADSHEETS'
    }, {
        'enabled': True,
        'name': 'PDF'
    }, {
        'enabled': True,
        'name': 'MESSAGES'
    }, {
        'enabled': True,
        'name': 'CONTACT'
    }, {
        'enabled': True,
        'name': 'EVENT_TODO'
    }, {
        'enabled': True,
        'name': 'IMAGES'
    }, {
        'enabled': True,
        'name': 'BOOKMARKS'
    }, {
        'enabled': True,
        'name': 'MUSIC'
    }, {
        'enabled': True,
        'name': 'MOVIES'
    }, {
        'enabled': True,
        'name': 'FONTS'
    }, {
        'enabled': True,
        'name': 'MENU_OTHER'
    }, {
        'enabled': False,
        'name': 'MENU_WEBSEARCH'
    }]

    items = CFPreferencesCopyValue(PREF_NAME, BUNDLE_ID,
                                   kCFPreferencesCurrentUser,
                                   kCFPreferencesAnyHost)
    newItems = None
    if items is None or len(items) is 0:
        # Actual preference values are populated on demand; if the user
        # hasn't previously configured Spotlight, the preference value
        # will be unavailable
        newItems = DEFAULT_VALUE
    else:
        newItems = NSMutableArray.new()
        for item in items:
            missing_keys = []
            for key in REQUIRED_ITEM_KEYS:
                if not item.has_key(key):
                    missing_keys.append(key)

            if len(missing_keys) != 0:
                print "Preference item %s is missing expected keys (%s), skipping" % (
                    item, missing_keys)
                newItems.append(item)
                continue

            if item["name"] not in DISABLED_ITEMS:
                newItems.append(item)
                continue

            newItem = NSMutableDictionary.dictionaryWithDictionary_(item)
            newItem.setObject_forKey_(0, "enabled")
            newItems.append(newItem)

    CFPreferencesSetValue(PREF_NAME, newItems, BUNDLE_ID,
                          kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
    CFPreferencesSynchronize(BUNDLE_ID, kCFPreferencesCurrentUser,
                             kCFPreferencesAnyHost)
コード例 #8
0
def get_config_level(bundle_id, pref_name, value, showPath):
    '''Returns a string indicating where the given preference is defined'''
    if value is None:
        return 'not set'
    if CFPreferencesAppValueIsForced(pref_name, bundle_id):
        return 'Managed'
    home_dir = os.path.expanduser('~')
    # define all the places we need to search, in priority order
    levels = [
        {
            'location':
            'User/ByHost',
            'file':
            os.path.join(home_dir, 'Library/Preferences/ByHost',
                         bundle_id + '.xxxx.plist'),
            'domain':
            bundle_id,
            'user':
            kCFPreferencesCurrentUser,
            'host':
            kCFPreferencesCurrentHost
        },
        {
            'location':
            'User',
            'file':
            os.path.join(home_dir, 'Library/Preferences/',
                         bundle_id + '.plist'),
            'domain':
            bundle_id,
            'user':
            kCFPreferencesCurrentUser,
            'host':
            kCFPreferencesAnyHost
        },
        {
            'location':
            'User/ByHost/Global',
            'file':
            os.path.join(home_dir, 'Library/Preferences/ByHost',
                         '.GlobalPreferences.xxxx.plist'),
            'domain':
            kCFPreferencesAnyApplication,
            'user':
            kCFPreferencesCurrentUser,
            'host':
            kCFPreferencesCurrentHost
        },
        {
            'location':
            'User/Global',
            'file':
            os.path.join(home_dir, 'Library/Preferences',
                         '.GlobalPreferences.plist'),
            'domain':
            kCFPreferencesAnyApplication,
            'user':
            kCFPreferencesCurrentUser,
            'host':
            kCFPreferencesAnyHost
        },
        {
            'location': 'Computer',
            'file': os.path.join('/Library/Preferences', bundle_id + '.plist'),
            'domain': bundle_id,
            'user': kCFPreferencesAnyUser,
            'host': kCFPreferencesCurrentHost
        },
        {
            'location': 'Computer/Global',
            'file': '/Library/Preferences/.GlobalPreferences.plist',
            'domain': kCFPreferencesAnyApplication,
            'user': kCFPreferencesAnyUser,
            'host': kCFPreferencesCurrentHost
        },
    ]
    for level in levels:
        if (value == CFPreferencesCopyValue(pref_name, level['domain'],
                                            level['user'], level['host'])):
            if showPath:
                return level['file']
            else:
                return level['location']
    return 'unknown'
コード例 #9
0
 def get_key(key):
     """Returns the keys in Defaults"""
     return CFPreferencesCopyValue(key, kCFPreferencesAnyApplication,
                                   kCFPreferencesCurrentUser,
                                   kCFPreferencesAnyHost)
コード例 #10
0
#!/usr/bin/python

from Foundation import CFPreferencesCopyValue, \
                       kCFPreferencesCurrentUser, \
                       kCFPreferencesAnyUser, \
                       kCFPreferencesCurrentHost, \
                       kCFPreferencesAnyHost, \
                       kCFPreferencesAnyApplication

# User's ByHost (defaults -currentHost read)
print "Screen Saver: idleTime = ",
print CFPreferencesCopyValue("idleTime", "com.apple.screensaver", kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)

# User (defaults read)
print "Screen Saver: askForPassword = "******"askForPassword", "com.apple.screensaver", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)

# User, global domain
print "Global Domain: AppleLanguages = ",
print CFPreferencesCopyValue("AppleLanguages", kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesAnyHost)

# all Users (defaults read /Library/Preferences/)
print "Login Window: lastUserName = "******"lastUserName", "com.apple.loginwindow", kCFPreferencesAnyUser, kCFPreferencesCurrentHost)

# all Users, global
print "All Users, Global: AppleLanguages = ",
print CFPreferencesCopyValue("AppleLanguages", kCFPreferencesAnyApplication, kCFPreferencesAnyUser, kCFPreferencesCurrentHost)