ca365fd263efe101f2924fc8f36fa2ec1246191b
[feisty_meow.git] / scripts / security / password_functions.sh
1 #!/bin/bash
2
3 # a set of useful functions for managing operations with passwords.
4 # a set of very simple operations, but the file needs to be protected from
5 # undesirable access.  a good way to do that is to make the file owned by
6 # root, and for it to have permssions of "600" (full access by owner only),
7 # and to only try to read the password file when in sudo mode.  the first
8 # two requirements are done automatically by the store_password function.
9
10 # load_password:
11 # provides a way to read a password out of a file.  the filename is the first
12 # paramater and the variable to fill with the password is the second.
13 function load_password()
14 {
15   local passfile="$1"; shift
16   local varname="$1"; shift
17   if [ -z "$passfile" ]; then
18     echo 'The load_password function needs a filename to read the password from.'
19     return 1
20   fi
21   if [ ! -f "$passfile" ]; then
22     # no file, which is not an error necessarily, but return a blank password
23     # in any case.
24     return 0
25   fi
26   local passwd
27   read passwd < "$passfile"
28
29   # return the password in the variable they provided.
30   eval $varname="$passwd"
31 #echo varname is: $varname
32 #echo new value of that variable is ${!varname}
33 }
34
35 # stores a password into a password file.  the password file should be the
36 # first parameter and the password should be the second.
37 # this makes sure that only root can read the file.
38 function store_password()
39 {
40   local passfile="$1"; shift
41   local passwd="$1"; shift
42   if [ -z "$passfile" -o -z "$passwd" ]; then
43     echo '
44 The store_password function needs (1) the file to store the password into,
45 and (2) the password that should be stored.
46 '
47     return 1
48   fi
49
50   echo "$passwd" > "$passfile"
51   test_or_die "writing password into the file $passfile"
52
53   chown root:root "$passfile"
54   test_or_die "chowning the password file to root ownership for: $passfile"
55
56   chmod 600 "$passfile"
57   test_or_die "restricting permissions on password file for: $passfile"
58 }
59
60 # reads a password from the console, without echoing the letters when they
61 # are typed.  the prompt to show the user is required as the first parameter,
62 # and the variable to fill with the result is the second parameter.
63 function read_password()
64 {
65   local prompt="$1"; shift
66   local varname="$1"; shift
67 #hmmm: complain if not enough parms.
68   echo -n "$prompt "
69   # turn off echo but remember former setting.
70   stty_orig=`stty -g`
71   stty -echo
72   local the_passwd
73   read the_passwd
74   # turn echo back on.
75   stty $stty_orig
76   # return the password in the variable they provided.
77   eval $varname="$the_passwd"
78 #echo varname is: $varname
79 #echo new value of that variable is ${!varname}
80 }
81
82