Module pyvcli_uman

The pyvserv user manager.
Usage: pyvcli_uman.py [options] [hostname]
  hostname: host to connect to. (default: 127.0.0.1)
  options:  -d level  - Debug level 0-10
            -p        - Port to use (default: 6666)
            -l login  - Login Name; default: 'admin'
            -s lpass  - Login Pass; default: '1234' (for !!testing only!!)
            -t        - prompt for login pass
            -u user   - New/Op User Name; default: 'test_user'
            -x npass  - New/Op User Pass; default: '1234'
            -a        - Add user flag. Must be a unique user name
            -m        - Add admin flag. Add admin instead of a regular user
            -i kind   - List users. (kind = user / admin / disabled / initial)
            -e enflag - Enable / Disable user flag
            -T        - Prompt for new/op user pass / change pass
            -r        - Remove user flag -|-  -c        - Change pass flag
            -v        - Verbose          -|-  -V        - Print version number
            -q        - Quiet            -|-  -h        - Help (this screen)
If no action is specified, defaults to list users. 
Expand source code
#!/usr/bin/env python

# ------------------------------------------------------------------------
# Test client for the pyserv project. User add.

import os, sys, getopt, signal, select, socket, time, struct
import random, stat

# This repairs the path from local run to pip run.
try:
    from pyvcommon import support
    base = os.path.dirname(os.path.realpath(support.__file__))
    sys.path.append(os.path.join(base, "."))
except:
    base = os.path.dirname(os.path.realpath(__file__))
    sys.path.append(os.path.join(base,  '..'))
    sys.path.append(os.path.join(base,  '..', "pyvcommon"))
    from pyvcommon import support

from pyvcommon import support, pycrypt, pyclisup
from pyvcommon import pysyslog, comline

# ------------------------------------------------------------------------
# Globals

version = "1.0.0"
#progn = os.path.basename(sys.argv[0])
progn = os.path.basename(__file__)

cdoc = '''\
The pyvserv user manager.
Usage: %s [options] [hostname]
  hostname: host to connect to. (default: 127.0.0.1)
  options:  -d level  - Debug level 0-10
            -p        - Port to use (default: 6666)
            -l login  - Login Name; default: 'admin'
            -s lpass  - Login Pass; default: '1234' (for !!testing only!!)
            -t        - prompt for login pass
            -u user   - New/Op User Name; default: 'test_user'
            -x npass  - New/Op User Pass; default: '1234'
            -a        - Add user flag. Must be a unique user name
            -m        - Add admin flag. Add admin instead of a regular user
            -i kind   - List users. (kind = user / admin / disabled / initial)
            -e enflag - Enable / Disable user flag
            -T        - Prompt for new/op user pass / change pass
            -r        - Remove user flag -|-  -c        - Change pass flag
            -v        - Verbose          -|-  -V        - Print version number
            -q        - Quiet            -|-  -h        - Help (this screen)
If no action is specified, defaults to list users. ''' \
 % (progn)

__doc__= "<pre>" + cdoc + "</pre>"

def phelp():
    ''' Present command line help '''
    print(cdoc)
    sys.exit(0)

def pversion():
    ''' Display Version information '''
    print( os.path.basename(sys.argv[0]), "Version", version)
    sys.exit(0)

    # option, var_name, initial_val, function
optarr = \
    ["d:",  "pgdebug",      0,              None],      \
    ["p:",  "port",         6666,           None],      \
    ["l:",  "login",        "admin",        None],      \
    ["s:",  "lpass",        "1234",         None],      \
    ["t",   "lprompt",      0,              None],      \
    ["v",   "verbose",      0,              None],      \
    ["q",   "quiet",        0,              None],      \
    ["m",   "admin",        0,              None],      \
    ["a",   "add",          0,              None],      \
    ["r",   "remove",       0,              None],      \
    ["c",   "change",       "",             None],      \
    ["u:",  "userx",        "test_user",    None],      \
    ["x:",  "passx",        "1234",         None],      \
    ["X:",  "chpass",       "",             None],      \
    ["T",   "prompt",       0,              None],      \
    ["e:",  "encomm",       "",             None],      \
    ["i:",  "listx",        "",             None],  \
    ["V",   None,           None,           pversion],  \
    ["h",   None,           None,           phelp]      \

conf = comline.Config(optarr)
conf.sess_key = ""

# ------------------------------------------------------------------------

def    mainfunct():

    ''' Entry point for pip script '''
    try:
        args = conf.comline(sys.argv[1:])

    except getopt.GetoptError:
        sys.exit(1)
    except SystemExit:
        sys.exit(0)
    except:
        print(sys.exc_info())
        sys.exit(1)

    #if not conf.add and not conf.remove and not conf.encomm \
    #            and not conf.listx and not conf.change:
    #    print("One of: Add / Remove / Change / Enable / List option should be specified.")
    #    print("Use [ -a | -r | -p | -e  | -i ] options or the -h option for help.")
    #    sys.exit()

    if len(args) == 0:
        ip = '127.0.0.1'
    else:
        ip = args[0]

    hand = pyclisup.CliSup()
    hand.verbose = conf.verbose
    hand.pgdebug = conf.pgdebug

    if conf.lprompt:
        import getpass
        strx = getpass.getpass("Pass for login %s: " % conf.login)
        if not strx:
            print("Cannot login with empty pass, aborting ...")
            sys.exit(0)
        conf.lpass = strx

    try:
        respc = hand.connect(ip, conf.port)
    except:
        print( "Cannot connect to:", ip + ":" + str(conf.port), sys.exc_info()[1])
        sys.exit(1)

    resp3 = hand.start_session(conf)
    if not conf.quiet:
        print("Sess Response:", resp3)

    #resp3 = hand.client(["hello",] , conf.sess_key, False)
    #if not conf.quiet:
    #    print("Hello sess Response:", resp3[1])

    resp = hand.client(["user", conf.login], conf.sess_key)
    if not conf.quiet:
        print("user Response:", resp)
    if resp[0] != "OK":
        hand.client(["quit"], conf.sess_key)
        hand.close();

    resp = hand.client(["pass", conf.lpass], conf.sess_key)
    if not conf.quiet:
        print("pass Response:", resp)
    if resp[0] != "OK":
        hand.client(["quit"], conf.sess_key)
        hand.close();
        print("Error on login, exiting.", resp)
        sys.exit(1)

    if conf.prompt:
        import getpass
        strx = getpass.getpass("Pass for new user %s: " % conf.userx)
        if not strx:
            print("Empty pass, aborting ...")
            sys.exit(0)
        conf.passx = strx

    if conf.encomm:
        resp = hand.client(["uena", conf.userx, conf.encomm, ], conf.sess_key)
        print("uen Response:", resp)
    elif conf.add:
        if conf.admin:
            resp = hand.client(["aadd", conf.userx, conf.passx], conf.sess_key)
        else:
            resp = hand.client(["uadd", conf.userx, conf.passx], conf.sess_key)
        print("uadd Response:", resp)
    elif conf.remove:
        resp = hand.client(["udel", conf.userx, conf.passx], conf.sess_key)
        print("udel Response:", resp)
    elif conf.change:
        if not conf.chpass:
            import getpass
            strx = getpass.getpass("Pass for change pass %s: " % conf.userx)
            if not strx:
                print("Empty pass, aborting ...")
                sys.exit(0)
            conf.chpass = strx
        resp = hand.client(["chpass", conf.userx, conf.passx, conf.chpass, ], conf.sess_key)
        print("uchpass Response:", resp)
    else:
        if not conf.listx:
            conf.listx = "user"
        resp = hand.client(["ulist", conf.listx], conf.sess_key)
        print("ulist Response:", resp)

    hand.client(["quit"], conf.sess_key)
    hand.close();

    sys.exit(0)

if __name__ == '__main__':
    mainfunct()


# EOF

Functions

def mainfunct()

Entry point for pip script

Expand source code
def    mainfunct():

    ''' Entry point for pip script '''
    try:
        args = conf.comline(sys.argv[1:])

    except getopt.GetoptError:
        sys.exit(1)
    except SystemExit:
        sys.exit(0)
    except:
        print(sys.exc_info())
        sys.exit(1)

    #if not conf.add and not conf.remove and not conf.encomm \
    #            and not conf.listx and not conf.change:
    #    print("One of: Add / Remove / Change / Enable / List option should be specified.")
    #    print("Use [ -a | -r | -p | -e  | -i ] options or the -h option for help.")
    #    sys.exit()

    if len(args) == 0:
        ip = '127.0.0.1'
    else:
        ip = args[0]

    hand = pyclisup.CliSup()
    hand.verbose = conf.verbose
    hand.pgdebug = conf.pgdebug

    if conf.lprompt:
        import getpass
        strx = getpass.getpass("Pass for login %s: " % conf.login)
        if not strx:
            print("Cannot login with empty pass, aborting ...")
            sys.exit(0)
        conf.lpass = strx

    try:
        respc = hand.connect(ip, conf.port)
    except:
        print( "Cannot connect to:", ip + ":" + str(conf.port), sys.exc_info()[1])
        sys.exit(1)

    resp3 = hand.start_session(conf)
    if not conf.quiet:
        print("Sess Response:", resp3)

    #resp3 = hand.client(["hello",] , conf.sess_key, False)
    #if not conf.quiet:
    #    print("Hello sess Response:", resp3[1])

    resp = hand.client(["user", conf.login], conf.sess_key)
    if not conf.quiet:
        print("user Response:", resp)
    if resp[0] != "OK":
        hand.client(["quit"], conf.sess_key)
        hand.close();

    resp = hand.client(["pass", conf.lpass], conf.sess_key)
    if not conf.quiet:
        print("pass Response:", resp)
    if resp[0] != "OK":
        hand.client(["quit"], conf.sess_key)
        hand.close();
        print("Error on login, exiting.", resp)
        sys.exit(1)

    if conf.prompt:
        import getpass
        strx = getpass.getpass("Pass for new user %s: " % conf.userx)
        if not strx:
            print("Empty pass, aborting ...")
            sys.exit(0)
        conf.passx = strx

    if conf.encomm:
        resp = hand.client(["uena", conf.userx, conf.encomm, ], conf.sess_key)
        print("uen Response:", resp)
    elif conf.add:
        if conf.admin:
            resp = hand.client(["aadd", conf.userx, conf.passx], conf.sess_key)
        else:
            resp = hand.client(["uadd", conf.userx, conf.passx], conf.sess_key)
        print("uadd Response:", resp)
    elif conf.remove:
        resp = hand.client(["udel", conf.userx, conf.passx], conf.sess_key)
        print("udel Response:", resp)
    elif conf.change:
        if not conf.chpass:
            import getpass
            strx = getpass.getpass("Pass for change pass %s: " % conf.userx)
            if not strx:
                print("Empty pass, aborting ...")
                sys.exit(0)
            conf.chpass = strx
        resp = hand.client(["chpass", conf.userx, conf.passx, conf.chpass, ], conf.sess_key)
        print("uchpass Response:", resp)
    else:
        if not conf.listx:
            conf.listx = "user"
        resp = hand.client(["ulist", conf.listx], conf.sess_key)
        print("ulist Response:", resp)

    hand.client(["quit"], conf.sess_key)
    hand.close();

    sys.exit(0)
def phelp()

Present command line help

Expand source code
def phelp():
    ''' Present command line help '''
    print(cdoc)
    sys.exit(0)
def pversion()

Display Version information

Expand source code
def pversion():
    ''' Display Version information '''
    print( os.path.basename(sys.argv[0]), "Version", version)
    sys.exit(0)

    # option, var_name, initial_val, function