summaryrefslogtreecommitdiff
path: root/source3/smbwrapper/PORTING
blob: 884246d078af0e1d4c4a3749e2e427f9ebef880a (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
This describes how to port the smbwrapper portion of Samba to a new
unix-like platform. Note that porting smbwrapper is considerably
harder than porting Samba, for Samba you generally just need to run
configure and recompile whereas for smbwrapper some extra effort is
generally required.


STEP 1
------

The first step is to work out how to create a shared library on your
OS and how to compile C code to produce position independent object
files (PIC files). You shoud be able to find this information in the
man pages for your compiler and loader (ld). Then modify configure.in
to give that information to Samba.


STEP 2
------

The next step is to work out how to preload shared objects. On many
systems this is done using a LD_PRELOAD environment variable. On
others (shc as IRIX) it may use a _RTL_LIST variable.

To make sure it works I suggest you create two C files like this:

/* first C file */
main()
{
 unlink("foo.txt");
}

/* second C file */
#include <stdio.h>

int unlink(char *fname)
{
	fprintf(stderr,"unlink(%s) called\n",fname);
}


then compile the first as an ordinary C program and the second as a
shared library. Then use LD_PRELOAD to preload the resulting shared
library. Then run the first program. It should print "unlink(foo.txt)
called". If it doesn't then consult your man pages till you get it
right.

Once you work this out then edit smbwrapper/smbsh.in and add a section
if necessary to correctly set the necessary preload options for your
OS. 


STEP 3
------

The next step is to work out how to make direct system calls. On most
machines this will work without any source code changes to
smbwrapper. To test that it does work create the following C program:

#include <sys/syscall.h>
main()
{
 syscall(SYS_write, 1, "hello world\n", 12);
}

and try to compile/run it. If it produces "hello world" then syscall()
works as expected. If not then work out what needs to be changed and
then make that change in realcalls.h. For example, on IRIX 6.4 the
system call numbers are wrong and need to be fixed up by getting an
offset right.


STEP 4
------

Try compiling smbwrapper! Then test it. Then debug it. Simple really :)