summaryrefslogtreecommitdiff
path: root/docs-xml/manpages/idmap_script.8.xml
blob: d115486c0aba31d6992298426defcf4fbcde9ddb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
<refentry id="idmap_script.8">

<refmeta>
	<refentrytitle>idmap_script</refentrytitle>
	<manvolnum>8</manvolnum>
	<refmiscinfo class="source">Samba</refmiscinfo>
	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
	<refmiscinfo class="version">4.7</refmiscinfo>
</refmeta>


<refnamediv>
	<refname>idmap_script</refname>
	<refpurpose>Samba's idmap_script Backend for Winbind</refpurpose>
</refnamediv>

<refsynopsisdiv>
	<title>DESCRIPTION</title>

	<para>
	The idmap_script plugin is a substitute for the idmap_tdb2
	backend used by winbindd for storing SID/uid/gid mapping tables
	in clustered environments with Samba and CTDB. It is a read only
	backend that uses a script to perform mapping.
	</para>

	<para>
	It was developed out of the idmap_tdb2 back end and does not store
	SID/uid/gid mappings in a TDB, since the winbind_cache tdb will
	store the mappings once they are provided.
	</para>
</refsynopsisdiv>

<refsect1>
	<title>IDMAP OPTIONS</title>

	<variablelist>
		<varlistentry>
		<term>range = low - high</term>
		<listitem><para>
			Defines the available matching uid and gid range for which the
			backend is authoritative.
		</para></listitem>
		</varlistentry>

		<varlistentry>
		<term>script</term>
		<listitem><para>
			This option can be used to configure an external program
			for performing id mappings.
		</para></listitem>
		</varlistentry>
	</variablelist>
</refsect1>

<refsect1>
	<title>IDMAP SCRIPT</title>

	<para>
	The tdb2 idmap backend supports an external program for performing id mappings
	through the smb.conf option <parameter>idmap config * : script</parameter> or
	its deprecated legacy form <parameter>idmap : script</parameter>.
	</para>

	<para>
	The mappings obtained by the script are then stored in the idmap tdb2
	database instead of mappings created by the incrementing id counters.
	It is therefore important that the script covers the complete range of
	SIDs that can be passed in for SID to Unix ID mapping, since otherwise
	SIDs unmapped by the script might get mapped to IDs that had
	previously been mapped by the script.
	</para>

	<para>
	The script should accept the following command line options.
	</para>

	<programlisting>
	SIDTOID S-1-xxxx
	IDTOSID UID xxxx
	IDTOSID GID xxxx
	IDTOSID XID xxxx
	</programlisting>

	<para>
	And it should return one of the following responses as a single line of
	text.
	</para>

	<programlisting>
	UID:yyyy
	GID:yyyy
	XID:yyyy
	SID:ssss
	ERR:yyyy
	</programlisting>

	<para>
	XID indicates that the ID returned should be both a UID and a GID.
	That is, it requests an ID_TYPE_BOTH, but it is ultimately up to
	the script whether or not it can honor that request. It can choose
	to return a UID or a GID mapping only.
	</para>
</refsect1>

<refsect1>
	<title>EXAMPLES</title>

	<para>
	This example shows how script is used as a the default idmap backend
	using an external program via the script parameter:
	</para>

	<programlisting>
	[global]
	idmap config * : backend = script
	idmap config * : range = 1000000-2000000
	idmap config * : script = /usr/local/samba/bin/idmap_script.sh
	</programlisting>

	<para>
	This shows a simple script to partially perform the task:
	</para>

	<programlisting>
	#!/bin/sh
	#
	# Uncomment this if you want some logging
	#echo $@ >> /tmp/idmap.sh.log
	if [ "$1" == "SIDTOID" ]
	then
		# Note. The number returned has to be within the range defined
		#echo "Sending UID:1000005" >> /tmp/idmap.sh.log
		echo "UID:1000005"
		exit 0
	else
		#echo "Sending ERR: No idea what to do" >> /tmp/idmap.sh.log
		echo "ERR: No idea what to do"
		exit 1
	fi
	</programlisting>

	<para>
	Clearly, this script is not enough, as it should probably use wbinfo
	to determine if an incoming SID is a user or group SID and then
	look up the mapping in a table or use some other mechanism for
	mapping SIDs to UIDs and etc.
	</para>

	<para>
	  Please be aware that the script is called with the
	  _NO_WINBINDD environment variable set to 1. This prevents
	  recursive calls into winbind from the script both via
	  explicit calls to wbinfo and via implicit calls via
	  nss_winbind. For example a call to <command>ls -l</command>
	  could trigger such an infinite recursion.
	</para>

	<para>
	  It is safe to call <command>wbinfo -n</command> and
	  <command>wbinfo -s</command> from within an idmap script. To
	  do so, the script must unset the _NO_WINBINDD environment
	  variable right before the call to <command>wbinfo</command>
	  and set it to 1 again right after <command>wbinfo</command>
	  has returned to protect against the recursion.
	</para>
</refsect1>

<refsect1>
	<title>AUTHOR</title>

	<para>
	The original Samba software and related utilities
	were created by Andrew Tridgell. Samba is now developed
	by the Samba Team as an Open Source project similar
	to the way the Linux kernel is developed.
	</para>
</refsect1>

</refentry>