Imported Upstream version 1.10.2
[platform/upstream/krb5.git] / src / kadmin / cli / k5srvutil.sh
1 #!/bin/sh
2
3 # list_princs keytab
4 # returns a list of principals in the keytab
5 # sorted and uniquified
6 list_princs() {
7     klist -k $keytab | awk '(NR > 3) {print $2}' | sort | uniq
8 }
9
10 set_command() {
11     if [ x$command != x ] ; then
12         cmd_error Only one command can be specified
13         usage
14         exit 1
15     fi
16     command=$1
17 }
18
19 #interactive_prompt prompt princ
20 # If in interactive mode  return  true if the principal  should be acted on
21 # otherwise return true all the time
22 interactive_prompt() {
23     if [ $interactive = 0 ] ; then
24         return 0
25     fi
26     printf "%s for %s? [yn]" "$1" "$2"
27     read ans
28     case $ans in
29     n*|N*)
30         return 1
31         ;;
32     esac
33     return 0
34     }
35     
36 cmd_error() {
37     echo $@ 2>&1
38     }
39
40 usage() {
41     echo "Usage: $0 [-i] [-f file] list|change|delete|delold"
42 }
43
44
45
46 change_key() {
47     princs=`list_princs `
48     for princ in $princs; do
49         if interactive_prompt "Change key " $princ; then
50             kadmin -k -t $keytab -p $princ -q "ktadd -k $keytab $princ"
51         fi
52     done
53     }
54
55 delete_old_keys() {
56     princs=`list_princs `
57     for princ in $princs; do
58         if interactive_prompt "Delete old keys " $princ; then
59             kadmin -k -t $keytab -p $princ -q "ktrem -k $keytab $princ old"
60         fi
61     done
62     }
63
64 delete_keys() {
65     interactive=1
66     princs=`list_princs `
67     for princ in $princs; do
68         if interactive_prompt "Delete all keys " $princ; then
69             kadmin -p $princ -k -t $keytab -q "ktrem -k $keytab $princ all"
70         fi
71     done
72     }
73
74
75 keytab=/etc/krb5.keytab
76 interactive=0
77
78 while [ $# -gt 0 ] ; do
79     opt=$1
80     shift
81         case $opt in
82         "-f")
83         keytab=$1
84         shift
85         ;;
86         "-i")
87         interactive=1
88         ;;
89         change|delold|delete|list)
90         set_command $opt
91         ;;
92         *)
93         cmd_error Illegal option: $opt
94         usage
95         exit 1
96         ;;
97         esac
98 done
99         
100
101 case $command in
102     change)
103     change_key
104     ;;
105     delold)
106     delete_old_keys
107     ;;
108     delete)
109     delete_keys
110     ;;
111     list)
112     klist -k $keytab
113     ;;
114     *)
115         usage
116         ;;
117     esac