xref: /samba/
NameDateSize

..16-Mar-201612 KiB

.bzrignore17-Apr-20151.8 KiB

.gitignore17-Apr-20151.8 KiB

.testr.conf14-Oct-2014186

.ycm_extra_conf.py23-Mar-20159.6 KiB

auth/19-Nov-20144 KiB

BUILD_SYSTEMS.txt10-Jan-20143.5 KiB

buildtools/26-May-20154 KiB

callcatcher-exceptions.grep29-Dec-2012149

configure13-Oct-2014328

configure.developer22-Apr-201466

COPYING29-Dec-201234.3 KiB

ctdb/16-Nov-20154 KiB

dfs_server/07-Aug-20154 KiB

docs-xml/30-Nov-20154 KiB

dynconfig/16-Nov-20154 KiB

examples/10-Feb-20154 KiB

file_server/12-Jul-20134 KiB

include/29-Dec-20124 KiB

install_with_python.sh07-Aug-20151.5 KiB

lib/30-Apr-20154 KiB

libcli/07-Feb-20124 KiB

libds/07-Feb-20124 KiB

libgpo/09-Nov-20154 KiB

librpc/08-Jul-20154 KiB

Makefile21-Sep-20152.2 KiB

nsswitch/09-Nov-20154 KiB

packaging/10-Feb-20154 KiB

PFIF.txt29-Dec-2012188

pidl/09-Nov-20154 KiB

prog_guide4.txt20-Feb-201329.5 KiB

python/09-Nov-20154 KiB

README09-Dec-20158.7 KiB

README.cifs-utils29-Dec-2012270

README.Coding09-Nov-201510.8 KiB

README.contributing10-Feb-20155 KiB

release-scripts/18-Aug-20154 KiB

Roadmap26-May-2015835

script/09-Nov-20154 KiB

selftest/09-Dec-20154 KiB

source3/15-Dec-20154 KiB

source4/16-Apr-20144 KiB

testdata/01-Jun-20154 KiB

testprogs/07-Feb-20124 KiB

tests/16-Apr-20144 KiB

testsuite/29-Dec-20124 KiB

third_party/26-May-20154 KiB

upgrading-samba4.txt29-Dec-20121.1 KiB

VERSION07-Aug-20156.1 KiB

WHATSNEW.txt16-Nov-20152.3 KiB

wintest/17-Mar-20144 KiB

wscript09-Nov-201513.5 KiB

wscript_build25-Mar-20154.6 KiB

wscript_build_embedded_heimdal29-Dec-2012124

wscript_build_system_heimdal29-Dec-2012122

wscript_build_system_mitkrb529-Dec-2012126

wscript_configure_system_mitkrb512-Oct-201511.3 KiB

README

1This is the release version of Samba, the free SMB and CIFS client and
2server and Domain Controller for UNIX and other operating
3systems. Samba is maintained by the Samba Team, who support the
4original author, Andrew Tridgell.
5
6>>>> Please read THE WHOLE of this file as it gives important information
7>>>> about the configuration and use of Samba.
8
9NOTE: Installation instructions may be found
10      for the file/print server and domain member in:
11      docs/htmldocs/Samba3-HOWTO/install.html
12
13      For the AD DC implementation a full HOWTO is provided at:
14      http://wiki.samba.org/index.php/Samba4/HOWTO
15
16This software is freely distributable under the GNU public license, a
17copy of which you should have received with this software (in a file
18called COPYING). 
19
20
21WHAT IS SMB/CIFS?
22=================
23
24This is a big question. 
25
26The very short answer is that it is the protocol by which a lot of
27PC-related machines share files and printers and other information
28such as lists of available files and printers. Operating systems that
29support this natively include Windows 9x, Windows NT (and derivatives), 
30OS/2, Mac OS X and Linux.  Add on packages that achieve the same 
31thing are available for DOS, Windows 3.1, VMS, Unix of all kinds, 
32MVS, and more.  Some Web Browsers can speak this protocol as well 
33(smb://).  Alternatives to SMB include Netware, NFS, Appletalk, 
34Banyan Vines, Decnet etc; many of these have advantages but none are 
35both public specifications and widely implemented in desktop machines 
36by default.
37
38The Common Internet File system (CIFS) is what the new SMB initiative
39is called. For details watch http://samba.org/cifs.
40
41
42WHY DO PEOPLE WANT TO USE SMB?
43==============================
44
451. Many people want to integrate their Microsoft desktop clients
46   with their Unix servers.
47
482. Others want to integrate their Microsoft (etc) servers with Unix
49   servers. This is a different problem to integrating desktop 
50   clients.
51
523. Others want to replace protocols like NFS, DecNet and Novell NCP,
53   especially when used with PCs.
54
55
56WHAT CAN SAMBA DO?
57==================
58
59Please refer to the WHATSNEW.txt included with this README for
60a list of features in the latest Samba release.
61
62Here is a very short list of what samba includes, and what it does. 
63For many networks this can be simply summarized by "Samba provides 
64a complete replacement for Windows NT, Warp, NFS or Netware servers."
65
66- a SMB server, to provide Windows NT and LAN Manager-style file and print 
67  services to SMB clients such as Windows 95, Warp Server, smbfs and others.
68
69- a Windows Domain Controller (NT4 and AD) replacement.
70
71- a file/print server that can act as a member of a Windows NT 4.0
72  or Active Directory domain.
73
74- a NetBIOS (rfc1001/1002) nameserver, which amongst other things gives 
75  browsing support. Samba can be the master browser on your LAN if you wish.
76
77- a ftp-like SMB client so you can access PC resources (disks and
78  printers) from UNIX, Netware, and other operating systems
79
80- a tar extension to the client for backing up PCs
81
82- limited command-line tool that supports some of the NT administrative
83  functionality, which can be used on Samba, NT workstation and NT server.
84
85For a much better overview have a look at the web site at
86http://samba.org/samba, and browse the user survey.
87
88Related packages include:
89
90- cifsvfs, an advanced Linux-only filesystem allowing you to mount 
91  remote SMB filesystems from PCs on your Linux box. This is included 
92  as standard with Linux 2.5 and later.
93
94- smbfs, the previous Linux-only filesystem allowing you to mount remote SMB
95  filesystems from PCs on your Linux box. This is included as standard with
96  Linux 2.0 and later.
97
98
99
100CONTRIBUTIONS
101=============
102
1031. To contribute via GitHub
104  - fork the official Samba team repository on GitHub
105      * see https://github.com/samba-team/samba
106  - become familiar with the coding standards as described in README.Coding
107  - make sure you read the Samba copyright policy
108      * see https://www.samba.org/samba/devel/copyright-policy.html
109  - create a feature branch
110  - make changes
111  - when committing, be sure to add signed-off-by tags
112      * see https://wiki.samba.org/index.php/CodeReview#commit_message_tags
113  - send a pull request for your branch through GitHub
114  - this will trigger an email to the samba-technical mailing list
115  - discussion happens on the samba-technical mailing list as described below
116  - more info on using Git for Samba development can be found on the Samba Wiki
117      * see https://wiki.samba.org/index.php/Using_Git_for_Samba_Development
118
1192. If you want to contribute to the development of the software then
120please join the mailing list. The Samba team accepts patches
121(preferably in "diff -u" format, see http://samba.org/samba/devel/ 
122for more details) and are always glad to receive feedback or 
123suggestions to the address samba@lists.samba.org.  More information
124on the various Samba mailing lists can be found at http://lists.samba.org/.
125
126You can also get the Samba sourcecode straight from the git repository - see
127http://wiki.samba.org/index.php/Using_Git_for_Samba_Development.
128
129If you like a particular feature then look through the git change-log
130(on the web at http://gitweb.samba.org/?p=samba.git;a=summary) and see
131who added it, then send them an email.
132
133Remember that free software of this kind lives or dies by the response
134we get. If no one tells us they like it then we'll probably move onto
135something else.
136
137MORE INFO
138=========
139
140DOCUMENTATION
141-------------
142
143There is quite a bit of documentation included with the package,
144including man pages, and lots of .html files with hints and useful
145info. This is also available from the web page. There is a growing
146collection of information under docs/.
147
148A list of Samba documentation in languages other than English is
149available on the web page.
150
151If you would like to help with the documentation, please coordinate
152on the samba@samba.org mailing list.  See the next section for details 
153on subscribing to samba mailing lists.
154
155
156MAILING LIST
157------------
158
159Please do NOT send subscription/unsubscription requests to the lists!
160
161There is a mailing list for discussion of Samba.  For details go to
162<http://lists.samba.org/> or send mail to <samba-subscribe@lists.samba.org>
163
164There is also an announcement mailing list where new versions are
165announced.  To subscribe go to <http://lists.samba.org/> or send mail
166to <samba-announce-subscribe@lists.samba.org>.  All announcements also
167go to the samba list, so you only need to be on one.
168
169For details of other Samba mailing lists and for access to archives, see
170<http://lists.samba.org/>
171
172
173MAILING LIST ETIQUETTE
174----------------------
175
176A few tips when submitting to this or any mailing list.
177
1781. Make your subject short and descriptive. Avoid the words "help" or
179   "Samba" in the subject. The readers of this list already know that
180   a) you need help, and b) you are writing about samba (of course,
181   you may need to distinguish between Samba PDC and other file
182   sharing software). Avoid phrases such as "what is" and "how do
183   i". Some good subject lines might look like "Slow response with
184   Excel files" or "Migrating from Samba PDC to NT PDC".
185
1862. If you include the original message in your reply, trim it so that
187   only the relevant lines, enough to establish context, are
188   included. Chances are (since this is a mailing list) we've already
189   read the original message.
190
1913. Trim irrelevant headers from the original message in your
192   reply. All we need to see is a) From, b) Date, and c) Subject. We
193   don't even really need the Subject, if you haven't changed
194   it. Better yet is to just preface the original message with "On
195   [date] [someone] wrote:".
196
1974. Please don't reply to or argue about spam, spam filters or viruses
198   on any Samba lists. We do have a spam filtering system that is
199   working quite well thank you very much but occasionally unwanted
200   messages slip through. Deal with it.
201
2025. Never say "Me too." It doesn't help anyone solve the
203   problem. Instead, if you ARE having the same problem, give more
204   information. Have you seen something that the other writer hasn't
205   mentioned, which may be helpful?
206
2076. If you ask about a problem, then come up with the solution on your
208   own or through another source, by all means post it. Someone else
209   may have the same problem and is waiting for an answer, but never
210   hears of it.
211
2127. Give as much *relevant* information as possible such as Samba
213   release number, OS, kernel version, etc...
214
2158. RTFM. Google. groups.google.com.
216
217
218WEB SITE
219--------
220
221A Samba WWW site has been setup with lots of useful info. Connect to:
222
223http://samba.org/
224
225As well as general information and documentation, this also has searchable 
226archives of the mailing list and a user survey that shows who else is using
227this package.
228
229

README.cifs-utils

1As of Sunday March 7th, 2010, the Linux CIFS utilities are no longer
2part of the samba suite of tools and have been split off into their own
3project. Please see this webpage for information on how to acquire and
4build them:
5
6    http://linux-cifs.samba.org/cifs-utils/
7
8

README.Coding

1Coding conventions in the Samba tree
2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3
4.. contents::
5
6===========
7Quick Start
8===========
9
10Coding style guidelines are about reducing the number of unnecessary
11reformatting patches and making things easier for developers to work
12together.
13You don't have to like them or even agree with them, but once put in place
14we all have to abide by them (or vote to change them).  However, coding
15style should never outweigh coding itself and so the guidelines
16described here are hopefully easy enough to follow as they are very
17common and supported by tools and editors.
18
19The basic style for C code, also mentioned in prog_guide4.txt, is the Linux kernel
20coding style (See Documentation/CodingStyle in the kernel source tree). This
21closely matches what most Samba developers use already anyways, with a few
22exceptions as mentioned below.
23
24The coding style for Python code is documented in PEP8,
25http://www.python.org/pep/pep8 (with spaces). 
26If you have ever worked on another free software Python project, you are
27probably already familiar with it.
28
29But to save you the trouble of reading the Linux kernel style guide, here
30are the highlights.
31
32* Maximum Line Width is 80 Characters
33  The reason is not about people with low-res screens but rather sticking
34  to 80 columns prevents you from easily nesting more than one level of
35  if statements or other code blocks.  Use source3/script/count_80_col.pl
36  to check your changes.
37
38* Use 8 Space Tabs to Indent
39  No whitespace fillers.
40
41* No Trailing Whitespace
42  Use source3/script/strip_trail_ws.pl to clean up your files before
43  committing.
44
45* Follow the K&R guidelines.  We won't go through all of them here. Do you
46  have a copy of "The C Programming Language" anyways right? You can also use
47  the format_indent.sh script found in source3/script/ if all else fails.
48
49
50
51============
52Editor Hints
53============
54
55Emacs
56-----
57Add the follow to your $HOME/.emacs file:
58
59  (add-hook 'c-mode-hook
60	(lambda ()
61		(c-set-style "linux")
62		(c-toggle-auto-state)))
63
64
65Vi
66--
67(Thanks to SATOH Fumiyasu <fumiyas@osstech.jp> for these hints):
68
69For the basic vi editor included with all variants of \*nix, add the
70following to $HOME/.exrc:
71
72  set tabstop=8
73  set shiftwidth=8
74
75For Vim, the following settings in $HOME/.vimrc will also deal with
76displaying trailing whitespace:
77
78  if has("syntax") && (&t_Co > 2 || has("gui_running"))
79	syntax on
80	function! ActivateInvisibleCharIndicator()
81		syntax match TrailingSpace "[ \t]\+$" display containedin=ALL
82		highlight TrailingSpace ctermbg=Red
83	endf
84	autocmd BufNewFile,BufRead * call ActivateInvisibleCharIndicator()
85  endif
86  " Show tabs, trailing whitespace, and continued lines visually
87  set list listchars=tab:»·,trail:·,extends:…
88
89  " highlight overly long lines same as TODOs.
90  set textwidth=80
91  autocmd BufNewFile,BufRead *.c,*.h exec 'match Todo /\%>' . &textwidth . 'v.\+/'
92
93
94=========================
95FAQ & Statement Reference
96=========================
97
98Comments
99--------
100
101Comments should always use the standard C syntax.  C++
102style comments are not currently allowed.
103
104The lines before a comment should be empty. If the comment directly
105belongs to the following code, there should be no empty line
106after the comment, except if the comment contains a summary
107of multiple following code blocks.
108
109This is good:
110
111	...
112	int i;
113
114	/*
115	 * This is a multi line comment,
116	 * which explains the logical steps we have to do:
117	 *
118	 * 1. We need to set i=5, because...
119	 * 2. We need to call complex_fn1
120	 */
121
122	/* This is a one line comment about i = 5. */
123	i = 5;
124
125	/*
126	 * This is a multi line comment,
127	 * explaining the call to complex_fn1()
128	 */
129	ret = complex_fn1();
130	if (ret != 0) {
131	...
132
133	/**
134	 * @brief This is a doxygen comment.
135	 *
136	 * This is a more detailed explanation of
137	 * this simple function.
138	 *
139	 * @param[in]   param1     The parameter value of the function.
140	 *
141	 * @param[out]  result1    The result value of the function.
142	 *
143	 * @return              0 on success and -1 on error.
144	 */
145	int example(int param1, int *result1);
146
147This is bad:
148
149	...
150	int i;
151	/*
152	 * This is a multi line comment,
153	 * which explains the logical steps we have to do:
154	 *
155	 * 1. We need to set i=5, because...
156	 * 2. We need to call complex_fn1
157	 */
158	/* This is a one line comment about i = 5. */
159	i = 5;
160	/*
161	 * This is a multi line comment,
162	 * explaining the call to complex_fn1()
163	 */
164	ret = complex_fn1();
165	if (ret != 0) {
166	...
167
168	/*This is a one line comment.*/
169
170	/* This is a multi line comment,
171	   with some more words...*/
172
173	/*
174	 * This is a multi line comment,
175	 * with some more words...*/
176
177Indention & Whitespace & 80 columns
178-----------------------------------
179
180To avoid confusion, indentations have to be tabs with length 8 (not 8
181' ' characters).  When wrapping parameters for function calls,
182align the parameter list with the first parameter on the previous line.
183Use tabs to get as close as possible and then fill in the final 7
184characters or less with whitespace.  For example,
185
186	var1 = foo(arg1, arg2,
187		   arg3);
188
189The previous example is intended to illustrate alignment of function
190parameters across lines and not as encourage for gratuitous line
191splitting.  Never split a line before columns 70 - 79 unless you
192have a really good reason.  Be smart about formatting.
193
194
195If, switch, & Code blocks
196-------------------------
197
198Always follow an 'if' keyword with a space but don't include additional
199spaces following or preceding the parentheses in the conditional.
200This is good:
201
202	if (x == 1)
203
204This is bad:
205
206	if ( x == 1 )
207
208Yes we have a lot of code that uses the second form and we are trying
209to clean it up without being overly intrusive.
210
211Note that this is a rule about parentheses following keywords and not
212functions.  Don't insert a space between the name and left parentheses when
213invoking functions.
214
215Braces for code blocks used by for, if, switch, while, do..while, etc.
216should begin on the same line as the statement keyword and end on a line
217of their own. You should always include braces, even if the block only
218contains one statement.  NOTE: Functions are different and the beginning left
219brace should be located in the first column on the next line.
220
221If the beginning statement has to be broken across lines due to length,
222the beginning brace should be on a line of its own.
223
224The exception to the ending rule is when the closing brace is followed by
225another language keyword such as else or the closing while in a do..while
226loop.
227
228Good examples:
229
230	if (x == 1) {
231		printf("good\n");
232	}
233
234	for (x=1; x<10; x++) {
235		print("%d\n", x);
236	}
237
238	for (really_really_really_really_long_var_name=0;
239	     really_really_really_really_long_var_name<10;
240	     really_really_really_really_long_var_name++)
241	{
242		print("%d\n", really_really_really_really_long_var_name);
243	}
244
245	do {
246		printf("also good\n");
247	} while (1);
248
249Bad examples:
250
251	while (1)
252	{
253		print("I'm in a loop!\n"); }
254
255	for (x=1;
256	     x<10;
257	     x++)
258	{
259		print("no good\n");
260	}
261
262	if (i < 10)
263		print("I should be in braces.\n");
264
265
266Goto
267----
268
269While many people have been academically taught that "goto"s are
270fundamentally evil, they can greatly enhance readability and reduce memory
271leaks when used as the single exit point from a function. But in no Samba
272world what so ever is a goto outside of a function or block of code a good
273idea.
274
275Good Examples:
276
277	int function foo(int y)
278	{
279		int *z = NULL;
280		int ret = 0;
281
282		if (y < 10) {
283			z = malloc(sizeof(int) * y);
284			if (z == NULL) {
285				ret = 1;
286				goto done;
287			}
288		}
289
290		print("Allocated %d elements.\n", y);
291
292	 done:
293		if (z != NULL) {
294			free(z);
295		}
296
297		return ret;
298	}
299
300
301Primitive Data Types
302--------------------
303
304Samba has large amounts of historical code which makes use of data types
305commonly supported by the C99 standard. However, at the time such types
306as boolean and exact width integers did not exist and Samba developers
307were forced to provide their own.  Now that these types are guaranteed to
308be available either as part of the compiler C99 support or from
309lib/replace/, new code should adhere to the following conventions:
310
311  * Booleans are of type "bool" (not BOOL)
312  * Boolean values are "true" and "false" (not True or False)
313  * Exact width integers are of type [u]int[8|16|32|64]_t
314
315
316Typedefs
317--------
318
319Samba tries to avoid "typedef struct { .. } x_t;" so we do always try to use
320"struct x { .. };". We know there are still such typedefs in the code,
321but for new code, please don't do that anymore.
322
323Initialize pointers
324-------------------
325
326All pointer variables MUST be initialized to NULL. History has
327demonstrated that uninitialized pointer variables have lead to various
328bugs and security issues.
329
330Pointers MUST be initialized even if the assignment directly follows
331the declaration, like pointer2 in the example below, because the
332instructions sequence may change over time.
333
334Good Example:
335
336	char *pointer1 = NULL;
337	char *pointer2 = NULL;
338
339	pointer2 = some_func2();
340
341	...
342
343	pointer1 = some_func1();
344
345Bad Example:
346
347	char *pointer1;
348	char *pointer2;
349
350	pointer2 = some_func2();
351
352	...
353
354	pointer1 = some_func1();
355
356Make use of helper variables
357----------------------------
358
359Please try to avoid passing function calls as function parameters
360in new code. This makes the code much easier to read and
361it's also easier to use the "step" command within gdb.
362
363Good Example:
364
365	char *name = NULL;
366
367	name = get_some_name();
368	if (name == NULL) {
369		...
370	}
371
372	ret = some_function_my_name(name);
373	...
374
375
376Bad Example:
377
378	ret = some_function_my_name(get_some_name());
379	...
380
381Please try to avoid passing function return values to if- or
382while-conditions. The reason for this is better handling of code under a
383debugger.
384
385Good example:
386
387	x = malloc(sizeof(short)*10);
388	if (x == NULL) {
389		fprintf(stderr, "Unable to alloc memory!\n");
390	}
391
392Bad example:
393
394	if ((x = malloc(sizeof(short)*10)) == NULL ) {
395		fprintf(stderr, "Unable to alloc memory!\n");
396	}
397
398There are exceptions to this rule. One example is walking a data structure in
399an iterator style:
400
401	while ((opt = poptGetNextOpt(pc)) != -1) {
402		   ... do something with opt ...
403	}
404
405But in general, please try to avoid this pattern.
406
407
408Control-Flow changing macros
409----------------------------
410
411Macros like NT_STATUS_NOT_OK_RETURN that change control flow
412(return/goto/etc) from within the macro are considered bad, because
413they look like function calls that never change control flow. Please
414do not use them in new code.
415
416The only exception is the test code that depends repeated use of calls
417like CHECK_STATUS, CHECK_VAL and others.
418
419
420DEBUG statements
421----------------
422
423Use these following macros instead of DEBUG:
424
425DBG_ERR	log level 0		error conditions
426DBG_WARNING	log level 1		warning conditions
427DBG_NOTICE	log level 3		normal, but significant, condition
428DBG_INFO	log level 5		informational message
429DBG_DEBUG	log level 10		debug-level message
430
431Example usage:
432
433DBG_ERR("Memory allocation failed\n");
434DBG_DEBUG("Received %d bytes\n", count);
435
436The messages from these macros are automatically prefixed with the
437function name.
438

README.contributing

1How to contribute a patch to Samba
2----------------------------------
3
4Simple, just make the code change, and email it as either a "diff -u"
5change, or as a "git format-patch" change against the original source
6code to samba-technical@lists.samba.org, or attach it to a bug report at
7http://bugzilla.samba.org
8
9For larger code changes, breaking the changes up into a set of simple
10patches, each of which does a single thing, are much easier to review.
11Patch sets like that will most likely have an easier time being merged
12into the Samba code than large single patches that make lots of
13changes in one large diff.
14
15Ownership of the contributed code
16---------------------------------
17
18Samba is a project with distributed copyright ownership, which means
19we prefer the copyright on parts of Samba to be held by individuals
20rather than corporations if possible. There are historical legal
21reasons for this, but one of the best ways to explain it is that it's
22much easier to work with individuals who have ownership than corporate
23legal departments if we ever need to make reasonable compromises with
24people using and working with Samba.
25
26We track the ownership of every part of Samba via git, our source code
27control system, so we know the provenance of every piece of code that
28is committed to Samba.
29
30So if possible, if you're doing Samba changes on behalf of a company
31who normally owns all the work you do please get them to assign
32personal copyright ownership of your changes to you as an individual,
33that makes things very easy for us to work with and avoids bringing
34corporate legal departments into the picture.
35
36If you can't do this we can still accept patches from you owned by
37your employer under a standard employment contract with corporate
38copyright ownership. It just requires a simple set-up process first.
39
40We use a process very similar to the way things are done in the Linux
41kernel community, so it should be very easy to get a sign off from
42your corporate legal department. The only changes we've made are to
43accommodate the licenses we use, which are GPLv3 and LGPLv3 (or later)
44whereas the Linux kernel uses GPLv2.
45
46The process is called signing.
47
48How to sign your work
49---------------------
50
51Once you have permission to contribute to Samba from
52your employer, simply email a copy of the following text
53from your corporate email address to contributing@samba.org
54
55------------------------------------------------------------
56Samba Developer's Certificate of Origin. Version 1.0
57
58By making a contribution to this project, I certify that:
59
60(a) The contribution was created in whole or in part by me and I
61    have the right to submit it under the appropriate
62    version of the GNU General Public License; or
63
64(b) The contribution is based upon previous work that, to the best
65    of my knowledge, is covered under an appropriate open source
66    license and I have the right under that license to submit that
67    work with modifications, whether created in whole or in part
68    by me, under the GNU General Public License, in the
69    appropriate version; or
70
71(c) The contribution was provided directly to me by some other
72    person who certified (a) or (b) and I have not modified
73    it.
74
75(d) I understand and agree that this project and the
76    contribution are public and that a record of the
77    contribution (including all metadata and personal
78    information I submit with it, including my sign-off) is
79    maintained indefinitely and may be redistributed
80    consistent with the Samba Team's policies and the
81    requirements of the GNU GPL where they are relevant.
82
83(e) I am granting this work to this project under the terms of both
84    the GNU General Public License and the GNU Lesser General Public
85    License as published by the Free Software Foundation; either version
86    3 of these Licenses, or (at the option of the project) any later
87    version.
88
89    http://www.gnu.org/licenses/gpl-3.0.html
90    http://www.gnu.org/licenses/lgpl-3.0.html
91------------------------------------------------------------
92
93We will maintain a copy of that email as a record that you have the
94rights to contribute code to Samba under the required licenses whilst
95working for the company where the email came from.
96
97Then when sending in a patch via the normal mechanisms described
98above, add a line that states:
99
100Signed-off-by: Random J Developer <random@developer.example.org>
101
102using your real name and the email address you sent the original email
103you used to send the Samba Developer's Certificate of Origin to us
104(sorry, no pseudonyms or anonymous contributions.)
105
106That's it ! Such code can then quite happily contain changes that have
107copyright messages such as :
108
109        (C) Example Corporation.
110
111and can be merged into the Samba codebase in the same way as patches
112from any other individual. You don't need to send in a copy of the
113Samba Developer's Certificate of Origin for each patch, or inside each
114patch. Just the sign-off message is all that is required once we've
115received the initial email.
116
117Have fun and happy Samba hacking !
118
119The Samba Team.
120
121