diff options
author | Martin Sivak <msivak@redhat.com> | 2008-02-29 15:53:25 +0100 |
---|---|---|
committer | Martin Sivak <msivak@redhat.com> | 2008-02-29 15:53:25 +0100 |
commit | f181ae00c3306e94925d6c226cb5a4b47594de77 (patch) | |
tree | 0257d0b6c42b140b6a0bf2cec1017f55ac8db3b8 /plugins/passwd.py | |
parent | 850308ffcf7a3a738bc74d0e547d8660342cf58c (diff) | |
download | firstaidkit-f181ae00c3306e94925d6c226cb5a4b47594de77.tar.gz firstaidkit-f181ae00c3306e94925d6c226cb5a4b47594de77.tar.xz firstaidkit-f181ae00c3306e94925d6c226cb5a4b47594de77.zip |
Plugin for password management, capable of reseting root password
Diffstat (limited to 'plugins/passwd.py')
-rw-r--r-- | plugins/passwd.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/plugins/passwd.py b/plugins/passwd.py new file mode 100644 index 0000000..7a0ca7b --- /dev/null +++ b/plugins/passwd.py @@ -0,0 +1,61 @@ +# First Aid Kit - diagnostic and repair tool for Linux +# Copyright (C) 2007 Martin Sivak <msivak@redhat.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# 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. + +from pyfirstaidkit.plugins import Plugin,Flow +from pyfirstaidkit.returns import * +from pyfirstaidkit.utils import * +from pyfirstaidkit import Config +from random import Random + +rng = Random() + +class PasswdPlugin(Plugin): + """This plugin provides operations for convenient manipulation with the password system.""" + # + # Additional flow defprepareion. + # + # flows = Flow.init(Plugin) # we do not need the default fix and diagnose flows + flows = {} + flows["resetRoot"] = Flow({ + Plugin.initial: {Return: "resetRoot"}, + "resetRoot" : {ReturnSuccess: Plugin.final} + }, description="Reset root password to random value so the user can login and change it") + + name = "Password plugin" + version = "0.0.1" + author = "Martin Sivak" + + @classmethod + def getDeps(cls): + return set("root", "experimental", "filesystem") + + def __init__(self, *args, **kwargs): + Plugin.__init__(self, *args, **kwargs) + + def resetRoot(self): + charlist = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ.," + passlen = 10 + newpasswd = [] + while len(newpasswd)<passlen: + newpasswd.append(rng.choice(charlist)) + + print spawnvch(executable = "/usr/bin/passwd", args = ["/usr/bin/passwd", "root"], chroot = Config.system.root).communicate(input = newpasswd+"\n"+newpasswd+"\n") + + self._result=Return + +def get_plugin(): + return PasswdPlugin |