From 19e8f207678d02f9a912aa0728b90a4c63d82c82 Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Sat, 4 Jul 2009 18:03:21 -0500
Subject: linhes-config: add function runcmd_output

---
 abs/core-testing/LinHES-config/PKGBUILD          |   9 +-
 abs/core-testing/LinHES-config/mv_common.py      |  10 ++
 abs/core-testing/LinHES-config/myth_user_call.py | 159 +++++++++++++++++++++++
 3 files changed, 174 insertions(+), 4 deletions(-)
 create mode 100755 abs/core-testing/LinHES-config/myth_user_call.py

diff --git a/abs/core-testing/LinHES-config/PKGBUILD b/abs/core-testing/LinHES-config/PKGBUILD
index 984926b..c9c3d1d 100755
--- a/abs/core-testing/LinHES-config/PKGBUILD
+++ b/abs/core-testing/LinHES-config/PKGBUILD
@@ -1,12 +1,12 @@
 pkgname=LinHES-config
 pkgver=2.0
-pkgrel=31
+pkgrel=39
 conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev )
 pkgdesc="Install and configure your system"
-depends=(bc libstatgrab  mysql-python expect curl dnsutils parted sg3_utils nmbscan system-templates rsync python-parted ddcxinfo)
+depends=(bc libstatgrab  mysql-python expect curl dnsutils parted sg3_utils nmbscan system-templates rsync python-parted ddcxinfo python-pexpect)
 arch=('i686')
 
-source=(mv_install.py mv_config.py mythinstall.bin myth_user_call file_time_offset.py install-ui.xml install_proxy.sh install_functions.sh systemconfig.sh install_db_chroot.sh restore_default_settings.sh xconfig.sh timezip.py soundconfig.sh LinHES-release issue MythVantage.sh create_master.sh build_diskless.sh networkconfig.sh timezone.bin autocard.py restore_km_db_chroot.sh README  mv_advanced.py  mv_common.py   mv_ir.py  mv_misc.py  mv_network.py  mv_screensaver.py  mv_smolt.py  mv_software.py  mv_webuser.py mv_hostype.py systemconfig.py)
+source=(mv_install.py mv_config.py mythinstall.bin myth_user_call file_time_offset.py install-ui.xml install_proxy.sh install_functions.sh systemconfig.sh install_db_chroot.sh restore_default_settings.sh xconfig.sh timezip.py soundconfig.sh LinHES-release issue MythVantage.sh create_master.sh build_diskless.sh networkconfig.sh timezone.bin autocard.py restore_km_db_chroot.sh README  mv_advanced.py  mv_common.py   mv_ir.py  mv_misc.py  mv_network.py  mv_screensaver.py  mv_smolt.py  mv_software.py  mv_webuser.py mv_hostype.py systemconfig.py myth_user_call.py)
 
 install=LinHES.install
 build() {
@@ -20,7 +20,8 @@ build() {
     mkdir -p $MVDIR/etc
 
     #copy in all the installer specific stuff
-    install -m0700 myth_user_call  $MVDIR/bin/myth_user_call
+#    install -m0700 myth_user_call  $MVDIR/bin/myth_user_call
+    install -m0700 myth_user_call.py $MVDIR/bin/myth_user_call
     install -m 0755 install_proxy.sh  $MVDIR/bin/install_proxy.sh
     install -m 0755 install_functions.sh  $MVDIR/bin/install_functions.sh
     install -m 0755 systemconfig.sh  $MVDIR/bin/systemconfig.sh
diff --git a/abs/core-testing/LinHES-config/mv_common.py b/abs/core-testing/LinHES-config/mv_common.py
index da3e25f..f18e02b 100755
--- a/abs/core-testing/LinHES-config/mv_common.py
+++ b/abs/core-testing/LinHES-config/mv_common.py
@@ -14,6 +14,16 @@ def runcmd(cmd):
     logging.debug("    %s",cmdout)
     return cmdout[0]
 
+def runcmd_output(cmd):
+    if data_config.NOOPDEBUG=="FALSE":
+        pass
+    else:
+        cmd = "echo "+cmd
+    logging.debug("    %s",cmd)
+    cmdout = commands.getstatusoutput(cmd)
+    logging.debug("    %s",cmdout)
+    return cmdout[1]
+
 def services(systemconfig):
     logging.debug("______Start of services______")
     logging.debug("__End services")
diff --git a/abs/core-testing/LinHES-config/myth_user_call.py b/abs/core-testing/LinHES-config/myth_user_call.py
new file mode 100755
index 0000000..817f78f
--- /dev/null
+++ b/abs/core-testing/LinHES-config/myth_user_call.py
@@ -0,0 +1,159 @@
+#!/usr/bin/python
+# -*- 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_call_user.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:])
+
-- 
cgit v0.12

