PageRenderTime 45ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/examples/scripts/idmap/idmap_nis.sh

https://bitbucket.org/resara/rdssamba4
Shell | 119 lines | 102 code | 11 blank | 6 comment | 9 complexity | 8a78d208e524ac60be05a3abd4feb7e6 MD5 | raw file
Possible License(s): LGPL-3.0, Apache-2.0, BSD-3-Clause, GPL-3.0, LGPL-2.1
  1. #!/bin/bash
  2. # idmap script to map SIDs to UIDs/GIDs using NIS
  3. # tridge@samba.org June 2009
  4. DOMAIN=$(ypdomainname)
  5. (
  6. date
  7. echo $*
  8. ) >> /var/log/samba/idmap.log
  9. cmd=$1
  10. shift
  11. PATH=/usr/bin:bin:$PATH
  12. shopt -s nocasematch || {
  13. echo "shell option nocasematch not supported"
  14. exit 1
  15. }
  16. # map from a domain and name to a uid/gid
  17. map_name() {
  18. domain="$1"
  19. name="$2"
  20. ntype="$3"
  21. case $ntype in
  22. 1)
  23. rtype="UID"
  24. map="passwd"
  25. ;;
  26. 2)
  27. rtype="GID"
  28. map="group"
  29. ;;
  30. *)
  31. echo "ERR: bad name type $ntype"
  32. exit 1
  33. ;;
  34. esac
  35. id=$(ypmatch "$name" "$map".byname 2>/dev/null | cut -d: -f3)
  36. [ -z "$id" ] && {
  37. echo "ERR: bad match for $name in map $map"
  38. exit 1
  39. }
  40. echo "$rtype":"$id"
  41. }
  42. # map from a unix id to a name
  43. map_id() {
  44. ntype="$1"
  45. id="$2"
  46. case $ntype in
  47. UID)
  48. map="passwd.byuid"
  49. ;;
  50. GID)
  51. map="group.bygid"
  52. ;;
  53. *)
  54. echo "ERR: bad name type $ntype"
  55. exit 1
  56. ;;
  57. esac
  58. name="$(ypmatch "$id" "$map" 2>/dev/null | cut -d: -f1)"
  59. [ -z "$name" ] && {
  60. echo "ERR: bad match for $name in map $map"
  61. exit 1
  62. }
  63. echo "$name"
  64. }
  65. case $cmd in
  66. SIDTOID)
  67. sid=$1
  68. rid=`echo $sid | cut -d- -f8`
  69. [ -z "$rid" ] && {
  70. echo "ERR: bad rid in SID $sid"
  71. exit 1
  72. }
  73. unset _NO_WINBINDD
  74. # oh, this is ugly. Shell is just not meant for parsing text
  75. fullname=`wbinfo -s $sid 2> /dev/null`
  76. domain=`echo $fullname | cut -d'\' -f1`
  77. [[ "$domain" = $DOMAIN ]] || {
  78. echo "ERR: bad domain $domain"
  79. exit 1
  80. }
  81. name=`echo $fullname | cut -d'\' -f2`
  82. nwords=`echo $name | wc -w`
  83. ntype=`echo $name | cut -d' ' -f$nwords`
  84. nminusone=`expr $nwords - 1`
  85. name=`echo $name | cut -d' ' -f-$nminusone`
  86. [ -z "$name" ] && {
  87. echo "ERR: bad name $fullname for SID $sid"
  88. exit 1
  89. }
  90. map_name "$domain" "$name" "$ntype"
  91. ;;
  92. IDTOSID)
  93. ntype=$1
  94. id=$2
  95. name="$(map_id "$ntype" "$id")"
  96. sid="$(wbinfo -n "$name" 2>/dev/null | cut -d' ' -f1)"
  97. [ -z "$sid" ] && {
  98. echo "ERR: name $name not found in ADS"
  99. exit 1
  100. }
  101. echo "SID:$sid"
  102. ;;
  103. *)
  104. echo "ERR: Unknown command $cmd"
  105. exit 1;
  106. ;;
  107. esac
  108. exit 0