pamtool 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #!/bin/sh
  2. ##
  3. ## pamtool -- PAM Auxiliary Tool
  4. ## Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
  5. ## Copyright (c) 2000-2002 The OpenPKG Project <http://www.openpkg.org/>
  6. ## Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  7. ##
  8. ## Permission to use, copy, modify, and distribute this software for
  9. ## any purpose with or without fee is hereby granted, provided that
  10. ## the above copyright notice and this permission notice appear in all
  11. ## copies.
  12. ##
  13. ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  14. ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  15. ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  16. ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  17. ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  18. ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  19. ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  20. ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  21. ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  22. ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  23. ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24. ## SUCH DAMAGE.
  25. ##
  26. # program name, version and date
  27. progname="pamtool"
  28. progvers="0.9.0"
  29. progdate="11-Mar-2002"
  30. # the OpenPKG instance information
  31. l_prefix="@l_prefix@"
  32. l_target="@l_target@"
  33. # default parameters
  34. verbose=no
  35. help=no
  36. add=no
  37. remove=no
  38. smart=no
  39. name=""
  40. id=""
  41. # iterate over argument line
  42. while [ $# -gt 0 ]; do
  43. opt=$1
  44. case $opt in
  45. -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;;
  46. *) arg='' ;;
  47. esac
  48. case $opt in
  49. -v|--verbose ) verbose=yes ;;
  50. -h|--help ) help=yes ;;
  51. -a|--add ) add=yes ;;
  52. -r|--remove ) remove=yes ;;
  53. -s|--smart ) smart=yes ;;
  54. --name=* ) name=$arg ;;
  55. --id=* ) id=$arg ;;
  56. -* ) help="Invalid option \`$opt'"; break ;;
  57. * ) break ;;
  58. esac
  59. shift
  60. done
  61. if [ ".$help" = .yes ]; then
  62. echo "$progname --add|--remove --name=NAME [--smart] [--id=ID]";
  63. exit 0
  64. fi
  65. if [ ".$add" = .no -a ".$remove" = .no ]; then
  66. echo "$progname:ERROR: either option -a/--add or -r/--remove have to be specified" 1>&2
  67. exit 1
  68. fi
  69. if [ ".$add" = .yes -a ".$remove" = .yes ]; then
  70. echo "$progname:ERROR: option -a/--add and -r/--remove cannot be specified in parallel" 1>&2
  71. exit 1
  72. fi
  73. if [ ".$name" = . ]; then
  74. echo "$progname:ERROR: option --name has to be specified" 1>&2
  75. exit 1
  76. fi
  77. if [ ".$id" = . ]; then
  78. id="$l_prefix:$name"
  79. fi
  80. # find a reasonable temporary location
  81. if [ ".$TMPDIR" != . ]; then
  82. tmpdir="$TMPDIR"
  83. elif [ ".$TEMPDIR" != . ]; then
  84. tmpdir="$TEMPDIR"
  85. else
  86. tmpdir="/tmp"
  87. fi
  88. tmpfile="$tmpdir/pamtool.$$.tmp"
  89. # determine PAM information from OpenPKG configuration
  90. if [ ! -f "$l_prefix/etc/rc" ]; then
  91. echo "$progname:$ERROR: OpenPKG run-command facility not found under $l_prefix" 1>&2
  92. exit 1
  93. fi
  94. pam_enable=`$l_prefix/etc/rc --query pam_enable`
  95. pam_cfgloc=`$l_prefix/etc/rc --query pam_cfgloc`
  96. pam_modpfx=`$l_prefix/etc/rc --query pam_modpfx`
  97. # perform operation
  98. if [ ! -f "$l_prefix/sbin/rpmtool" ]; then
  99. echo "$progname:$ERROR: OpenPKG rpmtool not found under $l_prefix/sbin/" 1>&2
  100. exit 1
  101. fi
  102. rpmtool_config="$l_prefix/sbin/rpmtool config"
  103. if [ ".$smart" = .yes ]; then
  104. $rpmtool_config="$rpmtool_config -s"
  105. fi
  106. if [ ".$add" = .yes ]; then
  107. #
  108. # add a PAM entry
  109. #
  110. # determine platform specific PAM entries
  111. ( case "$l_target" in
  112. *-freebsd* )
  113. echo "auth sufficient ${pam_modpfx}pam_skey.so"
  114. echo "auth required ${pam_modpfx}pam_unix.so try_first_pass"
  115. echo "account required ${pam_modpfx}pam_unix.so"
  116. echo "password required ${pam_modpfx}pam_permit.so"
  117. echo "session required ${pam_modpfx}pam_permit.so"
  118. ;;
  119. *-linux* )
  120. echo "auth required ${pam_modpfx}pam_unix_auth.so shadow nodelay"
  121. echo "auth required ${pam_modpfx}pam_nologin.so"
  122. echo "account required ${pam_modpfx}pam_unix_acct.so"
  123. echo "password required ${pam_modpfx}pam_unix_passwd.so shadow nullok use_authtok"
  124. echo "session required ${pam_modpfx}pam_unix_session.so"
  125. echo "session required ${pam_modpfx}pam_limits.so"
  126. ;;
  127. *-solaris* )
  128. echo "auth required ${pam_modpfx}pam_unix.so try_first_pass"
  129. echo "account required ${pam_modpfx}pam_unix.so"
  130. echo "password required ${pam_modpfx}pam_unix.so"
  131. echo "session required ${pam_modpfx}pam_unix.so"
  132. ;;
  133. * )
  134. echo "auth required ${pam_modpfx}pam_unix.so try_first_pass"
  135. echo "account required ${pam_modpfx}pam_unix.so"
  136. echo "password required ${pam_modpfx}pam_unix.so"
  137. echo "session required ${pam_modpfx}pam_unix.so"
  138. ;;
  139. esac
  140. ) >$tmpfile
  141. # add application name prefix if using combined configuration
  142. if [ -f $pam_cfgloc ]; then
  143. sed -e "s;^;$name ;" <$tmpfile >$tmpfile.n
  144. mv $tmpfile.n $tmpfile
  145. fi
  146. # create entry
  147. if [ -f $pam_cfgloc ]; then
  148. if [ ".$verbose" = .yes ]; then
  149. echo "++ adding entry to $pam_cfgloc"
  150. fi
  151. $rpmtool_config -a -i $id $pam_cfgloc <$tmpfile || exit $?
  152. elif [ -d $pam_cfgloc ]; then
  153. if [ ".$verbose" = .yes ]; then
  154. echo "++ adding entry to $pam_cfgloc/$name"
  155. fi
  156. $rpmtool_config -a -i $id $pam_cfgloc/$name <$tmpfile || exit $?
  157. fi
  158. elif [ ".$remove" = .yes ]; then
  159. #
  160. # remove a PAM entry
  161. #
  162. # remove entry
  163. if [ -f $pam_cfgloc ]; then
  164. if [ ".$verbose" = .yes ]; then
  165. echo "++ removing entry from $pam_cfgloc"
  166. fi
  167. $rpmtool_config -r -i $id $pam_cfgloc || exit $?
  168. elif [ -d $pam_cfgloc ]; then
  169. if [ ".$verbose" = .yes ]; then
  170. echo "++ removing entry from $pam_cfgloc/$name"
  171. fi
  172. $rpmtool_config -r -i $id $pam_cfgloc/$name || exit $?
  173. if [ ! -s $pam_cfgloc/$name ]; then
  174. rm -f $pam_cfgloc/$name >/dev/null 2>&1 || true
  175. fi
  176. fi
  177. fi
  178. # cleanup
  179. rm -f $tmpfile
  180. exit 0