Sudo porting hints
==================

Before trying to port sudo to a new architecture, please join the
sudo-workers mailing list (see the README file) and ask if anyone
has a port working or in-progress.  Sudo should be fairly easy to
port.  Since it uses a configure script, most of the work is often
done for you.  As long as your operating system is reasonably POSIX
compliant porting should be easy.  If your operating system has a
separate library for POSIX compatibility you may need to add it by
using configure's --with-libraries option.

If your OS is an SVR4 derivative (or some approximation thereof), it may
be sufficient to tell configure you are runnng SVR4, something like:
    configure foo-bar-sysv4
where foo is the hardware architecture and bar is the vendor.

A possible pitfall is getdtablesize(2) which is used to get the
maximum number of open files the process can have.  If an OS has
the POSIX sysconf(2) it will be used instead of getdtablesize(2).
ulimit(2) or getrlimit(2) can also be used on some OS's.  If all
else fails you can use the value of NOFILE in <sys/param.h>.

Sudo tries to clear the environment of dangerous environment variables
such as LD_* to prevent shared library spoofing.  If you are porting
sudo to a new OS that has shared libraries you'll want to mask out
the variables that allow one to change the shared library path.
See initial_badenv_table() in env.c to see how this is done for
various operating systems.

It is possible that on a really weird system, tgetpass() may not
compile.  (The most common cause for this is that the "fd_set" type
is not defined in a place that sudo expects it to be.  If you can
find the header file where "fd_set" is typedef'd, have tgetpass.c
include it and send in a bug report.)
Alternately, tgetpass.c may compile but not work (nothing happens
at the Password: prompt).  It is possible that your C library
contains a broken or unusable crypt() function--try linking with
-lcrypt if that exists.  Another possibility is that select() is
not fully functional; running configure with --with-password-timeout=0
will disable the use of select().  If sudo prompts you for a
password but never accepts it, see below.

Sudo detects and recognizes most common shadow password schemes
automatically.  If you find that sudo is not accepting your password
and you are sure that it has been typed in correctly there are two
likely problems.  One possibility is that your C library has a
broken crypt() function (see above).  The other is that your operating
system is using shadow passwords and sudo has not detected that
fact.  Look in config.h to see what, if any, shadow password scheme
was detected.  The most common are SVR4 (HAVE_GETSPNAM will be
defined) and SecureWare (HAVE_GETPRPWNAM will be defined).  Check
the manual pages on your system for "getspnam" and "getprpwnam".
If one of those exist but the appropriate define does not exist in
config.h then the problem is most likely that those routines live
in a library that sudo does not know to link against.  The manual
page should tell you what library this is.  You can then use the
--with-libraries option to configure to tell sudo to link with the
library in question.  For example:
    --with-libraries='-lgen'
would cause sudo to link in libgen which contains "getspnam" on SCO
systems.

If you are trying to port to a system without standard Berkeley
networking you may find that interfaces.c will not compile.  This
is most likely on OS's with STREAMS-based networking.  It should
be possible to make it work by modifying the ISC streams support
(see the _ISC #ifdef's).  However, if you don't care about ip address
and network address support, you can just run configure with the
--without-interfaces flag to get a do-nothing load_interfaces()
stub function.

Sudo wants POSIX signals (sigaction and friends).  If your system
lacks sigaction but has the 4.3BSD sigvec() function, sigvec() will
be used instead via the wrapper functions in sigaction.c.  It is
not currently possible to use the old SVR3 and 4.2BSD signals, but
this is due more to my lack of a test machine than anything else.

If you port sudo to a new architecture, please send the output of
"configure", the config.log file and your changes to:
    sudo@courtesan.com

If you are unable to get sudo working, and you are willing to
give me an account on a machine, send mail to sudo@courtesan.com.
Note, however, that I can't make any promises.
