Func/Rpms Module - Function Verify
From Open Source@Seneca
Contents |
Project Name
Func Rpm Module Verification Method - Current Version 1.0 RC1.
Project Description
Create a method inside the Func rpms module to verify the rpms of the system.
This method will generate the same output of the command
#rpm -V -a
It will allow a system administrator to execute the command in a main server and verify all the servers at once.
Project Leader
Project Contributors
- Katherine Masseau - Python functions and external commands
- Nestor Chan - Understand the initial code
- Mohak Vyas - Some information about rpm packages
- Professor Chris Tyler - Supervisor
Project Details
The rpms module is in the file: /usr/lib/python2.5/site-packages/func/minion/modules/rpms.py
I added the method verify
# Copyright 2007, Red Hat, Inc
# Michael DeHaan <mdehaan@redhat.com>
# Copyright 2009
# Milton Paiva Neto <milton.paiva@gmail.com>
#
# This software may be freely redistributed under the terms of the GNU
# general public license.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import func_module
import rpm
class RpmModule(func_module.FuncModule):
version = "0.0.2"
api_version = "0.0.1"
description = "RPM related commands."
def inventory(self, flatten=True):
"""
Returns information on all installed packages.
By default, 'flatten' is passed in as True, which makes printouts very
clean in diffs for use by func-inventory. If you are writting another
software application, using flatten=False will prevent the need to
parse the returns.
"""
# I have not been able to get flatten=False to work if there
# is more than 491 entries in the dict -- ashcrow
import rpm
ts = rpm.TransactionSet()
mi = ts.dbMatch()
results = []
for hdr in mi:
name = hdr['name']
epoch = (hdr['epoch'] or 0)
version = hdr['version']
release = hdr['release']
arch = hdr['arch']
if flatten:
results.append("%s %s %s %s %s" % (name, epoch, version,
release, arch))
else:
results.append([name, epoch, version, release, arch])
return results
' def verify(self, pattern=, flatten=True):
"""
Returns information on the verified package(s).
"""
import rpm
import yum
from re import split
ts = rpm.TransactionSet()
' mi = (ts.dbMatch() if pattern == else self.glob(pattern))
results = []
for hdr in mi:
' name = hdr['name'] if pattern == else split("\s",hdr)[0]
if flatten:
yb = yum.YumBase()
pkgs = yb.rpmdb.searchNevra(name)
for pkg in pkgs:
errors = pkg.verify()
for fn in errors.keys():
for prob in errors[fn]:
results.append('%s %s %s' % (name, fn, prob.message))
else:
results.append("%s-%s-%s.%s" % (name, version, release, arch))
return results
def glob(self, pattern, flatten=True):
"""
Return a list of installed packages that match a pattern
"""
import rpm
ts = rpm.TransactionSet()
mi = ts.dbMatch()
results = []
if not mi:
return
mi.pattern('name', rpm.RPMMIRE_GLOB, pattern)
for hdr in mi:
name = hdr['name']
epoch = (hdr['epoch'] or 0)
version = hdr['version']
release = hdr['release']
# gpg-pubkeys have no arch
arch = (hdr['arch'] or "")
if flatten:
results.append("%s %s %s %s %s" % (name, epoch, version,
release, arch))
else:
results.append([name, epoch, version, release, arch])
return results
def register_method_args(self):
"""
Implementing the method argument getter
"""
return {
'inventory':{
'args':{
'flatten':{
'type':'boolean',
'optional':True,
'default':True,
'description':"Print clean in difss"
}
},
'description':"Returns information on all installed packages"
},
'verify':{
'args':{
'flatten':{
'type':'boolean',
'optional':True,
'default':True,
'description':"Print clean in difss"
}
},
'description':"Returns information on the verified package(s)"
},
'glob':{
'args':{
'pattern':{
'type':'string',
'optional':False,
'description':"The glob packet pattern"
},
'flatten':{
'type':'boolean',
'optional':True,
'default':True,
'description':"Print clean in difss"
}
},
'description':"Return a list of installed packages that match a pattern"
}
}
The code for the release 0.9 is also available in the following addresses:
[1]http://matrix.senecac.on.ca/~mpaivaneto/rpms.py
[2]http://func.pastebin.com/f75c77458
The new module was already sent to the func maillist.
How to use
- The method verify can be used to query all the rpms on the system with the following command:
#func minion.ca call rpms verify
- The method can also has query for only one package each time, it is integrated with the existing glob method from the func rpm module.
#func minion.ca call rpms verify package_name
For example:
#func minion.ca call rpms verify shadown-utils
In big queries, slow networks or slow computers you could need to make an asynchronous call. This kind of call will allow you to keep the connection while the results are been processed.
#func minion.ca call -a rpms verify
Current Issues
0.4 - The python rpm module is not complete enough for the method I am working on. Because of that it was necessary to use external commands in a subprocess, by suggestion taken in the Func maillist. - PENDING
Solution: Look for an internal funcion.
0.5 - It was necessary to make a pipe to get the output from the subprocess - SOLVED
Solution: Use the yum python api.
0.8 - Integrate the RPM Module with the Yum Module
Solution: Create a new module and merge the already existing modules.
0.9 - Polish the code and add integration to glob for the verification method
- 1.0 - Prepare the final presentation for the project
Ideas
0.5
Look at glob to be able to query only one package
Text from the email:
>>
In this particular implementation, there isn't really any difference between the code above and just shelling out to `rpm -Va`. That said, if you add the glob support, your approach is better.
Check for the python rpm api again, to try to find some build in function for verification.
>>
Not sure yet, but I think you may be losing data here in cases where multiple versions of the same package
is installed (say, a kernel, or just about any package on a x86_64 machine with i386 packages installed).
May be better to key the dict on something more unique (name-version-release.arch, for example)
I'd also check to see if the rpm python api supports package verification directly now. I know it didn't for a long time, but it may now. Though, it may not be very backwards compatible.
0.6
For this release a good approach is to using the yum python api, make a query on the rpm database to check the files
yb = yum.YumBase()
pkgs = yb.rpmdb.searchNevra(name='shadow-utils')
for pkg in pkgs:
errors = pkg.verify()
for fn in errors.keys():
for prob in errors[fn]:
print '%s - %s' % (fn, prob.message)
Reference:
[3]http://yum.baseurl.org/wiki/YumCodeSnippet/VerifyPkg
The output from the yum command is little different from the one I got using the rpm -V -a
/usr/sbin/userdel - checksum does not match /usr/sbin/userdel - size does not match /usr/sbin/groupdel - checksum does not match /usr/sbin/groupdel - size does not match /etc/login.defs - mtime does not match /etc/login.defs - checksum does not match /etc/login.defs - size does not match /usr/bin/newgrp - checksum does not match /usr/bin/newgrp - size does not match /usr/sbin/groupadd - checksum does not match /usr/sbin/groupadd - size does not match /usr/bin/chage - checksum does not match /usr/bin/chage - size does not match /usr/bin/gpasswd - checksum does not match /usr/bin/gpasswd - size does not match /usr/sbin/useradd - checksum does not match /usr/sbin/useradd - size does not match /usr/sbin/usermod - checksum does not match /usr/sbin/usermod - size does not match /usr/sbin/groupmod - checksum does not match /usr/sbin/groupmod - size does not match
Output from the command rpm -V shadow-utils
S.5....T c /etc/login.defs prelink: /usr/bin/chage: at least one of file's dependencies has changed since prelinking S.?..... /usr/bin/chage prelink: /usr/bin/gpasswd: at least one of file's dependencies has changed since prelinking S.?..... /usr/bin/gpasswd prelink: /usr/bin/newgrp: at least one of file's dependencies has changed since prelinking S.?..... /usr/bin/newgrp prelink: /usr/sbin/groupadd: at least one of file's dependencies has changed since prelinking S.?..... /usr/sbin/groupadd prelink: /usr/sbin/groupdel: at least one of file's dependencies has changed since prelinking S.?..... /usr/sbin/groupdel prelink: /usr/sbin/groupmod: at least one of file's dependencies has changed since prelinking S.?..... /usr/sbin/groupmod prelink: /usr/sbin/useradd: at least one of file's dependencies has changed since prelinking S.?..... /usr/sbin/useradd prelink: /usr/sbin/userdel: at least one of file's dependencies has changed since prelinking S.?..... /usr/sbin/userdel prelink: /usr/sbin/usermod: at least one of file's dependencies has changed since prelinking S.?..... /usr/sbin/usermod
Output from the verify method
func1.funcland.com# func func3 call rpms verify
{'func3': ['shadow-utils : /usr/share/man/ko/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/tl/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/it/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/he/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/pwck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man5/gshadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/pwck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/pwconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/id/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man5/login.defs.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/grpconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/groupmems.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man3/getspnam.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/pwunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/newusers.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/tr/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/sk/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/sv/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/locale/es/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/tr/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/grpconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/da/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/grpconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/pwconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man3/shadow.3.gz : mtime does not match',
'shadow-utils : /usr/sbin/pwck : mtime does not match',
'shadow-utils : /usr/sbin/pwck : checksum does not match',
'shadow-utils : /usr/share/man/ru/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/sbin/userdel : mtime does not match',
'shadow-utils : /usr/sbin/userdel : checksum does not match',
'shadow-utils : /usr/sbin/groupdel : mtime does not match',
'shadow-utils : /usr/sbin/groupdel : checksum does not match',
'shadow-utils : /usr/share/man/ru/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/it/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/grpunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/gl/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/pwunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/es/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man5/gshadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man5/login.defs.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/id/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/sbin/groupmems : mtime does not match',
'shadow-utils : /usr/sbin/groupmems : checksum does not match',
'shadow-utils : /usr/share/man/pt_BR/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/bin/newgrp : mtime does not match',
'shadow-utils : /usr/bin/newgrp : checksum does not match',
'shadow-utils : /usr/share/man/ru/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ko/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/grpunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/newusers.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/ko/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/sbin/groupadd : mtime does not match',
'shadow-utils : /usr/sbin/groupadd : checksum does not match',
'shadow-utils : /usr/share/man/pl/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man3/shadow.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/es/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man3/shadow.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/share/locale/sv/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/it/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/zh_CN/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/newusers.8.gz : mtime does not match',
'shadow-utils : /usr/sbin/newusers : mtime does not match',
'shadow-utils : /usr/sbin/newusers : checksum does not match',
'shadow-utils : /usr/bin/chage : mtime does not match',
'shadow-utils : /usr/bin/chage : checksum does not match',
'shadow-utils : /usr/sbin/grpck : mtime does not match',
'shadow-utils : /usr/sbin/grpck : checksum does not match',
'shadow-utils : /usr/share/man/ru/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/ro/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/pwunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/el/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/locale/eu/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/pwconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/pwunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/pt/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/pwck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/pwunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/nn/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/newusers.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/hu/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/grpunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/pwck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/de/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pt_BR/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/de/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/fi/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/pl/man5/login.defs.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/grpunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/man3/getspnam.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/tr/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/grpconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/grpconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/pl/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/cs/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/sq/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/pl/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/id/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/pwconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/uk/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/pwconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/tr/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/grpunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man5/login.defs.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/grpunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man5/login.defs.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/pt_BR/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/sbin/groupmod : mtime does not match',
'shadow-utils : /usr/sbin/groupmod : checksum does not match',
'shadow-utils : /usr/sbin/vipw : mtime does not match',
'shadow-utils : /usr/sbin/vipw : checksum does not match',
'shadow-utils : /usr/share/man/ru/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/pt_BR/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/hu/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/usermod.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/bs/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/grpconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/hu/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/grpunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man5/gshadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /usr/bin/faillog : mtime does not match',
'shadow-utils : /usr/bin/faillog : checksum does not match',
'shadow-utils : /usr/share/man/pl/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/groupmems.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man3/getspnam.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/hu/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/sbin/grpconv : mtime does not match',
'shadow-utils : /usr/sbin/grpconv : checksum does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/es/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/de/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man5/gshadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/tr/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/pwunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pt_BR/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man3/shadow.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/nb/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/sbin/pwconv : mtime does not match',
'shadow-utils : /usr/sbin/pwconv : checksum does not match',
'shadow-utils : /usr/share/man/man8/pwunconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/zh_TW/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/groupmems.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/pwck.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/ca/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/it/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/sbin/usermod : mtime does not match',
'shadow-utils : /usr/sbin/usermod : checksum does not match',
'shadow-utils : /etc/login.defs : mtime does not match',
'shadow-utils : /etc/login.defs : checksum does not match',
'shadow-utils : /etc/login.defs : size does not match',
'shadow-utils : /usr/share/man/sv/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man5/login.defs.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/ne/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/newusers.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/pwconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/dz/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/fr/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pt_BR/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man8/faillog.8.gz : mtime does not match',
'shadow-utils : /usr/sbin/chpasswd : mtime does not match',
'shadow-utils : /usr/sbin/chpasswd : checksum does not match',
'shadow-utils : /usr/share/man/fr/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/bin/gpasswd : mtime does not match',
'shadow-utils : /usr/bin/gpasswd : checksum does not match',
'shadow-utils : /usr/sbin/useradd : mtime does not match',
'shadow-utils : /usr/sbin/useradd : checksum does not match',
'shadow-utils : /usr/share/man/pl/man8/pwconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/groupdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/groupmems.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/tr/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/ja/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/newusers.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/groupadd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/userdel.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/man8/chpasswd.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/tr/man1/chage.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/sbin/grpunconv : mtime does not match',
'shadow-utils : /usr/sbin/grpunconv : checksum does not match',
'shadow-utils : /usr/share/locale/fr/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/fr/man5/gshadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/locale/vi/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/fr/man3/getspnam.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/adduser.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/hu/man1/sg.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/grpck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man5/faillog.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/pl/man8/vigr.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/cs/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/tr/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man5/shadow.5.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_TW/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/cs/man1/gpasswd.1.gz : mtime does not match',
'shadow-utils : /usr/share/locale/tr/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/ru/man3/getspnam.3.gz : mtime does not match',
'shadow-utils : /usr/share/locale/km/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/locale/ru/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/it/man3/shadow.3.gz : mtime does not match',
'shadow-utils : /usr/share/man/sv/man8/pwck.8.gz : mtime does not match',
'shadow-utils : /usr/sbin/pwunconv : mtime does not match',
'shadow-utils : /usr/sbin/pwunconv : checksum does not match',
'shadow-utils : /usr/share/man/tr/man8/groupmod.8.gz : mtime does not match',
'shadow-utils : /usr/share/locale/nl/LC_MESSAGES/shadow.mo : mtime does not match',
'shadow-utils : /usr/share/man/de/man1/newgrp.1.gz : mtime does not match',
'shadow-utils : /usr/bin/lastlog : mtime does not match',
'shadow-utils : /usr/bin/lastlog : checksum does not match',
'shadow-utils : /usr/share/man/it/man8/newusers.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ja/man8/pwck.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/ru/man8/grpconv.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/it/man8/vipw.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/fr/man8/lastlog.8.gz : mtime does not match',
'shadow-utils : /usr/share/man/zh_CN/man8/useradd.8.gz : mtime does not match',
'shadow-utils : /etc/login.defs : mtime does not match',
'shadow-utils : /etc/login.defs : checksum does not match',
'shadow-utils : /etc/login.defs : size does not match']}
To do List
Test the method in one computerTest the method in more than 2 computers or virtual machinesSend a email for the Func community with the new code.Check the yum approach.Mege RPM Module with Yum ModuleCheck the glob approach.Allow verification for only one package querying thought the glob method.Polish the code- Prepare the final presentation for 1.0 :-)
