mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Add 'other' attribute to GECOS fields to avoid inconsistencies with chfn
This commit is contained in:
parent
6c089c9de1
commit
694882632c
2 changed files with 44 additions and 12 deletions
|
@ -60,17 +60,18 @@ def _get_gecos(name):
|
|||
Retrieve GECOS field info and return it in dictionary form
|
||||
'''
|
||||
gecos_field = salt.utils.stringutils.to_unicode(
|
||||
pwd.getpwnam(_quote_username(name)).pw_gecos).split(',', 3)
|
||||
pwd.getpwnam(_quote_username(name)).pw_gecos).split(',', 4)
|
||||
if not gecos_field:
|
||||
return {}
|
||||
else:
|
||||
# Assign empty strings for any unspecified trailing GECOS fields
|
||||
while len(gecos_field) < 4:
|
||||
while len(gecos_field) < 5:
|
||||
gecos_field.append('')
|
||||
return {'fullname': salt.utils.locales.sdecode(gecos_field[0]),
|
||||
'roomnumber': salt.utils.locales.sdecode(gecos_field[1]),
|
||||
'workphone': salt.utils.locales.sdecode(gecos_field[2]),
|
||||
'homephone': salt.utils.locales.sdecode(gecos_field[3])}
|
||||
'homephone': salt.utils.locales.sdecode(gecos_field[3]),
|
||||
'other': salt.utils.locales.sdecode(gecos_field[4])}
|
||||
|
||||
|
||||
def _build_gecos(gecos_dict):
|
||||
|
@ -78,10 +79,11 @@ def _build_gecos(gecos_dict):
|
|||
Accepts a dictionary entry containing GECOS field names and their values,
|
||||
and returns a full GECOS comment string, to be used with usermod.
|
||||
'''
|
||||
return '{0},{1},{2},{3}'.format(gecos_dict.get('fullname', ''),
|
||||
gecos_dict.get('roomnumber', ''),
|
||||
gecos_dict.get('workphone', ''),
|
||||
gecos_dict.get('homephone', '')).rstrip(',')
|
||||
return '{0},{1},{2},{3},{4}'.format(gecos_dict.get('fullname', ''),
|
||||
gecos_dict.get('roomnumber', ''),
|
||||
gecos_dict.get('workphone', ''),
|
||||
gecos_dict.get('homephone', ''),
|
||||
gecos_dict.get('other', ''),).rstrip(',')
|
||||
|
||||
|
||||
def _update_gecos(name, key, value, root=None):
|
||||
|
@ -507,6 +509,19 @@ def chhomephone(name, homephone):
|
|||
return _update_gecos(name, 'homephone', homephone)
|
||||
|
||||
|
||||
def chother(name, other):
|
||||
'''
|
||||
Change the user's other GECOS attribute
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
salt '*' user.chother foobar
|
||||
'''
|
||||
return _update_gecos(name, 'other', other)
|
||||
|
||||
|
||||
def chloginclass(name, loginclass, root=None):
|
||||
'''
|
||||
Change the default login class of the user
|
||||
|
@ -588,9 +603,9 @@ def _format_info(data):
|
|||
Return user information in a pretty way
|
||||
'''
|
||||
# Put GECOS info into a list
|
||||
gecos_field = salt.utils.stringutils.to_unicode(data.pw_gecos).split(',', 3)
|
||||
# Make sure our list has at least four elements
|
||||
while len(gecos_field) < 4:
|
||||
gecos_field = salt.utils.stringutils.to_unicode(data.pw_gecos).split(',', 4)
|
||||
# Make sure our list has at least five elements
|
||||
while len(gecos_field) < 5:
|
||||
gecos_field.append('')
|
||||
|
||||
return {'gid': data.pw_gid,
|
||||
|
@ -603,7 +618,8 @@ def _format_info(data):
|
|||
'fullname': gecos_field[0],
|
||||
'roomnumber': gecos_field[1],
|
||||
'workphone': gecos_field[2],
|
||||
'homephone': gecos_field[3]}
|
||||
'homephone': gecos_field[3],
|
||||
'other': gecos_field[4]}
|
||||
|
||||
|
||||
@salt.utils.decorators.path.which('id')
|
||||
|
|
|
@ -68,6 +68,7 @@ def _changes(name,
|
|||
roomnumber='',
|
||||
workphone='',
|
||||
homephone='',
|
||||
other='',
|
||||
loginclass=None,
|
||||
date=None,
|
||||
mindays=0,
|
||||
|
@ -188,6 +189,12 @@ def _changes(name,
|
|||
lusr['homephone'] = sdecode_if_string(lusr['homephone'])
|
||||
if lusr['homephone'] != homephone:
|
||||
change['homephone'] = homephone
|
||||
if 'user.chother' in __salt__ \
|
||||
and other is not None:
|
||||
other = sdecode_if_string(other)
|
||||
lusr['other'] = sdecode_if_string(lusr['other'])
|
||||
if lusr['other'] != other:
|
||||
change['other'] = other
|
||||
# OpenBSD/FreeBSD login class
|
||||
if __grains__['kernel'] in ('OpenBSD', 'FreeBSD'):
|
||||
if loginclass:
|
||||
|
@ -236,6 +243,7 @@ def present(name,
|
|||
roomnumber=None,
|
||||
workphone=None,
|
||||
homephone=None,
|
||||
other=None,
|
||||
loginclass=None,
|
||||
date=None,
|
||||
mindays=None,
|
||||
|
@ -377,7 +385,10 @@ def present(name,
|
|||
|
||||
homephone
|
||||
The user's home phone number (not supported in MacOS)
|
||||
If GECOS field contains more than 3 commas, this field will have the rest of 'em
|
||||
|
||||
other
|
||||
The user's other attribute (not supported in MacOS)
|
||||
If GECOS field contains more than 4 commas, this field will have the rest of 'em
|
||||
|
||||
.. versionchanged:: 2014.7.0
|
||||
Shadow attribute support added.
|
||||
|
@ -448,6 +459,8 @@ def present(name,
|
|||
workphone = sdecode(workphone)
|
||||
if homephone is not None:
|
||||
homephone = sdecode(homephone)
|
||||
if other is not None:
|
||||
other = sdecode(other)
|
||||
|
||||
# createhome not supported on Windows or Mac
|
||||
if __grains__['kernel'] in ('Darwin', 'Windows'):
|
||||
|
@ -519,6 +532,7 @@ def present(name,
|
|||
roomnumber,
|
||||
workphone,
|
||||
homephone,
|
||||
other,
|
||||
loginclass,
|
||||
date,
|
||||
mindays,
|
||||
|
@ -654,6 +668,7 @@ def present(name,
|
|||
roomnumber,
|
||||
workphone,
|
||||
homephone,
|
||||
other,
|
||||
loginclass,
|
||||
date,
|
||||
mindays,
|
||||
|
@ -705,6 +720,7 @@ def present(name,
|
|||
'roomnumber': roomnumber,
|
||||
'workphone': workphone,
|
||||
'homephone': homephone,
|
||||
'other': other,
|
||||
'createhome': createhome,
|
||||
'nologinit': nologinit,
|
||||
'loginclass': loginclass}
|
||||
|
|
Loading…
Add table
Reference in a new issue