File: //usr/lib/python2.7/site-packages/salt/states/pdbedit.py
# -*- coding: utf-8 -*-
'''
Manage accounts in Samba's passdb using pdbedit
:maintainer: Jorge Schrauwen <sjorge@blackdot.be>
:maturity: new
:depends: pdbedit
:platform: posix
.. versionadded:: 2017.7.0
.. code-block:: yaml
wash:
pdbedit.absent
kaylee:
pdbedit.managed:
- password: A70C708517B5DD0EDB67714FE25336EB
- password_hashed: True
- drive: 'X:'
- homedir: '\\\\serenity\\mechanic\\profile'
'''
from __future__ import absolute_import, print_function, unicode_literals
# Import Python libs
import logging
# Import Salt libs
import salt.utils.data
log = logging.getLogger(__name__)
# Define the state's virtual name
__virtualname__ = 'pdbedit'
def __virtual__():
'''
Provides pdbedit when available
'''
if 'pdbedit.create' in __salt__:
return True
else:
return (
False,
'{0} state module can only be loaded when the pdbedit module is available'.format(
__virtualname__
)
)
def absent(name):
'''
Ensure user account is absent
name : string
username
'''
ret = {'name': name,
'changes': {},
'result': True,
'comment': ''}
# remove if needed
if name in __salt__['pdbedit.list'](False):
res = __salt__['pdbedit.delete'](name)
if res[name] in ['deleted']: # check if we need to update changes
ret['changes'].update(res)
elif res[name] not in ['absent']: # oops something went wrong
ret['result'] = False
else:
ret['comment'] = 'account {login} is absent'.format(login=name)
return ret
def managed(name, **kwargs):
'''
Manage user account
login : string
login name
password : string
password
password_hashed : boolean
set if password is a nt hash instead of plain text
domain : string
users domain
profile : string
profile path
script : string
logon script
drive : string
home drive
homedir : string
home directory
fullname : string
full name
account_desc : string
account description
machine_sid : string
specify the machines new primary group SID or rid
user_sid : string
specify the users new primary group SID or rid
account_control : string
specify user account control properties
.. note::
Only the following can be set:
- N: No password required
- D: Account disabled
- H: Home directory required
- L: Automatic Locking
- X: Password does not expire
reset_login_hours : boolean
reset the users allowed logon hours
reset_bad_password_count : boolean
reset the stored bad login counter
'''
ret = {'name': name,
'changes': {},
'result': True,
'comment': ''}
# save state
saved = __salt__['pdbedit.list'](hashes=True)
saved = saved[name] if name in saved else {}
# call pdbedit.modify
kwargs['login'] = name
res = __salt__['pdbedit.modify'](**kwargs)
# calculate changes
if res[name] in ['created']:
ret['changes'] = res
elif res[name] in ['updated']:
ret['changes'][name] = salt.utils.data.compare_dicts(
saved,
__salt__['pdbedit.list'](hashes=True)[name],
)
elif res[name] not in ['unchanged']:
ret['result'] = False
ret['comment'] = res[name]
return ret
def present(name, **kwargs):
'''
Alias for pdbedit.managed
'''
return managed(name, **kwargs)
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4