Fixed reg state module for None, 0, and '' values

This commit is contained in:
twangboy 2015-09-10 11:07:13 -06:00
parent 3e902e86b1
commit ebbf2b05ca
2 changed files with 34 additions and 22 deletions

View file

@ -202,19 +202,25 @@ def read_value(hive, key, vname=None):
ret['vname'] = '(Default)'
registry = Registry()
hive = registry.hkeys[hive]
hkey = registry.hkeys[hive]
try:
handle = _winreg.OpenKey(hive, key)
vdata, vtype = _winreg.QueryValueEx(handle, vname)
if vdata:
ret['vdata'] = vdata
ret['vtype'] = registry.vtype_reverse[vtype]
else:
ret['comment'] = 'Empty Value'
handle = _winreg.OpenKey(hkey, key)
try:
vdata, vtype = _winreg.QueryValueEx(handle, vname)
if vdata or vdata in [0, '']:
ret['vtype'] = registry.vtype_reverse[vtype]
ret['vdata'] = vdata
else:
ret['comment'] = 'Empty Value'
except WindowsError as exc: # pylint: disable=E0602
ret['vdata'] = ('(value not set)')
ret['vtype'] = 'REG_SZ'
ret['success'] = True
except WindowsError as exc: # pylint: disable=E0602
log.debug(exc)
ret['comment'] = '{0}'.format(exc)
log.debug('Cannot find key: {0}\\{1}'.format(hive, key))
ret['comment'] = 'Cannot find key: {0}\\{1}'.format(hive, key)
ret['success'] = False
return ret
@ -315,7 +321,7 @@ def set_value(hive, key, vname=None, vdata=None, vtype='REG_SZ', reflection=True
_winreg.CloseKey(handle)
return True
except (WindowsError, ValueError) as exc: # pylint: disable=E0602
log.error(exc)
log.error(exc, exc_info=True)
return False
@ -437,7 +443,7 @@ def delete_key(hkey, path, key=None, reflection=True, force=False):
_winreg.DeleteKey(hive, key)
return True
except WindowsError as exc: # pylint: disable=E0602
log.error(exc)
log.error(exc, exc_info=True)
return False
@ -498,7 +504,7 @@ def delete_key_recursive(hive, key):
_winreg.DeleteKey(hkey, keypath)
ret['Deleted'].append(r'{0}\{1}'.format(hive, keypath))
except WindowsError as exc: # pylint: disable=E0602
log.error(exc)
log.error(exc, exc_info=True)
ret['Failed'].append(r'{0}\{1} {2}'.format(hive, key, exc))
# Delete the key now that all the subkeys are deleted
@ -506,7 +512,7 @@ def delete_key_recursive(hive, key):
_winreg.DeleteKey(hkey, key)
ret['Deleted'].append(r'{0}\{1}'.format(hive, key))
except WindowsError as exc: # pylint: disable=E0602
log.error(exc)
log.error(exc, exc_info=True)
ret['Failed'].append(r'{0}\{1} {2}'.format(hive, key, exc))
return ret
@ -555,5 +561,5 @@ def delete_value(hive, key, vname=None, reflection=True):
return True
except WindowsError as exc: # pylint: disable=E0602
_winreg.CloseKey(handle)
log.error(exc)
log.error(exc, exc_info=True)
return False

View file

@ -184,7 +184,7 @@ def present(name, value=None, vname=None, vdata=None, vtype='REG_SZ', reflection
# This is for backwards compatibility
# If 'value' is passed a value, vdata becomes value and the vname is
# obtained from the key path
if value:
if value or value in [0, '']:
hive, key, vname = _parse_key_value(name)
vdata = value
ret['comment'] = 'State file is using deprecated syntax. Please update.'
@ -206,7 +206,7 @@ def present(name, value=None, vname=None, vdata=None, vtype='REG_SZ', reflection
add_change = {'Key': r'{0}\{1}'.format(hive, key),
'Entry': '{0}'.format(vname if vname else '(Default)'),
'Value': '{0}'.format(vdata if vdata else '(Empty String)')}
'Value': '{0}'.format(vdata)}
# Check for test option
if __opts__['test']:
@ -252,9 +252,15 @@ def absent(name, vname=None):
hive, key = _parse_key(name)
# Determine what to do
if not __salt__['reg.read_value'](hive, key, vname)['success']:
hive, key, vname = _parse_key_value(name)
if not __salt__['reg.read_value'](hive, key, vname)['success']:
reg_check = __salt__['reg.read_value'](hive, key, vname)
if not reg_check['success'] or reg_check['vdata'] == '(value not set)':
if not vname:
hive, key, vname = _parse_key_value(name)
reg_check = __salt__['reg.read_value'](hive, key, vname)
if not reg_check['success'] or reg_check['vdata'] == '(value not set)':
ret['comment'] = '{0} is already absent'.format(name)
return ret
else:
ret['comment'] = '{0} is already absent'.format(name)
return ret
@ -271,11 +277,11 @@ def absent(name, vname=None):
ret['result'] = __salt__['reg.delete_value'](hive, key, vname)
if not ret['result']:
ret['changes'] = {}
ret['comment'] = r'Failed to remove {0} from {1}\{2}'.format(name, hive,
key)
ret['comment'] = r'Failed to remove {0}\{1} from {2}'.format(key, vname,
hive)
else:
ret['changes'] = {'reg': {'Removed': remove_change}}
ret['comment'] = r'Removed {0} from {1}\{2}'.format(name, hive, key)
ret['comment'] = r'Removed {0}\{1} from {2}'.format(key, name, hive)
return ret