source: branches/samba-3.5.x/examples/scripts/idmap/idmap_nis.sh

Last change on this file was 414, checked in by Herwig Bauernfeind, 15 years ago

Samba 3.5.0: Initial import

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