Close to working passwd and shadow files. STill need md5 hash, and for that we need logins to work properly via json

This commit is contained in:
Michael McGrath 2008-02-28 11:21:24 -06:00
parent ed7c65a0e1
commit 144cd1cc62
3 changed files with 98 additions and 17 deletions

110
fas/client/fasClient.py Normal file → Executable file
View file

@ -19,24 +19,80 @@
# Red Hat Author(s): Mike McGrath <mmcgrath@redhat.com>
#
from fedora.tg.client import BaseClient, AuthError, ServerError
import sys
import os
from shutil import move
import logging
FAS_URL = 'http://localhost:8080/fas/json/'
from fedora.tg.client import BaseClient, AuthError, ServerError
from optparse import OptionParser
from shutil import move
from rhpl.translate import _
FAS_URL = 'http://localhost:8080/fas/'
parser = OptionParser()
parser.add_option('--nogroup',
dest = 'no_group',
default = False,
action = 'store_true',
help = _('Do not sync group information'))
parser.add_option('--nopasswd',
dest = 'no_passwd',
default = False,
action = 'store_true',
help = _('Do not sync passwd information'))
parser.add_option('--noshadow',
dest = 'no_shadow',
default = False,
action = 'store_true',
help = _('Do not sync shadow information'))
parser.add_option('-s', '--server',
dest = 'FAS_URL',
default = FAS_URL,
metavar = 'FAS_URL',
help = _('Specify URL of fas server (default "%default")'))
class MakeShellAccounts(BaseClient):
def group_list(self, search='*'):
params = {'search' : search}
data = self.send_request('group_list', auth=False, input=params)
data = self.send_request('json/group_list', auth=False, input=params)
return data
def shadow_text(self, people=None):
i = 0
file = open('/tmp/shadow.txt', 'w')
if not people:
people = self.people_list()
for person in people:
uid = person['id']
username = person['username']
password = person['password']
file.write("=%i %s:%s:99999:0:99999:7:::\n" % (uid, username, password))
file.write("0%i %s:%s:99999:0:99999:7:::\n" % (i, username, password))
file.write(".%s %s:%s:99999:0:99999:7:::\n" % (username, username, password))
i = i + 1
file.close()
def passwd_text(self, people=None):
i = 0
file = open('/tmp/passwd.txt', 'w')
if not people:
people = self.people_list()
for person in people:
uid = person['id']
username = person['username']
human_name = person['human_name']
home_dir = "/home/fedora/%s" % username
shell = "/bin/bash"
file.write("=%s %s:x:%i:%i:%s:%s:%s\n" % (uid, username, uid, uid, human_name, home_dir, shell))
file.write("0%i %s:x:%i:%i:%s:%s:%s\n" % (i, username, uid, uid, human_name, home_dir, shell))
file.write(".%s %s:x:%i:%i:%s:%s:%s\n" % (username, username, uid, uid, human_name, home_dir, shell))
i = i + 1
file.close()
def groups_text(self, groups=None, people=None):
i = 0
@ -60,8 +116,6 @@ class MakeShellAccounts(BaseClient):
for group in groups['groups']:
gid = group['id']
name = group['name']
# print groups['memberships'][m]
# print groups['memberships'][1228]
memberships = ''
try:
''' Shoot me now I know this isn't right '''
@ -78,23 +132,49 @@ class MakeShellAccounts(BaseClient):
i = i + 1
file.close()
def people_list(self, search='*'):
params = {'search' : search}
data = self.send_request('people_list', auth=False, input=params)
data = self.send_request('json/people_list', auth=False, input=params)
return data['people']
def make_group_db(self):
self.groups_text()
os.system('makedb -o /tmp/group.db /tmp/group.txt')
def make_passwd_db(self):
self.passwd_text()
os.system('makedb -o /tmp/passwd.db /tmp/passwd.txt')
def make_shadow_db(self):
self.shadow_text()
os.system('makedb -o /tmp/passwd.db /tmp/shadow.txt')
def install_passwd_db(self):
try:
move('/tmp/passwd.db', '/var/db/passwd.db')
except IOError, e:
print "ERROR: Could not write passwd db - %s" % e
def install_shadow_db(self):
try:
move('/tmp/shadow.db', '/var/db/shadow.db')
except IOError, e:
print "ERROR: Could not write shadow db - %s" % e
def install_group_db(self):
move('/tmp/group.db', '/var/db/group.db')
try:
move('/tmp/group.db', '/var/db/group.db')
except IOError, e:
print "ERROR: Could not write group db - %s" % e
if __name__ == '__main__':
fas = MakeShellAccounts(FAS_URL, None, None, None)
fas = MakeShellAccounts(FAS_URL, 'admin', None, None)
fas.make_group_db()
fas.make_passwd_db()
fas.make_shadow_db()
fas.install_group_db()
fas.install_passwd_db()
fas.install_shadow_db()

View file

@ -41,7 +41,7 @@ class Root(controllers.RootController):
# TODO: Find a better place for this.
os.environ['GNUPGHOME'] = config.get('gpghome')
@expose(template="fas.templates.welcome")
@expose(template="fas.templates.welcome", allow_json=True)
def index(self):
if turbogears.identity.not_anonymous():
turbogears.redirect('/home')

View file

@ -2,6 +2,8 @@ import turbogears
from turbogears import controllers, expose, paginate, identity, redirect, widgets, validate, validators, error_handler
from turbogears.database import session
from cherrypy import request, response
import cherrypy
from fas.auth import *
@ -33,4 +35,3 @@ class JsonRequest(controllers.Controller):
re_search = re.sub(r'\*', r'%', search).lower()
people = People.query.filter(People.username.like(re_search)).order_by('username')
return dict(people=people)