#!/usr/bin/python2 # -*- coding: utf-8 -*- #Wrapper script to manage USERNAME accounts + web security # myth_USERNAME_all -c add -u USERNAME # myth_USERNAME_all -c delete -u USERNAME # myth_USERNAME_all -c pass -u USERNAME -p pass # myth_USERNAME_all -c web -u USERNAME -p pass import pexpect, sys, time import os, re, getopt import mv_common def chroot_check(): if not INIT_CHECK : return False cmd = '''ps -p 1 -o comm=''' init = mv_common.runcmd_output(cmd).strip() if init == "runit": return False else: return True def store_commands(full_call): file_name = "/root/myth_user_call.out" try: f = open(file_name,'a') except: print "%s could not be opened" % file_name sys.exit(1) f.write(full_call) f.write("\n") f.close() try: os.chmod(600,file_name) except: pass def add_user(username,full_call): if chroot_check() : print "calling myth_call_user in chroot to add user" store_commands(full_call) else: print "Adding user %s" %username cmd = '''useradd -m -s /bin/bash %s -G audio,video,optical,storage,users''' %username mv_common.runcmd(cmd) cmd = ''' usermod -a -G mythtv %s ''' %username def del_user(username,full_call): if chroot_check() : print "calling myth_call_user in chroot to del user" store_commands(full_call) else: print "Removing user %s" %username cmd = '''userdel %s ''' %username mv_common.runcmd(cmd) def pass_change(username,password,full_call) : if chroot_check() : print "calling myth_call_user in chroot to change password" store_commands(full_call) else: print "changing password for %s" %username passwd = pexpect.spawn("/usr/bin/passwd %s" % username) for repeat in (1, 2): passwd.expect("password: ") passwd.sendline(password) time.sleep(0.1) def web_security(username,password) : file_name = "/etc/lighttpd/lighttpd.user" file_contents = '' if os.path.exists(file_name): try: f = open(file_name,'r') file_contents = f.readlines() except: print " couldn't read %s" % file_name try: f = open(file_name,'w') except: print "%s could not be opened for writing" % file_name return for line in file_contents: if not re.search(username, line): f.write(line) line = "%s:%s" %(username, password) f.write(line) f.write("\n") f.close() def usage (): print "Valid options are:" print " -c (add|delete|pass|web)" print " -u USERNAME" print " -p password" sys.exit(0) def main(argv): global INIT_CHECK full_call = "" INIT_CHECK = True try: opts, args = getopt.getopt(argv, 'c:u:p:ih' ) except getopt.GetoptError, why: print why usage() print "exception happened" sys.exit(2) for opt, arg in opts: if opt in ("-h", "--help"): usage() sys.exit(0) elif opt in ("-c") : module = arg full_call += ''' -c %s ''' %re.escape(arg) elif opt in ("-u") : username = arg full_call += ''' -u %s ''' %re.escape(arg) elif opt in ("-p") : password = arg full_call += ''' -p %s ''' %re.escape(arg) elif opt in ("-i") : INIT_CHECK = False full_call += ''' -i ''' try: username except: usage() if module == "add": add_user(username,full_call) elif module == "delete": del_user(username,full_call) elif module == "pass": try: password except: print "needs a password" usage() pass_change(username,password,full_call) elif module == "web": web_security(username,password) else: usage() if __name__ == "__main__": main(sys.argv[1:])