Compare commits

..

35 Commits
v0.5 ... v2.2.1

Author SHA1 Message Date
ncpfs archive import
82706139bf Import ncpfs 2.2.1 2026-04-28 20:39:59 +02:00
ncpfs archive import
0979ae6a41 Import ncpfs 2.2.0 2026-04-28 20:39:59 +02:00
ncpfs archive import
c6c6fbe4ca Import ncpfs 2.1.1 2026-04-28 20:39:59 +02:00
ncpfs archive import
f813517d69 Import ncpfs 2.0.12 2026-04-28 20:39:59 +02:00
ncpfs archive import
915f560f85 Import ncpfs 2.0.11 2026-04-28 20:39:59 +02:00
ncpfs archive import
1a5653d403 Import ncpfs 2.0.10 2026-04-28 20:39:58 +02:00
ncpfs archive import
f88460b2e6 Import ncpfs 2.0.9 2026-04-28 20:39:58 +02:00
ncpfs archive import
fff159f2db Import ncpfs 2.0.8 2026-04-28 20:39:58 +02:00
ncpfs archive import
c4d2144d0d Import ncpfs 2.0.7 2026-04-28 20:39:58 +02:00
ncpfs archive import
134b5d6ebf Import ncpfs 2.0.6 2026-04-28 20:39:58 +02:00
ncpfs archive import
ab78307868 Import ncpfs 2.0.5 2026-04-28 20:39:58 +02:00
ncpfs archive import
3019bba627 Import ncpfs 2.0.4 2026-04-28 20:39:58 +02:00
ncpfs archive import
011a5107c5 Import ncpfs 2.0.3 2026-04-28 20:39:58 +02:00
ncpfs archive import
7179281575 Import ncpfs 2.0.2 2026-04-28 20:39:58 +02:00
ncpfs archive import
b8d830f9a3 Import ncpfs 2.0.1 2026-04-28 20:39:58 +02:00
ncpfs archive import
b36a27bedb Import ncpfs 2.0.0 2026-04-28 20:39:58 +02:00
ncpfs archive import
7d0e3d011b Import ncpfs 0.24 2026-04-28 20:39:58 +02:00
ncpfs archive import
84cb1f167d Import ncpfs 0.23 2026-04-28 20:39:58 +02:00
ncpfs archive import
64f006632a Import ncpfs 0.22 2026-04-28 20:39:58 +02:00
ncpfs archive import
92f749a943 Import ncpfs 0.21 2026-04-28 20:39:58 +02:00
ncpfs archive import
6cb56005ea Import ncpfs 0.20 2026-04-28 20:39:58 +02:00
ncpfs archive import
0520c1d2f7 Import ncpfs 0.19 2026-04-28 20:39:57 +02:00
ncpfs archive import
d5ac4601b1 Import ncpfs 0.18 2026-04-28 20:39:57 +02:00
ncpfs archive import
1fa124bd7c Import ncpfs 0.17 2026-04-28 20:39:57 +02:00
ncpfs archive import
5753870858 Import ncpfs 0.16 2026-04-28 20:39:57 +02:00
ncpfs archive import
b8ce93c8bd Import ncpfs 0.15 2026-04-28 20:39:57 +02:00
ncpfs archive import
7bef99df0f Import ncpfs 0.14 2026-04-28 20:39:57 +02:00
ncpfs archive import
d31ec2ab61 Import ncpfs 0.13 2026-04-28 20:39:57 +02:00
ncpfs archive import
1ee60bade6 Import ncpfs 0.12 2026-04-28 20:39:57 +02:00
ncpfs archive import
20589ca203 Import ncpfs 0.11 2026-04-28 20:39:57 +02:00
ncpfs archive import
517e207709 Import ncpfs 0.10 2026-04-28 20:39:57 +02:00
ncpfs archive import
5d4b23a5c1 Import ncpfs 0.9 2026-04-28 20:39:57 +02:00
ncpfs archive import
c6124785a9 Import ncpfs 0.8 2026-04-28 20:39:57 +02:00
ncpfs archive import
f2bcb2c71e Import ncpfs 0.7 2026-04-28 20:39:57 +02:00
ncpfs archive import
e05e55a64a Import ncpfs 0.6 2026-04-28 20:39:57 +02:00
593 changed files with 193259 additions and 6285 deletions

BIN
.downloads/ncpfs-0.10.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.11.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.12.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.13.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.14.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.15.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.16.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.17.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.18.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.19.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.20.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.21.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.22.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.23.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.24.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.6.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.7.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.8.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-0.9.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.0.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.1.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.10.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.11.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.12.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.2.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.3.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.4.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.5.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.6.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.7.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.8.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.0.9.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.1.1.tgz Normal file

Binary file not shown.

BIN
.downloads/ncpfs-2.2.0.tgz Normal file

Binary file not shown.

Binary file not shown.

435
ABOUT-NLS Normal file
View File

@@ -0,0 +1,435 @@
Notes on the Free Translation Project
*************************************
Free software is going international! The Free Translation Project
is a way to get maintainers of free software, translators, and users all
together, so that will gradually become able to speak many languages.
A few packages already provide translations for their messages.
If you found this `ABOUT-NLS' file inside a distribution, you may
assume that the distributed package does use GNU `gettext' internally,
itself available at your nearest GNU archive site. But you do _not_
need to install GNU `gettext' prior to configuring, installing or using
this package with messages translated.
Installers will find here some useful hints. These notes also
explain how users should proceed for getting the programs to use the
available translations. They tell how people wanting to contribute and
work at translations should contact the appropriate team.
When reporting bugs in the `intl/' directory or bugs which may be
related to internationalization, you should tell about the version of
`gettext' which is used. The information can be found in the
`intl/VERSION' file, in internationalized packages.
Quick configuration advice
==========================
If you want to exploit the full power of internationalization, you
should configure it using
./configure --with-included-gettext
to force usage of internationalizing routines provided within this
package, despite the existence of internationalizing capabilities in the
operating system where this package is being installed. So far, only
the `gettext' implementation in the GNU C library version 2 provides as
many features (such as locale alias, message inheritance, automatic
charset conversion or plural form handling) as the implementation here.
It is also not possible to offer this additional functionality on top
of a `catgets' implementation. Future versions of GNU `gettext' will
very likely convey even more functionality. So it might be a good idea
to change to GNU `gettext' as soon as possible.
So you need _not_ provide this option if you are using GNU libc 2 or
you have installed a recent copy of the GNU gettext package with the
included `libintl'.
INSTALL Matters
===============
Some packages are "localizable" when properly installed; the
programs they contain can be made to speak your own native language.
Most such packages use GNU `gettext'. Other packages have their own
ways to internationalization, predating GNU `gettext'.
By default, this package will be installed to allow translation of
messages. It will automatically detect whether the system already
provides the GNU `gettext' functions. If not, the GNU `gettext' own
library will be used. This library is wholly contained within this
package, usually in the `intl/' subdirectory, so prior installation of
the GNU `gettext' package is _not_ required. Installers may use
special options at configuration time for changing the default
behaviour. The commands:
./configure --with-included-gettext
./configure --disable-nls
will respectively bypass any pre-existing `gettext' to use the
internationalizing routines provided within this package, or else,
_totally_ disable translation of messages.
When you already have GNU `gettext' installed on your system and run
configure without an option for your new package, `configure' will
probably detect the previously built and installed `libintl.a' file and
will decide to use this. This might be not what is desirable. You
should use the more recent version of the GNU `gettext' library. I.e.
if the file `intl/VERSION' shows that the library which comes with this
package is more recent, you should use
./configure --with-included-gettext
to prevent auto-detection.
The configuration process will not test for the `catgets' function
and therefore it will not be used. The reason is that even an
emulation of `gettext' on top of `catgets' could not provide all the
extensions of the GNU `gettext' library.
Internationalized packages have usually many `po/LL.po' files, where
LL gives an ISO 639 two-letter code identifying the language. Unless
translations have been forbidden at `configure' time by using the
`--disable-nls' switch, all available translations are installed
together with the package. However, the environment variable `LINGUAS'
may be set, prior to configuration, to limit the installed set.
`LINGUAS' should then contain a space separated list of two-letter
codes, stating which languages are allowed.
Using This Package
==================
As a user, if your language has been installed for this package, you
only have to set the `LANG' environment variable to the appropriate
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
and `CC' is an ISO 3166 two-letter country code. For example, let's
suppose that you speak German and live in Germany. At the shell
prompt, merely execute `setenv LANG de_DE' (in `csh'),
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
This can be done from your `.login' or `.profile' file, once and for
all.
You might think that the country code specification is redundant.
But in fact, some languages have dialects in different countries. For
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
country code serves to distinguish the dialects.
The locale naming convention of `LL_CC', with `LL' denoting the
language and `CC' denoting the country, is the one use on systems based
on GNU libc. On other systems, some variations of this scheme are
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
locales supported by your system for your country by running the command
`locale -a | grep '^LL''.
Not all programs have translations for all languages. By default, an
English message is shown in place of a nonexistent translation. If you
understand other languages, you can set up a priority list of languages.
This is done through a different environment variable, called
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
for the purpose of message handling, but you still need to have `LANG'
set to the primary language; this is required by other parts of the
system libraries. For example, some Swedish users who would rather
read translations in German than English for when Swedish is not
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
In the `LANGUAGE' environment variable, but not in the `LANG'
environment variable, `LL_CC' combinations can be abbreviated as `LL'
to denote the language's main dialect. For example, `de' is equivalent
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
(Portuguese as spoken in Portugal) in this context.
Translating Teams
=================
For the Free Translation Project to be a success, we need interested
people who like their own language and write it well, and who are also
able to synergize with other translators speaking the same language.
Each translation team has its own mailing list. The up-to-date list of
teams can be found at the Free Translation Project's homepage,
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
area.
If you'd like to volunteer to _work_ at translating messages, you
should become a member of the translating team for your own language.
The subscribing address is _not_ the same as the list itself, it has
`-request' appended. For example, speakers of Swedish can send a
message to `sv-request@li.org', having this message body:
subscribe
Keep in mind that team members are expected to participate
_actively_ in translations, or at solving translational difficulties,
rather than merely lurking around. If your team does not exist yet and
you want to start one, or if you are unsure about what to do or how to
get started, please write to `translation@iro.umontreal.ca' to reach the
coordinator for all translator teams.
The English team is special. It works at improving and uniformizing
the terminology in use. Proven linguistic skill are praised more than
programming skill, here.
Available Packages
==================
Languages are not equally supported in all packages. The following
matrix shows the current state of internationalization, as of August
2002. The matrix shows, in regard of each package, for which languages
PO files have been submitted to translation coordination, with a
translation percentage of at least 50%.
Ready PO files be bg ca cs da de el en eo es et fi fr
+----------------------------------------+
a2ps | [] [] [] [] |
ap-utils | |
bash | [] [] [] [] |
bfd | [] [] |
binutils | [] [] |
bison | [] [] [] [] |
clisp | |
clisp | [] [] [] [] |
clisplow | |
cpio | [] [] [] [] |
darkstat | () |
diffutils | [] [] [] [] [] [] |
enscript | [] [] |
error | [] [] [] |
fetchmail | [] () [] [] [] () |
fileutils | [] [] [] [] [] |
findutils | [] [] [] [] [] [] |
flex | [] [] [] [] [] |
gas | [] [] |
gawk | [] [] [] |
gcal | [] [] |
gcc | [] [] |
gettext | [] [] [] [] [] |
gnupg | [] [] [] [] [] [] [] |
gprof | [] [] |
gpsdrive | () () () () () |
grep | [] [] [] [] [] [] [] [] |
gretl | [] |
gthumb | () () () |
hello | [] [] [] [] [] [] [] [] [] |
id-utils | [] [] [] |
indent | [] [] [] [] [] |
jpilot | () [] [] [] |
jwhois | [] [] |
kbd | [] [] [] |
ld | [] [] |
libc | [] [] [] [] [] [] [] [] |
libiconv | [] [] [] [] |
lifelines | () () |
lilypond | [] [] |
lingoteach | [] [] |
lingoteach_lessons| () () |
lynx | [] [] [] [] [] |
m4 | [] [] [] [] [] |
make | [] [] [] [] |
man-db | [] () () [] () () |
mysecretdiary | [] [] [] |
nano | [] () [] [] [] [] |
nano_1_0 | [] () [] [] [] [] |
opcodes | [] [] [] |
parted | [] [] [] [] [] |
ptx | [] [] [] [] [] [] [] |
python | |
recode | [] [] [] [] [] [] |
sed | [] [] [] [] [] [] [] [] [] [] |
sh-utils | [] [] [] [] |
sharutils | [] [] [] [] [] [] [] |
sketch | () [] () |
soundtracker | [] [] [] |
sp | [] |
tar | [] [] [] [] [] [] |
texinfo | [] [] [] [] [] |
textutils | [] [] [] [] [] |
util-linux | [] [] [] [] [] [] |
vorbis-tools | [] |
wastesedge | |
wdiff | [] [] [] [] [] [] |
wget | [] [] [] [] [] [] [] [] [] [] |
+----------------------------------------+
be bg ca cs da de el en eo es et fi fr
0 2 19 10 30 44 9 1 12 44 17 6 53
gl he hr hu id it ja ko lv nb nl nn
+-------------------------------------+
a2ps | () () [] |
ap-utils | |
bash | [] |
bfd | [] |
binutils | [] |
bison | [] [] [] [] |
clisp | |
clisp | [] |
clisplow | |
cpio | [] [] [] [] |
darkstat | |
diffutils | [] [] [] [] [] |
enscript | [] [] |
error | [] |
fetchmail | [] |
fileutils | [] [] [] |
findutils | [] [] [] [] [] [] [] [] |
flex | [] |
gas | |
gawk | [] |
gcal | |
gcc | [] |
gettext | [] [] |
gnupg | [] [] [] [] |
gprof | [] |
gpsdrive | [] () () |
grep | [] [] [] [] [] [] [] |
gretl | |
gthumb | () () |
hello | [] [] [] [] [] [] [] [] [] [] [] [] |
id-utils | [] [] |
indent | [] [] [] [] |
jpilot | () () |
jwhois | [] [] |
kbd | |
ld | |
libc | [] [] [] [] |
libiconv | [] [] [] |
lifelines | |
lilypond | [] |
lingoteach | [] |
lingoteach_lessons| |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
make | [] [] [] [] [] [] |
man-db | () () |
mysecretdiary | [] |
nano | [] [] [] [] |
nano_1_0 | [] [] [] [] [] |
opcodes | [] [] |
parted | [] [] [] |
ptx | [] [] [] [] [] |
python | |
recode | [] [] [] |
sed | [] [] [] [] [] [] [] [] |
sh-utils | [] [] [] |
sharutils | [] [] [] |
sketch | () |
soundtracker | [] [] |
sp | |
tar | [] [] [] [] [] [] |
texinfo | [] [] [] |
textutils | [] [] [] [] |
util-linux | () [] |
vorbis-tools | [] |
wastesedge | |
wdiff | [] [] [] |
wget | [] [] [] [] [] [] |
+-------------------------------------+
gl he hr hu id it ja ko lv nb nl nn
23 9 12 19 16 13 26 9 1 7 19 3
no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
+----------------------------------------------+
a2ps | () () () [] [] [] [] [] | 10
ap-utils | () | 0
bash | [] | 6
bfd | [] [] | 5
binutils | [] [] | 5
bison | [] [] [] [] | 12
clisp | | 0
clisp | | 5
clisplow | | 0
cpio | [] [] [] [] | 12
darkstat | [] [] () () | 2
diffutils | [] [] [] [] [] [] | 17
enscript | [] [] [] [] | 8
error | [] [] [] | 7
fetchmail | () () [] | 6
fileutils | [] [] [] [] [] [] | 14
findutils | [] [] [] [] [] [] [] | 21
flex | [] [] [] | 9
gas | [] | 3
gawk | [] [] | 6
gcal | [] [] | 4
gcc | [] | 4
gettext | [] [] [] [] [] [] | 13
gnupg | [] [] [] | 14
gprof | [] [] | 5
gpsdrive | [] [] | 3
grep | [] [] [] [] [] | 20
gretl | | 1
gthumb | () () [] | 1
hello | [] [] [] [] [] [] [] | 28
id-utils | [] [] [] [] | 9
indent | [] [] [] [] [] | 14
jpilot | () () [] [] | 5
jwhois | [] () () [] [] | 7
kbd | [] [] | 5
ld | [] [] | 4
libc | [] [] [] [] [] [] | 18
libiconv | [] [] [] [] [] | 12
lifelines | [] | 1
lilypond | [] | 4
lingoteach | [] [] | 5
lingoteach_lessons| () | 0
lynx | [] [] [] [] | 13
m4 | [] [] [] [] | 13
make | [] [] [] [] [] | 15
man-db | | 3
mysecretdiary | [] [] [] | 7
nano | [] [] [] [] | 13
nano_1_0 | [] [] [] [] | 14
opcodes | [] [] [] | 8
parted | [] [] [] [] | 12
ptx | [] [] [] [] [] [] [] | 19
python | | 0
recode | [] [] [] [] [] [] | 15
sed | [] [] [] [] [] [] | 24
sh-utils | [] [] | 9
sharutils | [] [] [] [] | 14
sketch | [] () [] | 4
soundtracker | [] | 6
sp | | 1
tar | [] [] [] [] [] [] [] | 19
texinfo | [] [] | 10
textutils | [] [] [] [] [] | 14
util-linux | [] [] [] | 10
vorbis-tools | [] | 3
wastesedge | | 0
wdiff | [] [] [] [] [] | 14
wget | [] [] [] [] [] [] [] [] | 24
+----------------------------------------------+
37 teams no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
68 domains 4 15 2 28 28 12 10 49 43 4 1 9 609
Some counters in the preceding matrix are higher than the number of
visible blocks let us expect. This is because a few extra PO files are
used for implementing regional variants of languages, or language
dialects.
For a PO file in the matrix above to be effective, the package to
which it applies should also have been internationalized and
distributed as such by its maintainer. There might be an observable
lag between the mere existence a PO file and its wide availability in a
distribution.
If August 2002 seems to be old, you may fetch a more recent copy of
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
matrix with full percentage details can be found at
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
Using `gettext' in new packages
===============================
If you are writing a freely available program and want to
internationalize it you are welcome to use GNU `gettext' in your
package. Of course you have to respect the GNU Library General Public
License which covers the use of the GNU `gettext' library. This means
in particular that even non-free programs can use `libintl' as a shared
library, whereas only free software can use `libintl' as a static
library or use modified versions of `libintl'.
Once the sources are changed appropriately and the setup can handle
to use of `gettext' the only thing missing are the translations. The
Free Translation Project is also available for packages which are not
developed inside the GNU project. Therefore the information given above
applies also for every other Free Software Project. Contact
`translation@iro.umontreal.ca' to make the `.pot' files available to
the translation teams.

67
BUGS
View File

@@ -3,15 +3,60 @@ them to be bugs.
But there are really problems that might be fixed in the future.
Invalid directory timestamps:
I did not yet find out how to get valid timestamps for directories
from a NetWare server. So I simply return 0, which means 01.01.70. If
anybody knows how to get these values, please mail
lendecke@namu01.gwdg.de.
If you find some problem unlisted in this file, contact me at
"Petr Vandrovec" <vandrove@vc.cvut.cz>.
'df' returns 0:
Free disk space is distributed among the volumes in NetWare. df is
only able to report one number per mounted filesystem. As connections
are quite expensive for NetWare (with lwared that might change ...), I
rejected the alternative to mount only a single volume for a unix
mount point. So I simply return 0.
-------------------------------------------------------------------------------
You might experience lockups of ncpfs volumes. It happens especially
under high network traffic, not necessarily only IPX traffic. I am not
able to reproduce this problem on my machine, so I'm sorry I can not
do anything about that. When such a lockup happens, you have to shut
down the complete ipx subsystem by deleting all ipx interfaces,
unmounting all ncpfs volumes (in this order!) and restarting all
again.
This problem has been solved by Martin Stover (THANKS!!)
See patches/lockup-2.0.30.diff for the fix.
-------------------------------------------------------------------------------
'df' returns 0: Free disk space is distributed among the volumes in
NetWare. df is only able to report one number per mounted
filesystem. As connections are quite expensive for NetWare (with
mars_nwe and lwared that might change ...), I rejected the alternative
to mount only a single volume for a unix mount point. So I simply
return 0.
-------------------------------------------------------------------------------
If you use Linux 1.2.x, In your kernel log there will appear messages
like
Nov 25 16:09:08 lx01 kernel: alloc_skb called nonatomically from interrupt 0000002e
These are a bit annoying, but completely harmless.
-------------------------------------------------------------------------------
Known bugs:
- If GetNearsetServer returns invalid (nonexistant, downed) server, all
utilities gives up. VLM/Client32 in this situation tries randomly choosen
server after 30 secs timeout. You have to fix your routers at this time.
Sorry.
- nwdplist does nothing good. This tool will be finished after nwnet.c...
- manpages names for 3ncp section are too long... Is there a way to
define page header or ...
-------------------------------------------------------------------------------
Known incompatibilities:
PROBLEM: ncpfs is not compatible with NSS volumes of beta releases of NW5
SOLUTION: Upgrade your NW5 to production NW5 version.
PROBLEM: ncpfs cannot access LinWare server
SOLUTION: LinWare does not support namespace calls used by ncpfs. Because of
LinWare is currently not maintained, you should fix it yourself or
move your server to MarsNWE or Caldera's NetWare for Linux.

491
Changes Normal file
View File

@@ -0,0 +1,491 @@
ChangeSet@1.229, 2003-02-08 11:06:50+01:00
Ignore editor backup files *~
ChangeSet@1.228, 2003-02-08 11:06:15+01:00
Fix problems in ncpfs-nwuid area.
ChangeSet@1.227, 2003-02-08 10:56:50+01:00
Add proper version to new library symbols.
ChangeSet@1.226, 2003-02-08 10:32:45+01:00
Sanitize ncp_open_2 calling convention...
ChangeSet@1.225, 2003-02-08 10:24:39+01:00
Pass API errors through in ncp_login_conn, instead of always
returning EACCES.
Make password optional for nwfsinfo.
ChangeSet@1.224, 2003-02-08 09:52:31+01:00
Update PHP's autoconf and libtool environment.
ChangeSet@1.223, 2003-02-08 09:28:27+01:00
Debian's lintian prefers relative symlinks over absolute...
ChangeSet@1.222, 2003-02-08 09:27:27+01:00
Debian's lintian complains that manpages are not gzip -9 ed...
ChangeSet@1.221, 2003-02-08 09:26:42+01:00
Add ncp_find_conn_spec3: ncp_find_conn_spec2 with sane calling convention.
Change ncp_find_conn_spec* users to use ncp_find_conn_spec3.
Change calling convention for ncp_fopen_nwc.
Fix ncp_find_conn_spec* error reporting when stdin/stdout are not
terminal. Spotted by Andre Holzhey.
ChangeSet@1.220, 2003-01-27 09:45:09+01:00
Add NDS support to nwdir.
ChangeSet@1.219, 2003-01-27 09:20:19+01:00
Add basic NWDSSearch demo to contrib/testing.
ChangeSet@1.218, 2003-01-27 09:18:46+01:00
Regenerate autoconf system.
ChangeSet@1.217, 2003-01-27 09:15:36+01:00
Update configure.ac for autoconf2.57.
ChangeSet@1.216, 2003-01-27 08:49:01+01:00
Make PHP module compilable even if ncpfs is not installed. Found by
jukka.huhta@helsinki.fi.
ChangeSet@1.215, 2003-01-11 21:45:09+01:00
Fix wcsrev() to do string reverse instead of core dump.
ChangeSet@1.214, 2003-01-11 21:43:53+01:00
Print correct number of leaked connections. Spotted by Patrick Pollet.
ChangeSet@1.213, 2003-01-11 21:41:59+01:00
Simplify DS iteration handle library.
Do not leak connection in NWDSSearch. Found and tracked down by Patrick Pollet.
ChangeSet@1.212, 2003-01-11 17:53:37+01:00
Enable ncp-debug in "sample" configuration.
ChangeSet@1.211, 2003-01-11 17:52:42+01:00
Add NWGetNLMLoadedList function and use it in nwfsinfo.
ChangeSet@1.210, 2002-11-25 23:39:53+01:00
Make pqlist/pqstat/pqrm/nprint really working with NDS queues. It did not
work correctly if queue was on different server than one you specified with
-S option.
ChangeSet@1.209, 2002-11-25 19:35:42+01:00
Use "Unknown user" instead of "Unknown server". Pointed out by Radovan Garabik.
Fixes Debian bug #170694.
ChangeSet@1.208, 2002-11-19 22:59:52+01:00
Add -o pass-fd=X option to ncpmount and ncplogin. It is
simplest way how to pass password to these commands.
ChangeSet@1.207, 2002-11-19 18:11:39+01:00
Install nwmsg always as sbin/nwmsg, even if sbin does not exist.
ChangeSet@1.206, 2002-11-18 23:22:05+01:00
Remove unneeded includes from ncplogin/ncpmount.
ChangeSet@1.205, 2002-11-18 23:15:21+01:00
More merging of ncplogin and ncpmount.
ChangeSet@1.204, 2002-11-18 22:50:20+01:00
Move common code from ncplogin.c and ncpmount.c to mount_login.c.
Reindent ncplogin.c.
ChangeSet@1.203, 2002-11-18 21:15:48+01:00
2.5.x kernels have /proc/net/ipx/interface instead of /proc/net/ipx_interface.
ChangeSet@1.202, 2002-10-19 01:28:20+02:00
pam_ncp_auth: Fix doublefree when using bindery authentication and user's home directory
is found.
ChangeSet@1.201, 2002-10-19 01:13:39+02:00
pam_ncp_auth: Reindent.
ChangeSet@1.200, 2002-10-19 00:00:15+02:00
pam_ncp_auth: Close connection to server immediately after opening session or
changing password. Currently there is no need to keep connection open.
Originally by Patrick Pollet.
ChangeSet@1.199, 2002-10-18 23:42:26+02:00
pam_ncp_auth: Do not return errors from close session...
ChangeSet@1.198, 2002-10-18 23:16:53+02:00
pam_ncp_auth: Return correct error code when code detects buffer overflow attack.
ChangeSet@1.197, 2002-10-18 23:07:39+02:00
pam_ncp_auth: Consume whole option string passed to -z/-Z.
ChangeSet@1.196, 2002-10-18 22:58:56+02:00
Fix typo in pam_ncp_auth.c. By Patrick Pollet.
ChangeSet@1.195, 2002-10-18 22:19:23+02:00
Emit value separators also between NWDSRead, not only between
values read by NWDSRead in ncpreadprops tcl helper. By Patrick Pollet.
ChangeSet@1.194, 2002-10-06 02:29:50+02:00
Include missing stdarg.h in ncpm_common.h.
By Roy Bixler.
ChangeSet@1.193, 2002-09-19 22:37:15+02:00
Oops, use NCP_DIRSTYLE_DIRBASE and not NCP_DIRSTYLE_NOHANDLE in nwpurge tool and
in dirlist2 demo program.
ChangeSet@1.192, 2002-09-19 22:36:29+02:00
NCP search for file set always returns filename, even if we did not asked for one.
Let's always ask for name, so there is no surprise with some other/future server
implementations.
ChangeSet@1.191, 2002-09-15 00:27:15+02:00
Fix big-endian problems by using nw_info_struct2 instead of nw_info_struct.
API always returned nw_info_struct in "NCP" (little-endian) byte order, but when structure
was passed to API, it expected volume and directory entry numbers to be in native byte order.
In addition to the problem above, nobody except nwdir get byte order completely right - some
forgot to byteswap volume number, and some both.
ChangeSet@1.190, 2002-09-15 00:18:14+02:00
Allow for passing "human readable" paths to ncp_ns_* API.
ChangeSet@1.189, 2002-09-09 22:01:03+02:00
More bigendian fixes. From Roy Bixler...
ChangeSet@1.188, 2002-09-09 21:48:50+02:00
Few big-endian fixes. Found by Roy Bixler.
ChangeSet@1.187, 2002-09-09 21:30:08+02:00
Upgrade for (patched) SWIG 1.3.14
ChangeSet@1.186, 2002-08-31 15:16:44+02:00
Use aTHX_ instead of aTHX when needed. Discovered by perl 5.8.
ChangeSet@1.185, 2002-08-31 13:40:29+02:00
Really add support for NCP_DEBUG=all.
ChangeSet@1.184, 2002-08-30 21:48:10+02:00
Fix few compile warnings introduced in last changeset.
ChangeSet@1.183, 2002-08-30 21:44:23+02:00
Add code which prints connections not closed on library shutdown. Build ncpfs with
--enable-ncp-debug, and then set environment variable NCP_DEBUG to cleanup.
ChangeSet@1.182, 2002-08-30 21:29:22+02:00
There is no install-dev in Makefile generated in contrib/php.
ChangeSet@1.181, 2002-08-30 21:19:35+02:00
Regenerate .gmo files.
ChangeSet@1.180, 2002-08-30 21:19:08+02:00
Fix complaints in german translation: %s do not match in one pair of c-format strings.
ChangeSet@1.179, 2002-08-30 21:17:52+02:00
Update Czech translation.
ChangeSet@1.178, 2002-08-30 21:17:04+02:00
Update gettext to 0.11.5 + regenerate autoconf.
ChangeSet@1.177, 2002-08-30 14:42:33+02:00
Fix builds on hosts without locale.h/libintl.h, when using --disable-nls.
ChangeSet@1.176, 2002-08-23 00:12:28+02:00
Update ncpmount/ncplogin/ncpmap for mount version 5. Main change is that
we now handle Netware messages in IP environment - of course only if you
have appropriate kernel...
ChangeSet@1.175, 2002-08-23 00:01:59+02:00
Add NWCancelWait - NCP 112.
ChangeSet@1.174, 2002-08-22 17:14:53+02:00
Simplify mount protocol version handling.
ChangeSet@1.173, 2002-08-22 16:16:15+02:00
Add new, text based, mount option format.
ChangeSet@1.172, 2002-08-21 21:55:02+02:00
Kill now unused variable in nwsfind.
ChangeSet@1.171, 2002-08-21 21:48:15+02:00
Kill libncpsu. Only difference between libncp and libncpsu was ipx_make_reachable. Now
library contains both suid and non-suid versions, and appropriate one is selected at
runtime.
Modify nwsfind to always call suid version, even if nwsfind is not installed suid.
ChangeSet@1.170, 2002-08-21 19:52:15+02:00
Split reply buffer from request buffer. Since we verify signatures on replies we must be
able to retry requests after we receive reply (with wrong signature), and so we cannot
receive reply into request's buffer.
Create NCP request header in the do_ncp_call, and not in its callers, so callers do not have
to touch sequence numbers, connection numbers, and so on.
ChangeSet@1.169, 2002-08-21 19:42:29+02:00
Change x_recv/x_recvfrom to return err and pass length through additional parameter,
instead of returning length and passing err indirectly.
ChangeSet@1.168, 2002-08-20 23:39:58+02:00
NCP/UDP signs replies differently than NCP/IPX, it does not sign error code
and connection status. Oops.
ChangeSet@1.167, 2002-08-20 21:40:17+02:00
Verify packet signatures on replies received from server.
ChangeSet@1.166, 2002-08-20 19:21:09+02:00
Kill few warnings here and there:
Add missing prototypes.
Remove < 0 compares on unsigned values.
Explicitly cast int to size_t in comparsions.
ChangeSet@1.165, 2002-08-20 18:50:13+02:00
Packet signatures for NCP/TCP. Length in the signed data is in big-endian format,
while NCP/UDP and NCP/IPX use little-endian and I oversight this difference...
ChangeSet@1.164, 2002-08-19 01:42:44+02:00
Fix ncp signatures negotiation code. NCP/TCP signatures still do not work.
ChangeSet@1.163, 2002-08-19 01:40:06+02:00
Use NCP_OBSOLETE for obsolete APIs.
ChangeSet@1.162, 2002-08-06 20:15:37+02:00
Exit from pserver when broken connection is detected.
Helps a lot if you are running pserver with -d from inittab as a respawn task.
ChangeSet@1.161, 2002-08-06 18:48:44+02:00
Make sure that we round all keys up to the unitsize boundary. Otherwise modmult endlessly loops.
ChangeSet@1.160, 2002-07-28 02:16:29+02:00
Ignore user and nouser mount options.
ChangeSet@1.159, 2002-07-28 00:54:55+02:00
Add NWGetUserInfo function.
Extend nwuserlist to print information obtained by NWGetUserInfo.
ChangeSet@1.158, 2002-07-12 23:48:25+02:00
Allow setting of file offset in large filesize demo. BTW, abend
when writting to large files is fixed internally at Novell.
ChangeSet@1.157, 2002-07-06 18:28:31+02:00
Update czech translation.
Regenerate i18n files.
ChangeSet@1.156, 2002-07-06 18:26:32+02:00
Mark "yes" and "no" strings in nwfsinfo eligible for i18n.
ChangeSet@1.155, 2002-07-06 18:25:05+02:00
stuil/ncpm_common.c contains i18n strings too.
ChangeSet@1.154, 2002-07-06 18:05:33+02:00
Fix coredump in nwmsg when mountpoint is not listed in /etc/mtab.
Clean up nwmsg code.
Refresh tknwmsg.
ChangeSet@1.153, 2002-07-06 16:33:34+02:00
Exclusive locking is NCP_PHYSREC_EX... (in physlock.c demo)
ChangeSet@1.152, 2002-07-06 16:32:11+02:00
Added demo for NW*Semaphore API.
ChangeSet@1.151, 2002-07-05 00:30:26+02:00
Ignore generated contrib/testing/physlock.
ChangeSet@1.150, 2002-07-05 00:25:44+02:00
Add physical records locking API.
Add test program for physical records locks.
Tests for locking above 4GB fails on my beta NW6SP2 test server. I believe it is server bug, because of same API suceeds with offsets < 4GB...
ChangeSet@1.149, 2002-07-03 23:37:44+02:00
Welcome, 64bit NCPs... Tested with nw6nss1c. Test it only in test environment,
read+get file length works fine, but write abends server when UDP or TCP transport is used.
Only IPX works correctly...
ChangeSet@1.148, 2002-07-03 01:36:29+02:00
Update config.guess and config.sub from autotools-dev 20020621.1
ChangeSet@1.147, 2002-07-03 01:34:57+02:00
Add ncp_get_file_server_information_2 API.
Extend nwfsinfo to print NW5+ information.
ChangeSet@1.146, 2002-06-25 23:19:12+02:00
pam_ncp_auth: Strip leading dot from generated context when doing contextless login.
ChangeSet@1.145, 2002-06-25 15:17:22+02:00
pam_ncp_auth: Fix buffer overflow I created in last changeset. We store string plus comma, so we have to count comma too.
ChangeSet@1.144, 2002-06-24 01:17:36+02:00
Bind and SAP resolver are case insensitive.
ChangeSet@1.143, 2002-06-23 21:36:44+02:00
Clean all files generated in contrib/php.
ChangeSet@1.142, 2002-06-23 00:58:05+02:00
pam_ncp_auth: Fix couple of warnings and make contextless code faster.
ChangeSet@1.141, 2002-06-23 00:42:21+02:00
pam_ncp_auth: By Patrick Pollet.
Extended -Z option to allow some zenflags to be turned OFF on that workstation:
with -Z all zenflags are off, but with -ZABCD, only flags ABCD are off.
ChangeSet@1.140, 2002-06-23 00:23:22+02:00
pam_ncp_auth: Contextless login and IP support. By Jean-François Burdet.
ChangeSet@1.139, 2002-06-23 00:18:43+02:00
Make parameter "value" to NWDSAddFilterToken() constant.
ChangeSet@1.138, 2002-06-22 23:51:37+02:00
pam_ncp_auth: By Patrick Pollet
Add create homedir/do not create homedir option.
Add mount Netware in homedir or somewhere else option.
ChangeSet@1.137, 2002-06-22 23:23:21+02:00
pam_ncp_auth fixes. By Patrick Pollet.
Fixed possible buffer overflow in mount_nwhome in verbose mode.
Fixed remote access granting table for samba >= 2.07 (pam_tty=samba and
pam_rhost=hostname, was null, null in samba 2.06).
ChangeSet@1.136, 2002-06-22 23:13:29+02:00
tcl: Parse /etc/ndsclient.conf in all programs, pass -l to ncpmap when requested.
ChangeSet@1.135, 2002-06-22 22:55:11+02:00
Allow ncpmap mountpoint relocation by -l option. By Patrick Pollet.
ChangeSet@1.134, 2002-06-22 21:24:57+02:00
Use all supported namespaces when parsing ncpmount/ncpmap -V option.
ChangeSet@1.133, 2002-06-22 18:51:08+02:00
Pass username from ndsspace.tcl to ncpvrest explicitly. By Patrick Pollet.
ChangeSet@1.132, 2002-06-22 18:48:10+02:00
Bug in reading password expiration date. Fixed context problem. By Patrick Pollet.
ChangeSet@1.131, 2002-06-22 18:39:57+02:00
Added ndsexporter.pl into tcl-utils. By Patrick Pollet.
ChangeSet@1.130, 2002-06-22 18:38:53+02:00
Fix nwwhoami's -fc/-fD behavior. By Patrick Pollet.
ChangeSet@1.129, 2002-06-22 18:26:41+02:00
Emit value separator between multiple values. By Patrick Pollet.
ChangeSet@1.128, 2002-06-22 03:59:24+02:00
Fix "make distclean" failure in contrib/php.
ChangeSet@1.127, 2002-06-21 23:46:07+02:00
Fix ncpmount -o tcp brokeness.
ChangeSet@1.126, 2002-06-20 22:34:04+02:00
Check for php-config correctly
ChangeSet@1.125, 2002-06-18 19:46:49+02:00
Fix bug that all commands without -A option worked on
nearest server instead of on one specified by -S.
ChangeSet@1.124, 2002-06-18 19:44:46+02:00
tracencp requires -ldl
ChangeSet@1.123, 2002-06-16 00:25:12+02:00
Put code common to ncpmount/ncplogin/ncpmap into ncpm_common.
Add ncp_find_server_addr.
ChangeSet@1.122, 2002-06-05 22:51:51+02:00
Give descriptive names to _StartNLM arguments.
ChangeSet@1.121, 2002-05-28 22:00:35+02:00
Add autodetection to PHP module configuration
ChangeSet@1.120, 2002-05-28 20:09:04+02:00
contrib/php/Makefile.in is now autogenerated.
contrib/php/config_vars.mk and contrib/php/libs.mk are autogenerated, I commited them by mistake.
ChangeSet@1.119, 2002-05-28 19:33:02+02:00
Fix char*/const char* in ipxdump
ChangeSet@1.118, 2002-05-28 19:31:56+02:00
Use NCPFS_PACKAGE instead of PACKAGE
Remove config.h where not needed
Build PHP module through phpize
ChangeSet@1.117, 2002-05-09 02:42:38+02:00
Create unified name resolving functions and use them.
ChangeSet@1.116, 2002-05-09 02:32:06+02:00
NWScanObject and NWReadPropertyValue added.
ChangeSet@1.115, 2002-05-09 02:29:03+02:00
Use poll() instead of select().
Specify timeout in miliseconds and not in microseconds.
ChangeSet@1.114, 2002-05-09 02:22:33+02:00
Ignore all *.o and *.do object files.
ChangeSet@1.113, 2002-05-09 02:21:13+02:00
Use u_int64_t instead of long long.
ChangeSet@1.112, 2002-04-26 18:28:04+02:00
NDS print queue names can be very long... (from Jean-Francois.Burdet@adm.unige.ch)
ChangeSet@1.111, 2002-04-26 17:56:18+02:00
Updated german translation (from Wolfram Pienkoss <wp@bszh.de>)
ChangeSet@1.110, 2002-04-25 19:22:30+02:00
Enable logging, we are going multiuser...
ChangeSet@1.109, 2002-04-21 00:07:02+02:00
Use gcc to create proper dependencies
ChangeSet@1.108, 2002-04-20 00:39:21+02:00
Update PHP module for post sep-2001 API.
ChangeSet@1.107, 2002-04-19 12:37:10+02:00
Fix iconv_wchar_t_to_external issues.
Add -A option to the ncpmount and ncplogin help text.
ChangeSet@1.106, 2002-02-27 19:11:44+01:00
Erase password from command line. Better process name change code.
ChangeSet@1.105, 2002-02-27 19:05:36+01:00
Fix core dump when no username is specified to ncplogin.
ChangeSet@1.104, 2002-02-27 17:36:20+01:00
Update configure stuff with 2002-02-25 updates
ChangeSet@1.103, 2002-02-22 00:01:49+01:00
Ignore files built by make process
ChangeSet@1.102, 2002-02-17 03:07:49+01:00
nwdir.c:
Do not dump core on files without locks, change date/id format.
ChangeSet@1.101, 2002-02-17 03:04:33+01:00
Fix volume number handling.
ChangeSet@1.100, 2002-02-17 02:57:44+01:00
PAM update - possible buffer overflows.
ChangeSet@1.99, 2002-02-16 04:16:09+01:00
Update version numbers.
TAG: ncpfs-2.2.0.19.1
ChangeSet@1.98, 2002-02-16 04:11:36+01:00
PAM and DS stream updates from Patrick Pollet.
ChangeSet@1.97, 2002-02-16 04:07:55+01:00
Show LastAccess time on directories, NSS supports that.
ChangeSet@1.96, 2002-02-16 04:06:48+01:00
Do not allow attribute names longer than MAX_SCHEMA_NAME_BYTES.
ChangeSet@1.95, 2002-02-16 04:05:17+01:00
Inline x_recv.
ChangeSet@1.94, 2002-02-16 04:04:03+01:00
Handle connection abort from ncpd gracefully
ChangeSet@1.93, 2002-02-16 04:02:08+01:00
Require writeable replica for DS streams
ChangeSet@1.92, 2002-02-16 04:00:38+01:00
Clean make error message
ChangeSet@1.91, 2002-02-16 03:48:15+01:00
Many files:
Import patch ncpfs-2.2.0.18-to-2.2.0.19
TAG: ncpfs-2.2.0.19
For older entries please see Changes.old

553
Changes.old Normal file
View File

@@ -0,0 +1,553 @@
I only began this file with ncpfs-0.12. If you're interested in older
versions, you can find them on ftp.gwdg.de:/pub/linux/misc/ncpfs/old.
[Versions ncpfs-2.2.0.x are available at ftp://platan.vc.cvut.cz/pub/linux/ncpfs]
ncpfs-2.2.0.18 -> ncpfs-2.2.0.19
- VANA: Added -r, recursive, option to ncopy.
- VANA: Started NCP/TCP implementation.
- VANA: Dereference aliases during authentication.
- VANA: Configuration is read from /etc/ncpfs.conf file.
- VANA: Local codepage is read from /etc/ncpfs.conf file.
- VANA: Added INSTALL document.
- Wolfram Pienkoss <wp@bszh.de>: New de.po translations, changed email address.
- Wolfram Pienkoss: SuSE startup/shutdown scripts.
- Karl M. Hegbloom <karlheg@bittersweet.inetarena.com>: tags/TAGS make target
added.
- VANA: Added handling of DS names to nwgrant and nwrevoke.
- VANA: Updated nwdir to print sizes of MAC resource forks.
- VANA: Added handling of replicaless servers.
- Bruno Browning <bruno@lss.wisc.edu>: Fixed nprint.
- VANA: Enhandced NCP pam module.
- VANA: PHP NCP authentication module.
- Patrick Pollet: Enterprise PAM module.
- Patrick Pollet: GTK wrappers around some utilities.
- Patrick Pollet: Enhandcements in PHP module.
- Patrick Pollet: Wrappers around some NDS and NCP calls.
- VANA (+swig): Perl interface to most of NCP functions.
- Hans Grobler: Contributed ncp_ns_delete_entry, pointed out problem in NWDSFilter*
API.
- VANA, Patrick, others: See individual changelog entries in each file.
ncpfs-2.2.0.17 -> ncpfs-2.2.0.18
- VANA: Do not forget to do "make install-dev" if you want compile 3rd party
programs for ncpfs.
- VANA: Added GPL license and revision history to all files. If you are not
mentioned in some file, contact me.
- RYP: Couple of bugfixes, new options to ncptest.
- VANA: Fixed daemonizing of printserver.
- VANA: Fixed signal handling for temporary connections.
- VANA: Enhandcements to pam module (NDS groups).
- VANA: ncp_get_file_size added.
- VANA: ncopy copies MAC resource forks too.
- Wolfram Pienkoss: New de.po translations.
- VANA: I hope that all names returned from nwnet functions fit into
array of MAX_DN_BYTES bytes (or error is returned).
- VANA: Added NDS print queues support into nprint and pqlist. Needs more
polishing.
- VANA: Support for 32-bit uids in kernels after 2.3.40.
- VANA: NWDSAbortPartitionOperation, NWDSAddObject, NWDSAddReplica,
NWDSAuthenticateConn, NWDSChangeObjectPassword, NWDSChangeReplicaType,
NWDSCloseIteration, NWDSCompare, NWDSDuplicateContextHandle,
NWDSExtSyncList, NWDSExtSyncRead, NWDSExtSyncSearch,
NWDSGenerateObjectKeyPair, NWDSGenerateObjectKeyPair2,
NWDSGetAttrCount, NWDSGetAttrName, NWDSGetAttrVal, NWDSGetAttrValFlags,
NWDSGetAttrValModTime, NWDSGetBinderyContext,
NWDSGetCountByClassAndName, NWDSGetDSIInfo, NWDSGetDSVerInfo,
NWDSGetEffectiveRigths, NWDSGetObjectCount, NWDSGetObjectName,
NWDSGetObjectNameAndInfo, NWDSGetNDSStatistics,
NWDSGetPartitionExtInfo, NWDSGetPartitionExtInfoPtr,
NWDSGetPartitionInfo, NWDSGetPartitionRoot, NWDSGetServerName,
NWDSInitBuf, NWDSJoinPartitions, NWDSList,
NWDSListAttrsEffectiveRights, NWDSListByClassAndName,
NWDSListContainers, NWDSListPartitions, NWDSListPartitionsExtInfo,
NWDSModifyDN, NWDSModifyObject, NWDSModifyRDN, NWDSMoveObject,
NWDSPartitionReceiveAllUpdates, NWDSPartitionSendAllUpdates,
NWDSPutAttrName, NWDSPutAttrNameAndVal, NWDSPutAttrVal, NWDSPutChange,
NWDSPutChangeAndVal, NWDSRead, NWDSReadObjectDSIInfo,
NWDSReadObjectInfo, NWDSReloadDS, NWDSRemoveObject,
NWDSRemovePartition, NWDSRemoveReplica, NWDSRepairTimeStamps,
NWDSResetNDSStatistics, NWDSSearch, NWDSSplitPartition,
NWDSSyncPartition, NWDSVerifyObjectPassword added.
You must enable 'NDS authentication support' in kernel if you
want to fully utilize them.
- VANA: NWGetFileServerUTCTime added.
- Bruce Richardson <brichardson@lineone.net>: ncp_perms_to_str and ncp_str_to_perms
added. Modified nwgrant to use these.
- VANA: Modified nwrights to use ncp_perms_to_str.
- VANA: Changed pam module so that it works with bindery only if you specifically
asks.
- VANA: Added chauttok method to pam module. Use with care.
- VANA: All tools except ncpmount: If server specified by '-S' is not found
through IPX, name is retried as DNS name.
ncpfs-2.2.0.16 -> ncpfs-2.2.0.17
- VANA: Add nwtrustee2; it lists also NDS trustees
- RYP: Change in library code for correct using of 'dir_style'.
- RYP: change options on nwtrustee '-o' to '-O' and '-O' to '-o',
to use options like other utils.
- RYP: improved perfomance.
- RYP: fix bug in gettext macros.
- Paul Rensing <paulr@dragonsys.com>: Fixed ncpmount signal handling
- VANA: ncpmount now calls /sbin/nwmsg, as did 2.0.x kernel code
- VANA: Fixes in directory scanning code
- Philip R. Wilson <prw@home.com>: Added DCK_CONFIDENCE flag.
- VANA: Some internal library changes
- VANA: new ncp_ns_* function group
- VANA: better ncopy, nwgrant, nwrevoke; NDS support next time
- VANA: threading support for operations working on single connection; that
is, NWDS* group of function cannot be used in multithreaded environment
yet (unless you'll have separate connections for each thread).
- VANA: versioned symbols
- VANA: pam_ncp_auth enhandced with code & ideas I found in pam_nw_auth 1.0.0
created by Brian Hammond <hammond@cba.uga.edu> (multiple server=,
-d=debug, -v=verbose, -q=quiet (you really want -q if you have
multiple server= options, but I left verbose as default for backward
compatibility))
ncpfs-2.2.0.15 -> ncpfs-2.2.0.16
- VANA: NWVerifyObjectPassword, NWDSCanonicalizeName, NWDSAbbreviateName,
NWDSRemoveAllTypes, NWCCOpenConnByAddr added
- VANA: ported to AIX (4.3.2). You have to use GNU make and GNU cc. There are
some warnings due to 64 bit environment, but it works (over UDP).
It caused couple of fixes and enhandcements (--disable-ipx now really
does not use any IPX header, --disable-kernel now really does not use
any linux-specific header)
- VANA: added install-dev, this moves headers to /usr/include/ncp and installs
libncp.a and libncp.so symlink
ncpfs-2.2.0.14 -> ncpfs-2.2.0.15
- VANA: (reported by couple of peoples): fixed 'slist' when there are no
connections
- VANA: fixed packet signatures on big-endian machines (stupid kernel bug,
fortunately userspace workaround available, so I do not have to bother
Linus)
- VANA: ipx_cmd added. You must have 'my' ipx in kernel or last, 2.2.8 kernel.
In older kernels ethertap is unusable for IPX (Rx is OK, but Tx does
not work). Do not forget to 'set Reply To Get Nearest Server = on'
on SCMD server... Otherwise you'll get 'No server' error :-(
- VANA: nwdpvalues now does something reasonable (not too much, but does)
ncpfs-2.2.0.13 -> ncpfs-2.2.0.14
- Philippe Anderson <philippe_anderson@ste.scitex.com>: nsend to groups,
'From ....' appended to message
- VANA: when I was editing nsend, I did also:
handles connections > 255 (thus some new nwcalls stuff added)
sends to connection specified by number or object ID
handles wildcards in object name (see manpage)
- VANA: nwauth accepts '-P' password option (per user request)
- VANA: added some *.3ncp pages, installed by 'make install-dev'. I'm not
sure whether I write some formatted documentation in future, probably
only short paragraphs about each function will be enough? I wrote
code, so I do not know, what is unclear and so on...
- VANA: libncp completely localized. If you are using libncp for
programms outside ncpfs package, you must link your code with `-lintl'
from now (make install installs it) if gettext is not in libc.
Sorry. You can build ncpfs package with `--disable-nls', of course.
Shared version of libintl is not available.
- VANA: kernel symlinks stuff splitted to two options:
symlink do symlinks
extras do shared files (world readable)
ncpfs-2.2.0.12 -> ncpfs-2.2.0.13
- VANA: moved to 'configure' script
- VANA: completely fixed for glibc2.1; I tested one libc5(linux-2.0.33) and
one glibc2(linux-2.1.125) systems and it looks like that configure
does its job well, but...
- VANA: warning, library interface changed: com_err removed, ncp_request (and
others) now always return error code:
0..1023 : UNIX errno
0x8700-0x87FF : ncplib specific error
0x8800-0x88FF : local errors
0x8900-0x89FF : server errors
-256..-800 : NDS / UNICODE errors
-1..-255 : if occurs, it is bug, they should be mapped
to range 0x8900-0x89FF
NCP library version number bumped from 2/2.2.0 to 2.3/2.3.0
because of incompatible changes in function return values
- VANA: added pam_ncp_auth into package (configure --enable-pam)
- VANA: fixed NWParsePath and NWGetNSEntryInfo
ncpfs-2.2.0.11 -> ncpfs-2.2.0.12
- VANA: fixed debian bugreport #29006 - exit code for nprint
- VANA: fixed debian bugreport #30293 - man pages update
- VANA: fixed some bugreport about popen("nwsfind")
- VANA: added nwfsctrl tool
- VANA: fixed debian bugreport #33214 - missing NR_OPEN for glibc2.1
ncpfs-2.2.0.10 -> ncpfs-2.2.0.11
- VANA: mount.ncp, new option -o in ncpmount, updated manpage ncpmount(8)
- VANA: manpages moved to /usr/man, compressed; it should fix problems
on standard distributions
ncpfs-2.2.0.9 -> ncpfs-2.2.0.10
- Wolfram Pienkoss <wp@bszh.de>: NLS support
ncpfs-2.2.0.8 -> ncpfs-2.2.0.9
- Eloy A. Paris: reordered ncpmount initialization to suppress unneeded
ask for password
ncpfs-2.2.0.7 -> ncpfs-2.2.0.8
- VANA: nwfsctrl - down file server and/or open/close bindery
ncpfs-2.2.0.6 -> ncpfs-2.2.0.7
- VANA: Get connection from current directory if -S not specified on commandline.
ncpfs-2.2.0.5 -> ncpfs-2.2.0.6
- VANA: Bugfix. Username was limited to 48 chars. It is not true for NDS.
TODO: Review bindery code and limit outgoing usernames to
48 chars.
ncpfs-2.2.0.4 -> ncpfs-2.2.0.5
- VANA: it now compiles on libc5 again (undefined socklen_t in ncplib.h)
- VANA: it works (with patched Makefiles*, added missing linux/* headers and
without kernel support (i.e. only native IP and without ncpmount,
ncpumount, nwdir and nwpurge) on SGI IRIX (IRIX64 sgi 6.2 03131016
IP25). So I hope that it now works on Linux-SGI and Linux-Sparc too.
Please test and report success/failure... NDS code and NCP signatures
should work, nwpurge and nwdir probably should not... But I cannot test
kernel code because of that machine is not mine and its owner is happy
with IRIX. So I'm sorry.
* happy owner has not GNU Make on that machine... He has, fortunately,
gcc... It is impossible to compile ncpfs with IRIX's CC...
ncpfs-2.2.0.3 -> ncpfs-2.2.0.4
- VANA: more Alpha changes (sizeof(size_t) != sizeof(u_int32_t) :-( )
Many thanks go to David Woodhouse and his Alpha CPU...
- VANA: IPX support can be commented out
ncpfs-2.2.0.2 -> ncpfs-2.2.0.3
- VANA: now it works on Alpha
- VANA: changes in DS encryption code (getting rid of error -669)
ncpfs-2.2.0.1 -> ncpfs-2.2.0.2
- Milan Vandrovec <vandr@fel.cvut.cz>: nwdir tool
ncpfs-2.2.0 -> ncpfs-2.2.0.1
- Dave & VANA: new shared library numbering
- Dave & VANA: workarounds for RedHat's glibc-2.0.7
ncpfs-2.0.12.10 -> ncpfs-2.2.0
- VANA: minor cleanup
ncpfs-2.0.12.9 -> ncpfs-2.0.12.10
- VANA: you can now access NDS server without replica of its conteiner
(TODO: access to server if server has R/W replica of your account but
does not have replica of itself)
- VANA: Alpha still no go :-(
ncpfs-2.0.12.8 -> ncpfs-2.0.12.9
- Eloy A. Paris: Fixes in library code
ncpfs-2.0.12.7 -> ncpfs-2.0.12.8
- VANA: bugfix, now it works again without ipxripd
- VANA: still cleaning up, ncp_open() and NDS byte ordering
ncpfs-2.0.12.6 -> ncpfs-2.0.12.7
- VANA: bugfixes, nwpurge
ncpfs-2.0.12.5 -> ncpfs-2.0.12.6
- VANA: ncpmount supports NCP over IP (no incoming broadcast at this time)
ncpfs-2.0.12.4 -> ncpfs-2.0.12.5
- Eloy A. Paris: Makefile bugfix
ncpfs-2.0.12.3 -> ncpfs-2.0.12.4
- VANA: Bugfixes
- VANA: Alpha stage of native NCP over IP support (no kernel at this time)
ncpfs-2.0.12.2 -> ncpfs-2.0.12.3
- VANA: Major makefile changes, compile warning cleanup
ncpfs-2.0.12.1 -> ncpfs-2.0.12.2
- Eloy A. Paris <peloy@ven.ra.rockwell.com>: Makefile cleanup
- VANA: More merging sutil/ncplib.c and lib/ncplib.c, not fully functional yet
ncpfs-2.0.12 -> ncpfs-2.0.12.1
- Dave, VANA: Bindery logins for all utilities (-b)
- VANA: Specify signature level for ncpmount (-i number)
- VANA: Start of merging sutil/*lib* with lib/*lib*
ncpfs-2.0.11.19 -> ncpfs-2.0.12
- Polished for release 2.0.12
- Dave: pserver fixes, including addition of %d flag.
ncpfs-2.0.11.18 -> ncpfs-2.0.11.19
- Dave, VANA: new userspace utilities - pqstat and pqrm
ncpfs-2.0.11.17 -> ncpfs-2.0.11.18 (no userspace change)
- Dave: getwd() did not work on 2.1.x
- VANA: Volumes are now always listed lowercased on 2.1.x
ncpfs-2.0.11.16 -> ncpfs-2.0.11.17
- David Woodhouse <Dave@imladris.demon.co.uk>: Patch to pserver,
ncp_get_broadcast_message
- VANA & Dave: Cleanup for glibc, I hope that complete (xcpt. few warnings
about long int vs. u_int32_t)
ncpfs-2.0.11.15 -> ncpfs-2.0.11.16
- VANA: Removed symlink latest from archive :-)
- VANA: Added ncp_send_broadcast2
ncpfs-2.0.11.14 -> ncpfs-2.0.11.15
- VANA: Fixed bug: wrong completion code returned when login to server without
r/w replica of logged-in user
- VANA: It is possible to disable NFS and/or OS2 namespace support in mount
ncpfs-2.0.11.13 -> ncpfs-2.0.11.14
- VANA: One source for 2.0 and 2.1 kernels
- Christian Groessler <cpg@aladdin.de>: Added strong mounts
ncpfs-2.0.11.12 -> ncpfs-2.0.11.13
- Arne: Signatures added to ncpfs-nds-0.06
- VANA: Synchronized sources with Arne
ncpfs-2.0.11.11 -> ncpfs-2.0.11.12
- VANA: Fixed compilation error if compiled against kernel without signatures
even if SIGNATURES = 0 set
ncpfs-2.0.11.10 -> ncpfs-2.0.11.11
- VANA: Fixed segfault on invalid user name in NDS mode
- VANA: Added locking features (through ncpfs-specific ioctl(2))
ncpfs-2.0.11.9 -> ncpfs-2.0.11.10
- VANA: Synchronized with nds-patches-0.05 from Arne de Bruijn <Arne@knoware.nl>
ncpfs-2.0.11.8 -> ncpfs-2.0.11.9
- VANA: Added call to lock connection (dropped in 2.0.11.7, sorry)
ncpfs-2.0.11.7 -> ncpfs-2.0.11.8
- VANA: Can be correctly compiled without signatures support in kernel (I hope)
- VANA: Fix in kernel in setting task number
ncpfs-2.0.11.6 -> ncpfs-2.0.11.7
- VANA: Codebase synchronized with Arne de Bruijn <Arne@knoware.nl>
- ARNE: Gracelogins on NDS
- VANA: Removed some (one) compilation warnings
ncpfs-2.0.11.5 -> ncpfs-2.0.11.6
- VANA: Support for NDS login accross servers
ncpfs-2.0.11.4 -> ncpfs-2.0.11.5
- VANA: Cleanup in ndscrypt
- VANA: Bugfix: empty password for NDS login is now allowed & works
ncpfs-2.0.11.3 -> ncpfs-2.0.11.4
- Enabled some buffer cleaning
- Added parameter "-b" to ncpmount for bindery login to NDS server
ncpfs-2.0.11.2 -> ncpfs-2.0.11.3
- Added NDS support by Arne de Bruijn <Arne@knoware.nl>; small fixes in code;
moved sections to do same things as DOS login does.
ncpfs-2.0.11.1 -> ncpfs-2.0.11.2
- VANA: Fixed that some error conditions in LOGIN should start packet signatures
ncpfs-2.0.11 -> ncpfs-2.0.11.1
- VANA: Added packet signatures by Arne de Bruijn <Arne@knoware.nl>
ncpfs-2.0.10 -> ncpfs-2.0.11
- Added Martin's patch to Linux 2.0.30 to get rid of the lockups.
MANY thanks to Martin Stover!
ncpfs-2.0.9 -> ncpfs-2.0.10
- Made nwtrustee hopefully work ;-)
- Made the manpages a little bit prettier
ncpfs-2.0.8 -> ncpfs-2.0.9
- Added patches directory
- Added nwvolinfo and nwtrustee. Thanks to Jacek Stepniewski <cunio@gazeta.pl>
- nwpasswd can change other's passwords. Thanks to Martin Stover.
ncpfs-2.0.7 -> ncpfs-2.0.8
- Fixed util/Makefile for easier optimization handling. Thanks to Rik
Faith <faith@cs.unc.edu> for this one
- added nwfstime. You can now set the file server date and time from Linux.
- added the contrib directory. Feel free to add more!
ncpfs-2.0.6 -> ncpfs-2.0.7
- Hopefully removed one security problem in ncpumount.
- Added command line flag to pserver.c
- Heavily reconstructed ncpfs utils. Created the lib/ dir.
- Separated the uid utils in sutil
- Add nwsfind to enable users to use ncpfs safely without setting
the utils setuid root.
ncpfs-2.0.5 -> ncpfs-2.0.6
- Added a short description of a problem that I need help with to the
file BUGS. If you know a bit of the linux networking code, please
take a look at it. Thanks a lot.
- Added canonic output format to nwpbvalues and the command nwbpset. I
would like to invite you to help building capable bindery management
utilities. For little examples, look at the manual page of nwbpset.
- Added some values to ipxparse. Those interested in NDS should take a
look at it. It's really not much, but maybe it's a beginning.
ncpfs-2.0.4 -> ncpfs-2.0.5
- Removed another bug in nwbpvalues.
- Cleaned up man/Makefile
- Some manpage typos fixed. Thanks to Jim Van Zandt
<jrv@mbunix.mitre.org>
- added nwrights
ncpfs-2.0.3 -> ncpfs-2.0.4
- Changed name of npasswd to nwpasswd, as npasswd collides with
RedHat. Thanks to Mike Slater <mslater@nfinity.com> for pointing me
at this one.
- Put '\r\n' into nwmsg, because sometimes it did not print
correctly. Thanks to Petr Vandrovec Ing. VTEI
<VANDROVE@vcnet.vc.cvut.cz> for this one.
- Improved the ELF Makefile for ELF support. Thanks to Uwe Bonnes
<bon@elektron.ikp.physik.th-darmstadt.de>.
- Removed a very embarassing bug in nwpvalues :-(.
- Added a some routines to nwbpvalues.
ncpfs-2.0.2 -> ncpfs-2.0.3
- Removed the kernel-2.0 directory. Linus took the patch into 2.0.8.
So, if you want to use long file name support, upgrade to Linux
kernel version 2.0.8.
- Applied the lfn patch to the kernel-1.2 module with some light
testing. If you experience problems, tell it to me, and use the
ncpfs-2.0.2 kernel module, or upgrade to Linux 2.0.8.
- Added unencrypted login when no crypt key is returned.
- Hopefully improved error messages a bit
- Added some values to ipxparse
- For ELF systems, moved ncplib to /lib/libncp.so.1.x. This saves
about 1MB of disk space. As ncpfs grows, the saving will
increase. Please look at the Makefile to enable this.
- Enhanced nwfsinfo a bit. (Even with a manpage!)
- Added nwuserlist.
ncpfs-2.0.1 -> ncpfs-2.0.2
- Added some values to ipxparse.
- Added a patch against 2.0.7 for long file names support. I did not
apply this change to the 1.2-module. Please upgrade to 2.0.7 if you
want to use long file names.
- nwbpvalues can print ITEM properties
ncpfs-2.0.0 -> ncpfs-2.0.1
- Added some values to ipxparse.
- Added the little bindery utilities. Maybe someone has the time to
write a shellscript named 'nwadduser' ?
- Fixed a bug that made the __255 message reappear. Many thanks to
Guntram Blom for his detailed bug report.
- Fixed a bug that made ncpfs incompatible with W95's server
capabilities. Thanks to Tomasz Babczynski
<faster@dino.ict.pwr.wroc.pl> for this one.
ncpfs-0.24 -> ncpfs-2.0.0
- Changed the numbering scheme :-).
- Added npasswd. Many thanks to Guntram Blom for his work!
- Hopefully improved error messages a bit
- Hopefully made slist a bit more robust
ncpfs-0.23 -> ncpfs-0.24
- Fixed a bug that made it impossible to umount a filesystem after you
tried 'mkdir .' or 'mkdir ..'.
- Fixed a bad race condition when opening files.
- Made the default timeout values more robust.
ncpfs-0.22 -> ncpfs-0.23
- Fixed a memory allocation problem in nwmsg.c. Thanks to
Andrew Ross <anr1001@hermes.cam.ac.uk>
- slist hopefully does not ask for a password anymore.
- cleaned up error messages a bit.
- ncpmount now calls modprobe instead of insmod.
ncpfs-0.21 -> ncpfs-0.22
- removed a bad race condition in kernel-1.2/src/dir.c.
- handle 0x9999-responses from the ncp server correctly.
- Bindery functions in ncplib.c by Brian G. Reid (breid@tim.com)
- set blocksize to 512 to satisfy 'du -k'
ncpfs-0.20 -> ncpfs-0.21
- Included two bugfixes in ncplib.c found by Jeff Buhrt
<buhrt@iquest.net>.
- Included a bugfix in kernel code that could only show for servers
that do not support namespace calls. I should have tried ncpfs
against lwared... Thanks to Neil Turton <ndt1001@chu.cam.ac.uk> for
this fix.
ncpfs-0.19 -> ncpfs-0.20
- Changed the home site for ncpfs from linux01.gwdg.de:/pub/ncpfs
to ftp.gwdg.de:/pub/linux/misc/ncpfs. linux01 will remain available,
but we would like to reduce the load on that machine. Sites
mirroring linux01 please redirect your mirror software to
ftp.gwdg.de. Thanks.
- Removed a bug in ncplib.c that made slist require a full
login. Thanks to Neil Turton <ndt1001@chu.cam.ac.uk> for the hint.
- The first real user contribution: ncopy by Brian G. Reid
(breid@tim.com) and Tom C. Henderson (thenderson@tim.com). Many
thanks to you! If you find bugs in ncopy, tell them, not me ;-)
- Handle expired passwords. Thanks to "Mathew Lim" <M.Lim@sp.ac.sg>
for the hint.
ncpfs-0.18 -> ncpfs-0.19
- hacked around in ncplib.[ch] quite heavily.
- SAP handling in ipxparse.c. Thanks to Jeff Buhrt <buhrt@iquest.net>
- Changed error handling to use the com_err library. This should
eventually provide better error messages, because it's now much
easier to define nice messages.
- If no server is active, report this correctly
- added nsend
ncpfs-0.17 -> ncpfs-0.18
- Another attempt at solving the problem that -n is not working.
- Forgot nprint in 0.17 util/Makefile.
- nprint left connections open when it fails
- added options -r and -t to ncpmount to tune ncpfs connections.
ncpfs-0.16 -> ncpfs-0.17
- Changed the name of fsinfo to nwfsinfo, to avoid a name clash with
the X windows utility. Thanks to Henning Brockfeld
<Henning.Brockfeld@lrz.uni-muenchen.de> for this hint. (still
waiting for your scripts.. :-))
- made nwmsg available. This enables you to receive NetWare user
broadcast messages. Please note that you need at least kernel 1.3.68
for this feature.
- pserver now prints debugging output via syslog().
- Included ipxdump, a nice little utility, that has helped some
people.
- And now the big one: you can re-export ncpfs-mounted directories
with nfsd! You have to mount single volumes by specifying -V volume
to ncpmount, and call nfsd and mountd with the option --re-export.
See the manual page of ncpmount for more information. Please note
that I will send Linus the required patch on 1. March 1996, so you
will have to use kernel 1.2.13 or wait at least for 1.3.70.
ncpfs-0.15 -> ncpfs-0.16
- Included ipx-1.0, made available by Greg Page <greg@caldera.com>,
Caldera
- Made -n work for password-less accounts. Thanks to Alexander Jolk
<jolk@ap-pc513b.physik.uni-karlsruhe.de>.
- Fixed the kerneld support.
- Fixed the NetWare 4.1 problem. Many thanks to
Chatchai JANTARAPRIM <chat@ratree.psu.ac.th> and
hitesh.soneji@industry.net for their patience.
ncpfs-0.14 -> ncpfs-0.15
- A bug fixed that made normal mounting impossible. It was too late
yesterday. Sorry
- Manpage for pserver.c
ncpfs-0.13 -> ncpfs-0.14
- Improvements of manual pages by B. Galliart <bgallia@luc.edu> and
Terry Dawson <terry@perf.no.itg.telecom.com.au>
- fsinfo
- pserver.c. Please see this as ALPHA software. There is no
documentation, and it is not tested enough. But it might be useful for
you.
ncpfs-0.12 -> ncpfs-0.13
- support for automatic loading of ncpfs.o by kerneld.
Thanks to Steven N. Hirsch <hirsch@emba.uvm.edu>.
- A subtle problem in the read routines has been removed by Uwe Bonnes
<bon@elektron.ikp.physik.th-darmstadt.de>. Thanks a lot.

67
ConfigFile Normal file
View File

@@ -0,0 +1,67 @@
Configuration files for ncpfs
=============================
There are two configuration files for ncpfs, local and global. Local
configuration file lives in ${HOME}/.nwclient, global one lives in
/etc/ncpfs.conf. File is in UTF8 encoding.
Local configuration file is split into two parts - non-sectioned and sectioned.
Non-sectioned contains old contents of .nwclient file - "server/user password"
triplets (eventually with user or password ommited).
Sectioned part (and whole /etc/ncpfs.conf file) contains couple of sections.
Each section is started with "[Section Name]" line, lines in section are in
format "Key Name = value". If value contains spaces, you must either prefix
spaces with backslash "\" or enclose value into quotes (') or double quotes
("). If value contains backslash "\", you must prefix it with backslash. If
value in quotes contains quote, you must prefix it with backslash. Code knows
two special values, "\n" for LF and "\r" for CR - although currently there is
no reason for embed them into values.
Everything after closing bracket on "[Section Name]" line is ignored.
Everything after value on "Key Name = value" line is ignored too.
Following three examples mean same thing:
Strange Value = Strange\ Value\ "1
Strange Value = "Strange Value \"1"
Strange Value = 'Strange Value "1'
Currently known configuration options:
[Requester]
Local Charset = <charset name>
Charset name is in internal system form, for glibc 2.1
it is codepage name with two trailing slashes ("//").
On non-iconv systems (such as libc5/libc6.0) you can
use only "WCHAR_T//", "ISO-8859-1//" and "UTF-8//"
charsets.
On glibc2.1 systems, you must add line
"alias WCHAR_T// INTERNAL" at the end of
"/usr/lib/gconv/gconv-modules" file. Without this,
iconv will not work on little-endian machines, such
as ix86.
On glibc2.2 systems you can use any encoding reported
by "iconv -l".
If you'll use encoding which can contain zero bytes
in the middle of string (such as UTF-16, UCS2 or
UCS4), supplied utilities may not work correctly.
Also, output of utilities is based on localization
files and not on selected codepage.
Default: "ISO-8859-1//"
Default Tree Name = <tree name>
Tree name is specified without trailing underscores.
Default: no default, system will complain when trying to use
default tree name
Default Name Context = <default name context>
Default name context is specified relative to [Root].
Default: "[Root]"
[Tree <tree name>]
Default Name Context = <default name context>
Default name context is specified relative to [Root].
Default: value specified for Default Name Context in
[Requester] section.

75
FAQ Normal file
View File

@@ -0,0 +1,75 @@
There is certainly not enough material to call this an FAQ, but some
questions reach me regularly. Probably the documentation is not clear
enough.
-------------------------------------------------------------------------------
Q: The ncpfs utilities like slist or ncpmount tell me that they can
not find a server, although I'm sure there are servers on my
net. What's wrong?
You probably used
ipx_configure --auto_interface=on --auto_primary=on
and you have Windows (95?) workstations on your network. Windows 95
makes Linux configure IPX interfaces for non-existent frame types. To
solve this problem, you have to configure your IPX interface manually
with the command
ipx_interface add -p <device> <frame>
For <device> use eth0, eth1 or whatever you network adapter is
called. The value for <frame> must match the frame type used on your
network. Possible values are 802.2, 802.3, SNAP and EtherII.
-------------------------------------------------------------------------------
Q: I have difficulties with NetWare 4.1. What can I do?
To be honest, I do not really know. Currently my only test equipment
is a NetWare 3.11 server. You should make your 4.1 Server as
3.x-compatible as it can be. As I do not know 4.1, you are on your own
doing this.
A promising hint that has already helped some people is to switch off
packet signatures on the 4.1 server, as ncpfs does not support them.
Note: ncpfs, as of 2.0.12, and kernel 2.1.89, does now support packet
signatures.
Note2: My test environment currently consist of couple of NW4.11/NW5 servers.
I have no 3.x servers around anymore.
-------------------------------------------------------------------------------
Q: When I re-export ncpfs-mounted directories via nfs, I get messages like
'pwd: cannot get current directory', and other strange things happen to
the nfs clients. What's wrong?
When you want to export a directory via NFS, you have to do two things:
- You have to invoke mountd and nfsd with the option --re-export. On my
computer, both are invoked at system startup from the file
/etc/rc.d/rc.inet2.
- You can not export a complete NetWare server hierarchy with all volumes
under a single mount point. You have to mount a single server volume to
make it re-exportable. Invoke ncpmount with the option -V volume to do
this.
-------------------------------------------------------------------------------
Q: I cannot login into server with these utilities. It was possible with an
older version.
A: You are probably connecting into Netware 4.x or IntraNetware. If you want a
temporary workaround, add the option "-b" to the ncpmount commandline.
For the future you should determine your Directory Services user name and
use that instead of your bindery name.
-------------------------------------------------------------------------------
Q: I found bug. What I should do?
A: Report it to "Petr Vandrovec" <vandrove@vc.cvut.cz>.

196
INSTALL Normal file
View File

@@ -0,0 +1,196 @@
Compiling and installing ncpfs
==============================
0. Quick start
--------------
Run "./configure", then "make install install-dev" and wait for successfull
completion. You can omit "install-dev" if you do not plan to compile other
libncp based programs, such as apache NDS authorization module.
1. Configuration
----------------
Except usual configuration options, you can add some of these options to
configure commandline:
--enable-warnings Enable very verbose build warnings. Please do not
report these warnings as a bugs. They are all
intentionaly left in sources. Disabled by default.
--enable-pam Build PAM NCP authentication module. You must have
installed PAM headers in your standard include
directories. By default PAM directory is
automatically determined (in /lib/security,
/usr/lib/security, or /usr/local/lib/security) from
place of already installed modules. You can override
this with adding path after enable-pam. For example:
--enable-pam=/lib/pam/modules
--disable-ipx-tools Disables building of ipx tools. By default tools are
enabled. Use this only if you are using some else
ipx-tools package or if your system does not support
IPX.
--disable-udp Disable NCP/UDP and NCP/TCP. By default they are
enabled. Use this only for systems which do not
have IP at all. Otherwise you'll get very crippled
version of ncpfs - with full version you can access
servers anywhere on the Internet if there is no
firewall on port 524...
--disable-ipx Disable NCP/IPX. By default IPX is enabled. Do not
disable IPX unless your system does not support
IPX at all.
--disable-signatures Disable packet signing code. By default signatures
are enabled. Do not disable this, connecting without
signatures is very dangerous.
--disable-nds Disable NDS support. By default NDS is enabled.
Disable it only if you are not sure that you can
use RSA for authorization purposes. Library produced
with this option is very limited in functionality
and 3rd party programs may not work with your
library.
--disable-mount-v2 Disable support for Linux 2.0. Support is enabled
by default and you should not disable it.
--disable-mount-v3 Disable support for Linux 2.2 and Linux 2.4. Support
is enabled by default and you should not disable it.
--disable-kernel Do not use kernel interface. Use this only if there
is no ncpfs for your kernel (such as on AIX or IRIX).
--disable-reentrant Do not compile threading support into library. By
default it is autodetected - if library compiled
with pthreads can run without them, support is enabled.
Disable this only if you are 100% sure that you'll not
use libncp in any multithreaded application, or if
your system does not support pthreads at all.
--disable-versions Do not use version symbols in library. By default
enabled if your system supports it. If you'll disable
it, you may have troubles with binary compatibility
when upgrading to newer versions.
--disable-function-sections Do not use -ffunction-sections and
-fdata-sections for static libraries. Enabled whenever
binutils can do this. If you disable this, all
statically linked programs are larger than they
really need.
--enable-trace Enable trace of ncp calls. Do not enable it unless
you are debugging ncpfs. Each libncp call then spews
tons of data to stdout/stderr.
--disable-nls Do not use Native Language Support. See ABOUT-NLS for
details.
--with-included-gettext Use the GNU gettext library included here. See
ABOUT-NLS for details.
--with-catgets Use catgets functions if available. See ABOUT-NLS for
details.
2. Compilation
--------------
Just type "make" in top of directory structure. You need GNU make and GNU gcc.
3. Installation
---------------
As root, type "make install" to install shared library and utilities. If you
plan to compile other programs for ncpfs, also run "make install-dev". This
installs ncpfs headers and static library.
4. Runtime
----------
4.1. Configuration
------------------
You can configure system behavior with global configuration file,
/etc/ncpfs.conf, and local configuration files, ~/.nwclient. See ConfigFile
for details about contents of these files.
4.2. Limitations
----------------
4.2.1. Available transports
--------------------------
Temporary connections always support all available transports you
compiled.
Persistent (ncpmount) connection capabilities are constrained by your
kernel. 2.0.x kernels support only NCP over IPX, 2.[123].x kernels support
NCP over IPX or UDP, and 2.4.x kernels support NCP over any of IPX, UDP or
TCP.
4.2.2. NDS support
------------------
For full NDS support (background authentication) you must enable 'NDS
authentication support' in kernel configuration. This option is available
only in 2.[34].x kernels. In 2.2.x kernels you can make option available
by simple uncommenting this option in linux/fs/ncpfs/Config.in (option is
commented out because of at the time 2.2.0 was released there was no
userspace support). If you have older kernel, you should upgrade if you
need such support.
4.2.3. Internationalization support
-----------------------------------
Currently only available localizations are English, Germany and Czech.
4.2.4. Codepages support
------------------------
Codepage converting support is limited by underlying iconv implementation.
If no usable iconv is found, built in support for ISO-8859-1 and UTF-8
is used.
NOTE: glibc2.1 implementation is treated as unusable on little endian
machines, unless you add "alias WCHAR_T// INTERNAL" at the end of
"/usr/lib/gconv/gconv-modules" file. Without this alias wchar_t format
used by wc* function group is unavailable to iconv. Clueless programmers.
glibc2.2 provides WCHAR_T encoding, so you should upgrade if you need codepage
not listed above.
5. Something went wrong
-----------------------
If things do not work as expected, make sure that you installed ncpfs
correctly. By default, ncp tools are installed into /usr/local, while
distributions put them into /usr. So you can end up with new tool using
old shared library. And it does not work...
Also, look into BUGS, FAQ, README and README.NDS. If you'll not find
answer here, try asking on linware@sh.cvut.cz list (listserv@sh.cvut.cz).
If you are sure that problem is in ncpfs implementation, send me bugreport
or patch (unified diff preferred).
--
Trhovy Stepanov, March 10th, 2001
Petr Vandrovec <vandrove@vc.cvut.cz>

60
Make.rules.in Normal file
View File

@@ -0,0 +1,60 @@
# ########################################################
INSTALL := @INSTALL@
INSTALL_DATA := @INSTALL_DATA@
CC := @CC@
prefix := @prefix@
exec_prefix := @exec_prefix@
bindir := @bindir@
sbindir := @sbindir@
libsodir := @libdir@
#libsodir := /lib
libadir := @libdir@
mandir := @mandir@
srcdir := @srcdir@
includedir := @includedir@
sysconfdir := @sysconfdir@
localedir := @localedir@
VPATH = @srcdir@
NDS_SUPPORT := @NDS_SUPPORT@
SIGNATURES := @SIGNATURES@
PACKAGE := @PACKAGE_NAME@
VERSION := @PACKAGE_VERSION@
CC_WARNINGS := @CC_WARNINGS@
ifeq ($(CC_WARNINGS),yes)
#CWARN := -Wall -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Waggregate-return -Wnested-externs -Winline -Wbad-function-cast -W #-Werror #-Wwrite-strings -Wtraditional -Wshadow
#CWARN := -Wall -Wstrict-prototypes -Wcast-qual -Waggregate-return -Wnested-externs -Winline -Wbad-function-cast -W #-Wpointer-arith #-Werror #-Wwrite-strings -Wtraditional -Wshadow
CWARN := -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-noreturn -Wredundant-decls -Wstrict-prototypes -Wcast-qual -Waggregate-return -Wnested-externs -Winline -Wbad-function-cast -W #-Wpointer-arith #-Werror #-Wwrite-strings -Wtraditional -Wshadow
else
CWARN :=
endif
# ########################################################
INCLUDES := -I$(top_srcdir)/include -I$(top_srcdir)/intl -I$(top_builddir)/include
CFLAGS_OPTIONS += @CFLAGS@
CFLAGS_OPTIONS += $(CWARN)
CFLAGS_DEFINES := -DN_PLAT_LINUX -DLOCALEDIR=\"${localedir}\" -DNCPFS_VERSION=\"${VERSION}\" -DNCPFS_PACKAGE=\"${PACKAGE}\"
CCFLAGS := $(CFLAGS_DEFINES) $(CFLAGS_OPTIONS) $(INCLUDES)
# If your system is ELF, either also do a 'make install', or append the util/
# directory where the dynamic library resides to the environment
# variable LD_LIBRARY_PATH
HAVE_ELF := @ELF_TARGET@
VERSION_SOLIB := 2.3.0
VERSION_SONAME := 2.3
NEED_DEP := yes
ifneq ($(MAKECMDGOALS),)
ifeq ($(filter-out clean distclean mrproper, $(MAKECMDGOALS)),)
NEED_DEP := no
endif
endif

View File

@@ -1,85 +0,0 @@
#
# Makefile for the linux ncp-filesystem routines.
#
INCLUDES = -I/usr/src/linux/include
CFLAGS = -Wall -Wstrict-prototypes -O2 -DMODULE -fomit-frame-pointer \
$(INCLUDES) \
# -DDEBUG_NCP=2 -DDEBUG_NCP_MALLOC
# -DDEBUG_NCP_MALLOC
CC = gcc -D__KERNEL__ -I.
AS = as
ARCH = i386
.c.s:
$(CC) $(CFLAGS) -S $<
.c.o:
$(CC) $(CFLAGS) -c $<
.s.o:
$(AS) -o $*.o $<
OBJS= dir.o inode.o file.o sock.o ioctl.o ncplib.o
all: ncpfs.o ncpmount ncptest
ncpfs.o: $(OBJS)
$(LD) -r -o ncpfs.o $(OBJS)
ncplib.o: ncplib.c ncplib.h
$(CC) $(CFLAGS) -finline-functions -c $<
ncpmount: ncpmount.o ncplib_user.o nwcrypt.o
gcc -o ncpmount ncpmount.o ncplib_user.o nwcrypt.o
ncpmount.o: ncpmount.c
gcc -c ncpmount.c -Wall -I. -g
ncptest: ncptest.o ncplib_user.o nwcrypt.o
gcc -o ncptest ncptest.o ncplib_user.o nwcrypt.o
ncptest.o: ncptest.c
gcc -c ncptest.c -Wall -I. -g
ncplib_user.o: ncplib_user.c ncplib_user.h
gcc -c ncplib_user.c -Wall -I. -g
nwcrypt.o: nwcrypt.c
gcc -c -O2 -Wall nwcrypt.c
dep:
$(CPP) -M $(INCLUDES) *.c > .depend
clean:
rm -f *.o *~
realclean: clean
rm -f ncpmount ncptest .depend $(DISTFILE) *.out
modules: ncpfs.o
SRCPATH=$(shell pwd)
SRCDIR=$(shell basename $(SRCPATH))
DISTFILE=$(SRCDIR).tgz
BACKUPFILE=ncpfs01.tgz
HOME=/home/me
backup:
(rm -f $(DISTFILE); cd ..; tar cvf - $(SRCDIR) | gzip -1 \
> $(HOME)/tarz/backup/$(BACKUPFILE))
(cd $(HOME)/tarz/backup; ls -l $(BACKUPFILE); mcopy $(BACKUPFILE) a:)
dist: realclean
rm -fr mnt
(cd ..; \
tar cvf - $(SRCDIR) | \
gzip -9 > $(DISTFILE); \
mv $(DISTFILE) $(SRCDIR))
#
# include a dependency file if one exists
#
ifeq (.depend,$(wildcard .depend))
include .depend
endif

98
Makefile.in Normal file
View File

@@ -0,0 +1,98 @@
#
# Makefile for the linux ncp-filesystem routines.
#
top_srcdir = @top_srcdir@
top_builddir = .
include ${top_builddir}/Make.rules
.PHONY : all dep install install-dev clean mrproper distclean
.PHONY : tags TAGS clean_me dist tgz
BASE_SUBDIRS := lib sutil util man @ADDON_SUBDIRS@
EXECSUBDIRS = intl @POSUB@ $(BASE_SUBDIRS)
SUBDIRS := $(EXECSUBDIRS)
INSTALL_SUBDIRS := $(SUBDIRS)
INSTALL_DEV_SUBDIRS := lib sutil util man @ADDON_DEV_SUBDIRS@
CLEAN_SUBDIRS := lib sutil util man intl @POSUB@ ipxdump ipx-1.0 ipx-1.0/Samples contrib/testing \
contrib/testing/pp contrib/tests contrib/libtrace contrib/nss64 \
contrib/tcl-utils contrib/php contrib/pam
export INCLUDES VERSION HAVE_ELF CFLAGS
all:
set -e; for i in $(EXECSUBDIRS); do make -C $$i all; done
@if [ "$(HAVE_ELF)" = yes ] ;\
then \
echo ; echo ; echo ;\
echo Please add \'`pwd`/lib\' to the environment ; \
echo variable LD_LIBRARY_PATH by executing ; \
echo ;\
echo export LD_LIBRARY_PATH=\"\$$LD_LIBRARY_PATH:`pwd`/lib\" ; \
echo ;\
echo or do a \'make install\'. ;\
echo ;\
fi
dep:
for i in $(SUBDIRS); do make -C $$i dep; done
tags: TAGS
TAGS:
etags --lang=c $$(find include lib sutil util ipx-1.0 ipxdump '*.[ch]')
install:
for i in $(INSTALL_SUBDIRS); do make -C $$i install; done
install-dev:
for i in $(INSTALL_DEV_SUBDIRS); do make -C $$i install-dev; done
clean_me:
rm -f `find -name '*.out'`
rm -f `find -name '*~'`
rm -f *.tgz
clean: clean_me
for i in $(CLEAN_SUBDIRS); do make -C $$i clean; done
mrproper: clean_me
for i in $(CLEAN_SUBDIRS); do make -C $$i mrproper; done
distclean:
for i in $(CLEAN_SUBDIRS); do [ -f $$i/Makefile ] && make -C $$i distclean; done
rm -f contrib/pam/Makefile contrib/tknwmsg/Makefile
rm -f contrib/testing/pp/Makefile contrib/testing/Makefile
rm -f contrib/tcl-utils/Makefile contrib/tests/Makefile
rm -f contrib/php/.deps contrib/php/Makefile.in contrib/php/libs.mk contrib/php/config.nice contrib/php/conftest*
rm -rf contrib/php/modules
rm -f ipx-1.0/Samples/Makefile ipx-1.0/Makefile
rm -f ipxdump/Makefile
rm -f intl/Makefile po/Makefile po/Makefile.in
rm -f lib/Makefile man/Makefile sutil/Makefile util/Makefile
rm -f include/config.h
rm -f include/ncp/ext/socket.h include/ncp/ext/stdint.h
rm -f include/ncp/kernel/fs.h
rm -f include/ncp/kernel/if.h include/ncp/kernel/route.h include/ncp/kernel/types.h
rm -f include/ncp/kernel/ipx.h
rm -f include/ncp/nwnet.h
rm -f config.cache config.log config.status
rm -f Make.rules
rm -f Makefile
SRCPATH=$(shell pwd)
SRCDIR=$(shell basename $(SRCPATH))
DISTFILE=$(SRCDIR).tgz
dist: tgz
make dep
make all
tgz:
indent -kr -i8 `find . -name '*.[ch]'`
make mrproper
(cd ..; \
tar cvf - $(SRCDIR) | \
gzip -9 > $(DISTFILE); \
mv $(DISTFILE) $(SRCDIR))

41
Performance.txt Normal file
View File

@@ -0,0 +1,41 @@
Author: Roumen Petrov (RYP) 7 jul 1999
A. I change old "PACKAL" like style for put data into packet to "C" style.
I added only for test purposes this function:
/* ------------------------------------ */
test (struct ncp_conn *_conn,
__u8 _dir_handle, const char *_name,
__u32 _object_id, __u16 _rights, __u16 _rights_mask)
{
long result;
ncp_init_request_s(_conn, 12);
ncp_add_byte(_conn, 0); /*??? name space */
ncp_add_byte(_conn, 0); /*??? */
ncp_add_word_lh(_conn, 0x8000); /*??? search attribs */
ncp_add_word_lh(_conn, _rights_mask); /* lh or hl ? */
ncp_add_byte(_conn, 1); /*??? */
ncp_add_byte(_conn, 0); /*??? */
ncp_add_byte(_conn, _dir_handle);
ncp_add_dword_lh(_conn, 0x00000000); /* lh or hl ? */
ncp_add_pstring2(_conn, _name, 299);
ncp_add_dword_hl(_conn, _object_id);
ncp_add_word_lh(_conn, _rights);
/* result = ncp_request(_conn, 87); */
ncp_unlock_conn(_conn);
return result;
}
/* ------------------------------------ */
into ../lib/ncplib.c in version 2.2.0. Then in a loop of
1000 * 10000 times I call this function and result is 221 [sec] to
154 [sec] over i486(120 Mhz).
In new version time for fill of packet is only 69.68% of time of old version.
B. I renamed old function ncp_add_XXX to assert_ncp_add_XXX and
make new ncp_add_XXX without call to assert_conn_locked(....).

125
README
View File

@@ -1,26 +1,79 @@
This is version 0.5 of ncpfs, a free NetWare client for Linux. For me
it works with 1.3.39, although this version has severe problems with
the socket layer. Your connection will block after you have sent 64k
of requests to the server. Alan Cox told me he would like to have that
fixed in 1.3.42 or so.
This is ncpfs, a free NetWare client filesystem for Linux. Besides
some little utilities it also contains nprint, which enables you to
print on NetWare print queues. The opposite side, pserver, is also
provided.
I know that this piece of software is VERY incomplete, I have to
apologize for that. But I thought I should make it publically
available, because I have tried to ask several people about the legal
status of the code. I did not get very satisfying answers. So I publish
ncpfs to open it for criticism. If nobody complains, I will go on
working.
ncpfs works with NetWare versions 3.x and following. It does NOT work
with NetWare version 2.x. Some of the NetWare look-alikes, such as
CD-ROM servers WinNT 3.51 Server are also NOT supported. This
restriction comes from the fact that ncpfs relies heavily on the name
space facilities NetWare supports since version 3. When you want to
mount volumes that have been exported by mars_nwe, you have to
activate the name space calls in mars_nwe's config.h file, although
probably it's more clever to use nfs between two Linux machines.
To install ncpfs, just type 'make', 'insmod ncpfs.o' and then
'ncpmount server mount-point'.
The user-space utilities such as nprint and the bindery utils should
work with all versions of NetWare.
Please note that your IPX system has to be configured correctly. There
has to be a route to the internal network of your server. Please see
the file start_ipx for an example.
INSTALLATION
Before you start the installation, make sure that your kernel has IPX
support compiled in. When 'make config' asks you for
The IPX protocol (CONFIG_IPX) [N/y/m/?]
simply answer 'y' or 'm'. Probably you do not need the full internal net
that you are asked for next.
Run 'configure', 'make' and, as root, 'make install'. That's all.
Before installing new version of ncpfs, you should stop all users of
old version, to release libncp.so from memory. Run as root:
umount -v -a -tncpfs
Command above unmounts all your ncpfs mounted volumes. Of course,
it is not necessary if you agree that disk space occupied by old
libncp.so will be released after reboot and that currently mounted
shares will continue using old libncp.so until unmount.
See shell script file "contrib/scripts/rc.ipxnet" for other details.
HELP
In the meantime my mail volume has grown considerably, so the response
time might be better at the LinWare mailing list than at my personal
email address. You can mail to and/or subscribe to the LinWare mailing
list:
Topics for the list:
- discussing LinWare server, its features, installation problems and bugs
- using IPX protocol under Linux
- IPX routing and router daemons under Linux
- mars_nwe
- ncpfs
You can subscribe to the list by sending the command "add linware" in
the mail message body to address: "listserv@sh.cvut.cz". Your
postings should be sent to: "linware@sh.cvut.cz".
USING NCPFS
Please note that your IPX system has to be configured correctly. If
you want to take the 'Plug-and-Play' route, you can simply say
'ipx_configure --auto_interface=on --auto_primary=on'. If ncpmount
does not work immediately, you should wait for about 1 minute and try
again. In that period, an IPX packet should have passed by and your
network interface should have configured itself automatically.
If all that does not work and you want to do the configuration by
hand, note that there has to be a route to the internal network of
your server. Please see the file util/start_ipx for an example.
I use tools written by Greg Page, Caldera. I hope I did not do too
much harm to their business. For your convenience I included the file
ipx.tar made available by Caldera.
much harm to their business. For your convenience I included the
contents of the file ipx.tar made available by Caldera.
My main source of information is a book written in german by Manfred
Hill and Ralf Zessin, "Netzwerkprogrammierung in C", IWT Verlag GmbH,
@@ -30,7 +83,7 @@ programming. If you know about the concepts and possibilities of NCP,
Ralph Brown's interrupt list becomes much more readable. It's much
easier to find undocumented information if you know what to look for!
For the curious: the file ncplib_user.[ch] is a library that makes it
For the curious: the files ncplib.[ch] are a library that makes it
possible to send NCP requests to the server over a mounted
directory. I use it to keep the encryption stuff out of the kernel by
logging in from user space. Look at the file ncptest.c for other
@@ -40,6 +93,23 @@ free NetWare API for Linux! I would be happy to receive your comments
on this.
THANKS
I do not want to leave those unmentioned, who have helped me with
ncpfs.
The most enthusiastic user and tester is certainly Uwe Bonnes
<bon@elektron.ikp.physik.th-darmstadt.de>. So far he's the only one
who has contributed something, namely manpages and corrections to
existing manpages.
Ales Dyrak has written lwared, which was the initial start for ncpfs.
Alan Cox has found some bugs I would probably never have found.
Look at the file Changes for others.
LIMITATIONS (compare these with smbfs :-)
The limitations ncpfs has are the natural limitations of the NCP
@@ -48,16 +118,7 @@ limitation is the lack of uid, gid and permission information per
file. You have to assign those values once for a complete mounted
directory.
The second limitation is just as annoying as the first: You cannot
re-export a ncp-mounted directory by nfs. It is not possible because
the NFS protocol defines access to files through unique file handles,
which can be mapped to the device and inode numbers in unix NFS
servers. NCP does not have unique numbers per file, you only have the
path name. I implemented a caching scheme for inode numbers, which
gives unique inode numbers for every open file in the system. This is
just sufficient for local use of the files, because you can tell when
an inode number can be discarded. With NFS the situation is
different. You can never know when the client will access the file-id
you offered, so you would have to cache the inode numbers
indefinitely long. I think this should not be done in kernel mode, as
it would require an unlimited amount of RAM.
Have fun with ncpfs!
Volker, lendecke@namu01.gwdg.de (original author)
Petr Vandrovec, vandrove@vc.cvut.cz (current maintainer)

18
README.NDS Normal file
View File

@@ -0,0 +1,18 @@
The NDS login code uses the RSA public key cryptosystem. Because of a patent
right on this algorithm (U.S. patent #4,405,829, issued 20 Sep 1983), you
are probably not allowed to use this code in the U.S.A. and Canada, and
possibly neither in other countries. Check this before you use NDS logins!
The mpilib.c, mpilib.h, platform.h, and usuals.h in the lib/ directory are
taken from the PGP 2.3 source distribution (Copyright 1986-92 by Philip
Zimmermann), which is distributed under the GPL, as stated below.
Excerpt from pgpdoc2.txt (contained in pgp23src.zip):
"All the source code for PGP is available for free under the "Copyleft"
General Public License from the Free Software Foundation (FSF)."
For more details on the RSA patent see the pgp23src archive, or more recent
PGP packages.
Arne de Bruijn
arne@knoware.nl

587
acinclude.m4 Normal file
View File

@@ -0,0 +1,587 @@
# gettext.m4 serial 17 (gettext-0.11.5)
dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
dnl This file is free software, distributed under the terms of the GNU
dnl General Public License. As a special exception to the GNU General
dnl Public License, this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.
dnl
dnl This file can can be used in projects which are not available under
dnl the GNU General Public License or the GNU Library General Public
dnl License but which still want to provide support for the GNU gettext
dnl functionality.
dnl Please note that the actual code of the GNU gettext library is covered
dnl by the GNU Library General Public License, and the rest of the GNU
dnl gettext package package is covered by the GNU General Public License.
dnl They are *not* in the public domain.
dnl Authors:
dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
dnl Bruno Haible <haible@clisp.cons.org>, 2000-2002.
dnl Macro to add for using GNU gettext.
dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
dnl default (if it is not specified or empty) is 'no-libtool'.
dnl INTLSYMBOL should be 'external' for packages with no intl directory,
dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
dnl If INTLSYMBOL is 'use-libtool', then a libtool library
dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
dnl depending on --{enable,disable}-{shared,static} and on the presence of
dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
dnl $(top_builddir)/intl/libintl.a will be created.
dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
dnl implementations (in libc or libintl) without the ngettext() function
dnl will be ignored. If NEEDSYMBOL is specified and is
dnl 'need-formatstring-macros', then GNU gettext implementations that don't
dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
dnl INTLDIR is used to find the intl libraries. If empty,
dnl the value `$(top_builddir)/intl/' is used.
dnl
dnl The result of the configuration is one of three cases:
dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
dnl and used.
dnl Catalog format: GNU --> install in $(datadir)
dnl Catalog extension: .mo after installation, .gmo in source tree
dnl 2) GNU gettext has been found in the system's C library.
dnl Catalog format: GNU --> install in $(datadir)
dnl Catalog extension: .mo after installation, .gmo in source tree
dnl 3) No internationalization, always use English msgid.
dnl Catalog format: none
dnl Catalog extension: none
dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
dnl The use of .gmo is historical (it was needed to avoid overwriting the
dnl GNU format catalogs when building on a platform with an X/Open gettext),
dnl but we keep it in order not to force irrelevant filename changes on the
dnl maintainers.
dnl
AC_DEFUN([AM_GNU_GETTEXT],
[
dnl Argument checking.
ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
[errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
])])])])])
ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
[errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
])])])])
define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
AC_REQUIRE([AM_PO_SUBDIRS])dnl
ifelse(gt_included_intl, yes, [
AC_REQUIRE([AM_INTL_SUBDIR])dnl
])
dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
dnl Sometimes libintl requires libiconv, so first search for libiconv.
dnl Ideally we would do this search only after the
dnl if test "$USE_NLS" = "yes"; then
dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
dnl the configure script would need to contain the same shell code
dnl again, outside any 'if'. There are two solutions:
dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
dnl documented, we avoid it.
ifelse(gt_included_intl, yes, , [
AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
])
AC_MSG_CHECKING([whether NLS is requested])
dnl Default is enabled NLS
AC_ARG_ENABLE(nls,
[ --disable-nls do not use Native Language Support],
USE_NLS=$enableval, USE_NLS=yes)
AC_MSG_RESULT($USE_NLS)
AC_SUBST(USE_NLS)
ifelse(gt_included_intl, yes, [
BUILD_INCLUDED_LIBINTL=no
USE_INCLUDED_LIBINTL=no
])
LIBINTL=
LTLIBINTL=
POSUB=
dnl If we use NLS figure out what method
if test "$USE_NLS" = "yes"; then
gt_use_preinstalled_gnugettext=no
ifelse(gt_included_intl, yes, [
AC_MSG_CHECKING([whether included gettext is requested])
AC_ARG_WITH(included-gettext,
[ --with-included-gettext use the GNU gettext library included here],
nls_cv_force_use_gnu_gettext=$withval,
nls_cv_force_use_gnu_gettext=no)
AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
])
dnl User does not insist on using GNU NLS library. Figure out what
dnl to use. If GNU gettext is available we use this. Else we have
dnl to fall back to GNU NLS library.
dnl Add a version number to the cache macros.
define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
[AC_TRY_LINK([#include <libintl.h>
]ifelse([$2], [need-formatstring-macros],
[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
#endif
changequote(,)dnl
typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
changequote([,])dnl
], [])[extern int _nl_msg_cat_cntr;
extern int *_nl_domain_bindings;],
[bindtextdomain ("", "");
return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
gt_cv_func_gnugettext_libc=yes,
gt_cv_func_gnugettext_libc=no)])
if test "$gt_cv_func_gnugettext_libc" != "yes"; then
dnl Sometimes libintl requires libiconv, so first search for libiconv.
ifelse(gt_included_intl, yes, , [
AM_ICONV_LINK
])
dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
dnl even if libiconv doesn't exist.
AC_LIB_LINKFLAGS_BODY([intl])
AC_CACHE_CHECK([for GNU gettext in libintl],
gt_cv_func_gnugettext_libintl,
[gt_save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $INCINTL"
gt_save_LIBS="$LIBS"
LIBS="$LIBS $LIBINTL"
dnl Now see whether libintl exists and does not depend on libiconv.
AC_TRY_LINK([#include <libintl.h>
]ifelse([$2], [need-formatstring-macros],
[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
#endif
changequote(,)dnl
typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
changequote([,])dnl
], [])[extern int _nl_msg_cat_cntr;
extern
#ifdef __cplusplus
"C"
#endif
const char *_nl_expand_alias ();],
[bindtextdomain ("", "");
return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
gt_cv_func_gnugettext_libintl=yes,
gt_cv_func_gnugettext_libintl=no)
dnl Now see whether libintl exists and depends on libiconv.
if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
LIBS="$LIBS $LIBICONV"
AC_TRY_LINK([#include <libintl.h>
]ifelse([$2], [need-formatstring-macros],
[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
#endif
changequote(,)dnl
typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
changequote([,])dnl
], [])[extern int _nl_msg_cat_cntr;
extern
#ifdef __cplusplus
"C"
#endif
const char *_nl_expand_alias ();],
[bindtextdomain ("", "");
return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
[LIBINTL="$LIBINTL $LIBICONV"
LTLIBINTL="$LTLIBINTL $LTLIBICONV"
gt_cv_func_gnugettext_libintl=yes
])
fi
CPPFLAGS="$gt_save_CPPFLAGS"
LIBS="$gt_save_LIBS"])
fi
dnl If an already present or preinstalled GNU gettext() is found,
dnl use it. But if this macro is used in GNU gettext, and GNU
dnl gettext is already preinstalled in libintl, we update this
dnl libintl. (Cf. the install rule in intl/Makefile.in.)
if test "$gt_cv_func_gnugettext_libc" = "yes" \
|| { test "$gt_cv_func_gnugettext_libintl" = "yes" \
&& test "$PACKAGE" != gettext; }; then
gt_use_preinstalled_gnugettext=yes
else
dnl Reset the values set by searching for libintl.
LIBINTL=
LTLIBINTL=
INCINTL=
fi
ifelse(gt_included_intl, yes, [
if test "$gt_use_preinstalled_gnugettext" != "yes"; then
dnl GNU gettext is not found in the C library.
dnl Fall back on included GNU gettext library.
nls_cv_use_gnu_gettext=yes
fi
fi
if test "$nls_cv_use_gnu_gettext" = "yes"; then
dnl Mark actions used to generate GNU NLS library.
INTLOBJS="\$(GETTOBJS)"
BUILD_INCLUDED_LIBINTL=yes
USE_INCLUDED_LIBINTL=yes
LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
fi
if test "$gt_use_preinstalled_gnugettext" = "yes" \
|| test "$nls_cv_use_gnu_gettext" = "yes"; then
dnl Mark actions to use GNU gettext tools.
CATOBJEXT=.gmo
fi
])
if test "$gt_use_preinstalled_gnugettext" = "yes" \
|| test "$nls_cv_use_gnu_gettext" = "yes"; then
AC_DEFINE(ENABLE_NLS, 1,
[Define to 1 if translation of program messages to the user's native language
is requested.])
else
USE_NLS=no
fi
fi
if test "$USE_NLS" = "yes"; then
if test "$gt_use_preinstalled_gnugettext" = "yes"; then
if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
AC_MSG_CHECKING([how to link with libintl])
AC_MSG_RESULT([$LIBINTL])
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
fi
dnl For backward compatibility. Some packages may be using this.
AC_DEFINE(HAVE_GETTEXT, 1,
[Define if the GNU gettext() function is already present or preinstalled.])
AC_DEFINE(HAVE_DCGETTEXT, 1,
[Define if the GNU dcgettext() function is already present or preinstalled.])
fi
dnl We need to process the po/ directory.
POSUB=po
fi
ifelse(gt_included_intl, yes, [
dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
dnl to 'yes' because some of the testsuite requires it.
if test "$PACKAGE" = gettext; then
BUILD_INCLUDED_LIBINTL=yes
fi
dnl Make all variables we use known to autoconf.
AC_SUBST(BUILD_INCLUDED_LIBINTL)
AC_SUBST(USE_INCLUDED_LIBINTL)
AC_SUBST(CATOBJEXT)
AC_SUBST(INTLOBJS)
dnl For backward compatibility. Some configure.ins may be using this.
nls_cv_header_intl=
nls_cv_header_libgt=
dnl For backward compatibility. Some Makefiles may be using this.
DATADIRNAME=share
AC_SUBST(DATADIRNAME)
dnl For backward compatibility. Some Makefiles may be using this.
INSTOBJEXT=.mo
AC_SUBST(INSTOBJEXT)
dnl For backward compatibility. Some Makefiles may be using this.
GENCAT=gencat
AC_SUBST(GENCAT)
dnl Enable libtool support if the surrounding package wishes it.
INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
])
dnl For backward compatibility. Some Makefiles may be using this.
INTLLIBS="$LIBINTL"
AC_SUBST(INTLLIBS)
dnl Make all documented variables known to autoconf.
AC_SUBST(LIBINTL)
AC_SUBST(LTLIBINTL)
AC_SUBST(POSUB)
])
dnl Checks for all prerequisites of the po subdirectory,
dnl except for USE_NLS.
AC_DEFUN([AM_PO_SUBDIRS],
[
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
AC_REQUIRE([AM_MKINSTALLDIRS])dnl
dnl Perform the following tests also if --disable-nls has been given,
dnl because they are needed for "make dist" to work.
dnl Search for GNU msgfmt in the PATH.
dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
dnl The second test excludes FreeBSD msgfmt.
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
[$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
(if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
:)
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
dnl Search for GNU xgettext 0.11 or newer in the PATH.
dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
dnl The second test excludes FreeBSD xgettext.
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
[$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
(if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
:)
dnl Remove leftover from FreeBSD xgettext call.
rm -f messages.po
dnl Search for GNU msgmerge 0.11 or newer in the PATH.
AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
[$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
dnl Test whether we really found GNU msgfmt.
if test "$GMSGFMT" != ":"; then
dnl If it is no GNU msgfmt we define it as : so that the
dnl Makefiles still can work.
if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
(if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
: ;
else
GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
AC_MSG_RESULT(
[found $GMSGFMT program is not GNU msgfmt; ignore it])
GMSGFMT=":"
fi
fi
dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
dnl Test whether we really found GNU xgettext.
if test "$XGETTEXT" != ":"; then
dnl If it is no GNU xgettext we define it as : so that the
dnl Makefiles still can work.
if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
(if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
: ;
else
AC_MSG_RESULT(
[found xgettext program is not GNU xgettext; ignore it])
XGETTEXT=":"
fi
dnl Remove leftover from FreeBSD xgettext call.
rm -f messages.po
fi
AC_CONFIG_COMMANDS([[gettext]],[[
for ac_file in $CONFIG_FILES; do
# Support "outfile[:infile[:infile...]]"
case "$ac_file" in
*:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
esac
# PO directories have a Makefile.in generated from Makefile.in.in.
case "$ac_file" in */Makefile.in)
# Adjust a relative srcdir.
ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
# In autoconf-2.13 it is called $ac_given_srcdir.
# In autoconf-2.50 it is called $srcdir.
test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
case "$ac_given_srcdir" in
.) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
/*) top_srcdir="$ac_given_srcdir" ;;
*) top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
rm -f "$ac_dir/POTFILES"
test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
# ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
# on $ac_dir but don't depend on user-specified configuration
# parameters.
if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
# The LINGUAS file contains the set of available languages.
if test -n "$ALL_LINGUAS"; then
test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
fi
ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
# Hide the ALL_LINGUAS assigment from automake.
eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
fi
case "$ac_given_srcdir" in
.) srcdirpre= ;;
*) srcdirpre='$(srcdir)/' ;;
esac
POFILES=
GMOFILES=
UPDATEPOFILES=
DUMMYPOFILES=
for lang in $ALL_LINGUAS; do
POFILES="$POFILES $srcdirpre$lang.po"
GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
done
# CATALOGS depends on both $ac_dir and the user's LINGUAS
# environment variable.
INST_LINGUAS=
if test -n "$ALL_LINGUAS"; then
for presentlang in $ALL_LINGUAS; do
useit=no
if test "%UNSET%" != "$LINGUAS"; then
desiredlanguages="$LINGUAS"
else
desiredlanguages="$ALL_LINGUAS"
fi
for desiredlang in $desiredlanguages; do
# Use the presentlang catalog if desiredlang is
# a. equal to presentlang, or
# b. a variant of presentlang (because in this case,
# presentlang can be used as a fallback for messages
# which are not translated in the desiredlang catalog).
case "$desiredlang" in
"$presentlang"*) useit=yes;;
esac
done
if test $useit = yes; then
INST_LINGUAS="$INST_LINGUAS $presentlang"
fi
done
fi
CATALOGS=
if test -n "$INST_LINGUAS"; then
for lang in $INST_LINGUAS; do
CATALOGS="$CATALOGS $lang.gmo"
done
fi
test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
if test -f "$f"; then
case "$f" in
*.orig | *.bak | *~) ;;
*) cat "$f" >> "$ac_dir/Makefile" ;;
esac
fi
done
fi
;;
esac
done]],
[# Capture the value of obsolete ALL_LINGUAS because we need it to compute
# POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
# from automake.
eval 'ALL_LINGUAS''="$ALL_LINGUAS"'
# Capture the value of LINGUAS because we need it to compute CATALOGS.
LINGUAS="${LINGUAS-%UNSET%}"
])
])
dnl Checks for all prerequisites of the intl subdirectory,
dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
AC_DEFUN([AM_INTL_SUBDIR],
[
AC_REQUIRE([AC_PROG_INSTALL])dnl
AC_REQUIRE([AM_MKINSTALLDIRS])dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_PROG_RANLIB])dnl
AC_REQUIRE([AC_ISC_POSIX])dnl
AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_C_CONST])dnl
AC_REQUIRE([AC_C_INLINE])dnl
AC_REQUIRE([AC_TYPE_OFF_T])dnl
AC_REQUIRE([AC_TYPE_SIZE_T])dnl
AC_REQUIRE([AC_FUNC_ALLOCA])dnl
AC_REQUIRE([AC_FUNC_MMAP])dnl
AC_REQUIRE([jm_GLIBC21])dnl
AC_REQUIRE([gt_INTDIV0])dnl
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
AC_REQUIRE([gt_INTTYPES_PRI])dnl
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
stdlib.h string.h unistd.h sys/param.h])
AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
AM_ICONV
AM_LANGINFO_CODESET
if test $ac_cv_header_locale_h = yes; then
AM_LC_MESSAGES
fi
dnl intl/plural.c is generated from intl/plural.y. It requires bison,
dnl because plural.y uses bison specific features. It requires at least
dnl bison-1.26 because earlier versions generate a plural.c that doesn't
dnl compile.
dnl bison is only needed for the maintainer (who touches plural.y). But in
dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
dnl the rule in general Makefile. Now, some people carelessly touch the
dnl files or have a broken "make" program, hence the plural.c rule will
dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
dnl present or too old.
AC_CHECK_PROGS([INTLBISON], [bison])
if test -z "$INTLBISON"; then
ac_verc_fail=yes
else
dnl Found it, now check the version.
AC_MSG_CHECKING([version of bison])
changequote(<<,>>)dnl
ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
changequote([,])dnl
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
esac
AC_MSG_RESULT([$ac_prog_version])
fi
if test $ac_verc_fail = yes; then
INTLBISON=:
fi
])
AC_DEFUN([AM_MKINSTALLDIRS],
[
dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
dnl Try to locate is.
MKINSTALLDIRS=
if test -n "$ac_aux_dir"; then
MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
fi
if test -z "$MKINSTALLDIRS"; then
MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
fi
AC_SUBST(MKINSTALLDIRS)
])
dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])

1930
aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

24
bin/nwbpsecurity Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/sh
SECURITY=`nwbpvalues $* -c | head -3 | tail -1`
WRITE=`echo $SECURITY | cut -b1`
READ=`echo $SECURITY | cut -b2`
function print_sec () {
case "$1" in
0 ) echo "Everyone"
;;
1 ) echo "Logged in"
;;
2 ) echo "Object"
;;
3 ) echo "Supervisor"
;;
* ) echo "Bindery"
;;
esac
}
echo -n "Write security: "
print_sec $WRITE
echo -n "Read security : "
print_sec $READ

View File

@@ -3,6 +3,5 @@
# abcd is my ipx network number and 1234 my server's internal network number.
# 00001b038b11 is the server's node number.
#
ipx_interface add -p eth0 EtherII 10
ipx_route add 1992 10 00001b3bc0c9
ipx_route add 1234 10 00001b038b11
ipx_interface add -p eth0 EtherII 1234
ipx_route add 10 1234 00001b039949

17
conf Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/sh
AUTOTOOLS_DIR=/usr/share/misc
if [ -f "${AUTOTOOLS_DIR}/config.guess" ]; then
cp -p "${AUTOTOOLS_DIR}/config.guess" config.guess
fi
if [ -f "${AUTOTOOLS_DIR}/config.sub" ]; then
cp -p "${AUTOTOOLS_DIR}/config.sub" config.sub
fi
aclocal
# Do not use space between -W and all, otherwise Debian's auto*-wrapper
# brokes...
autoconf -Wall
autoheader -Wall
rm -f config.cache config.status config.log

1409
config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

513
config.rpath Executable file
View File

@@ -0,0 +1,513 @@
#! /bin/sh
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
# Copyright 1996-2002 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
# should be set by the caller.
#
# The set of defined variables is at the end of this script.
# All known linkers require a `.a' archive for static linking (except M$VC,
# which needs '.lib').
libext=a
shlibext=
host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
wl=
if test "$GCC" = yes; then
wl='-Wl,'
else
case "$host_os" in
aix3* | aix4* | aix5*)
wl='-Wl,'
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
;;
irix5* | irix6*)
wl='-Wl,'
;;
linux*)
echo '__INTEL_COMPILER' > conftest.$ac_ext
if $CC -E conftest.$ac_ext >/dev/null | grep __INTEL_COMPILER >/dev/null
then
:
else
# Intel icc
wl='-Qoption,ld,'
fi
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
solaris*)
wl='-Wl,'
;;
sunos4*)
wl='-Qoption ld '
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
if test "x$host_vendor" = xsni; then
wl='-LD'
else
wl='-Wl,'
fi
;;
esac
fi
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
cygwin* | mingw* | pw32*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
openbsd*)
with_gnu_ld=no
;;
esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
case "$host_os" in
aix3* | aix4* | aix5*)
# On AIX, the GNU linker is very broken
ld_shlibs=no
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
# that the semantics of dynamic libraries on AmigaOS, at least up
# to version 4, is to share data among multiple programs linked
# with the same dynamic library. Since this doesn't match the
# behavior of shared libraries on other platforms, we can use
# them.
ld_shlibs=no
;;
beos*)
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
cygwin* | mingw* | pw32*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
;;
solaris* | sysv5*)
if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
sunos4*)
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
if test "$ld_shlibs" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
fi
else
case "$host_os" in
aix3*)
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
if test "$GCC" = yes; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
esac
fi
hardcode_direct=yes
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
case $host_os in aix4.[012]|aix4.[012].*)
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" && \
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
hardcode_direct=yes
else
# We have old collect2
hardcode_direct=unsupported
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
esac
fi
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
else
hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
fi
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# see comment about different semantics on the GNU ld section
ld_shlibs=no
;;
cygwin* | mingw* | pw32*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec=' '
libext=lib
;;
darwin* | rhapsody*)
hardcode_direct=yes
;;
freebsd1*)
ld_shlibs=no
;;
freebsd2.2*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
freebsd2*)
hardcode_direct=yes
hardcode_minus_L=yes
;;
freebsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
hpux9* | hpux10* | hpux11*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
hardcode_minus_L=yes # Not in the search PATH, but as the default
# location of the library.
;;
irix5* | irix6*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
netbsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
newsos6)
hardcode_direct=yes
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
openbsd*)
hardcode_direct=yes
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
else
case "$host_os" in
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
hardcode_libdir_flag_spec='-R$libdir'
;;
*)
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
esac
fi
;;
os2*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
osf3*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
osf4* | osf5*)
if test "$GCC" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
else
# Both cc and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
fi
hardcode_libdir_separator=:
;;
sco3.2v5*)
;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
sunos4*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
sysv4)
if test "x$host_vendor" = xsno; then
hardcode_direct=yes # is this really true???
else
hardcode_direct=no # Motorola manual says yes, but my tests say they lie
fi
;;
sysv4.3*)
;;
sysv5*)
hardcode_libdir_flag_spec=
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
;;
dgux*)
hardcode_libdir_flag_spec='-L$libdir'
;;
sysv4*MP*)
if test -d /usr/nec; then
ld_shlibs=yes
fi
;;
sysv4.2uw2*)
hardcode_direct=yes
hardcode_minus_L=no
;;
sysv5uw7* | unixware7*)
;;
*)
ld_shlibs=no
;;
esac
fi
# Check dynamic linker characteristics
libname_spec='lib$name'
sys_lib_dlsearch_path_spec="/lib /usr/lib"
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
case "$host_os" in
aix3*)
shlibext=so
;;
aix4* | aix5*)
shlibext=so
;;
amigaos*)
shlibext=ixlibrary
;;
beos*)
shlibext=so
;;
bsdi4*)
shlibext=so
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
;;
cygwin* | mingw* | pw32*)
case $GCC,$host_os in
yes,cygwin*)
shlibext=dll.a
;;
yes,mingw*)
shlibext=dll
sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
;;
yes,pw32*)
shlibext=dll
;;
*)
shlibext=dll
;;
esac
;;
darwin* | rhapsody*)
shlibext=dylib
;;
freebsd1*)
;;
freebsd*)
shlibext=so
;;
gnu*)
shlibext=so
;;
hpux9* | hpux10* | hpux11*)
shlibext=sl
;;
irix5* | irix6*)
shlibext=so
case "$host_os" in
irix5*)
libsuff= shlibsuff=
;;
*)
case $LD in
*-32|*"-32 ") libsuff= shlibsuff= ;;
*-n32|*"-n32 ") libsuff=32 shlibsuff=N32 ;;
*-64|*"-64 ") libsuff=64 shlibsuff=64 ;;
*) libsuff= shlibsuff= ;;
esac
;;
esac
sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
;;
linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
;;
linux-gnu*)
shlibext=so
;;
netbsd*)
shlibext=so
;;
newsos6)
shlibext=so
;;
openbsd*)
shlibext=so
;;
os2*)
libname_spec='$name'
shlibext=dll
;;
osf3* | osf4* | osf5*)
shlibext=so
sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
sco3.2v5*)
shlibext=so
;;
solaris*)
shlibext=so
;;
sunos4*)
shlibext=so
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
shlibext=so
case "$host_vendor" in
motorola)
sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
;;
esac
;;
uts4*)
shlibext=so
;;
dgux*)
shlibext=so
;;
sysv4*MP*)
if test -d /usr/nec; then
shlibext=so
fi
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_sys_lib_search_path_spec=`echo "X$sys_lib_search_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_sys_lib_dlsearch_path_spec=`echo "X$sys_lib_dlsearch_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
# Static library suffix (normally "a").
libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator="$hardcode_libdir_separator"
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct="$hardcode_direct"
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L="$hardcode_minus_L"
# Compile-time system search path for libraries
sys_lib_search_path_spec="$escaped_sys_lib_search_path_spec"
# Run-time system search path for libraries
sys_lib_dlsearch_path_spec="$escaped_sys_lib_dlsearch_path_spec"
EOF

1473
config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

12371
configure vendored Executable file

File diff suppressed because it is too large Load Diff

1153
configure.ac Normal file

File diff suppressed because it is too large Load Diff

25
contrib/libtrace/Makefile Normal file
View File

@@ -0,0 +1,25 @@
#
#
#
top_srcdir = ../..
top_builddir = ../..
this_srcdir = ${top_srcdir}/contrib/libtrace
include ${top_builddir}/Make.rules
.PHONY : all clean distclean mrproper
all: tracencp.so
tracencp.so: tracencp.c allsyms.c
$(CC) $(CFLAGS) -o tracencp.so -shared tracencp.c -L${top_builddir}/lib -lncp -ldl
allsyms.c: ${top_builddir}/lib/libncp.so
objdump -T ${top_builddir}/lib/libncp.so | grep 'DF .text' | rev | cut -d" " -f1 | rev | sed 's/^\(.*\)$$/DO_ASM_SYMBOL_EASY(\1)/' > allsyms.c
clean:
-rm -f allsyms.c tracencp.so
distclean: clean
mrproper: clean

96
contrib/libtrace/README Normal file
View File

@@ -0,0 +1,96 @@
Hello everybody,
ltrace does not trace calls made to dynamically loaded objects,
and this made my testing of ncpfs Perl wrapper very hard, as
I was not able to confirm what's going inside without adding
debugging prints into either ncpfs or into generated wrapper...
I found this unacceptable, and so I cooked this code. You can
use it to create wrapper around any library you want, it just
must be dynamic library, not a static one.
Usage is simple:
NCP_TRACE_FILE=demo.trc LD_PRELOAD=./tracencp.so demo.pl
and enjoy demo.trc file.
I hope that in future I'll be able to persuade SWIG to create
trace_in_* and trace_out_* wrappers for me automatically - but
of course you can do it yourself meanwhile.
trace_in_XXX function has same arguments as XXX function, with
two parameters added in front of the list - const char* functionName
and void* caller. trace_out_XXX function has also arguments of
wrapped function - with added int returnValue and void* caller.
So for example for NWDSFreeContext() you have:
NWDSCCODE NWDSFreeContext(NWDSContextHandle ctx);
void trace_in_NWDSFreeContext(const char* name, void* addr, NWDSContextHandle ctx);
void trace_out_NWDSFreeContext(NWDSCCODE err, void* addr, NWDSContextHandle ctx);
You should not modify arguments passed to you - depending on
optimization level your changes may be visible to function you
are wrapping and/or to caller. And you should use logprintf()
in trace_in_* and resprintf() in trace_out_*. These functions
take a care of automatic indenting and printing address of caller.
And of course, currently there are several limitations:
- only i386 version exists... Write your own assembly code, and send me it
if you want this on your architecture.
- you cannot create C wrappers around functions which return 64bit
quantities (if you'll cook wrapper in assembly, you'll find upper
32bits in %edx register).
- on callchain deeper than 256 levels it dies.
- versioned symbols are not properly wrapped with version, they
are wrapped without version information.
- maybe more... Use of weak symbols is intentional feature and not a bug.
Example (this example also shows that context handle is automatically
destroyed when it is no longer referenced from Perl - this is why
I wrote this tracer...):
$ NCP_TRACE_FILE=demo.trc LD_PRELOAD=./tracencp.so demo.pl
NWDSCreateContext() = ok, ctx=ncpfs::NWDSContextHandle=SCALAR(0x80f6408)
NWDSDuplicateContext(ctx) = ok, nctx=ncpfs::NWDSContextHandle=SCALAR(0x80f6444)
$ cat demo.trc
402B593D: NWDSCreateContext() = ...
401E3787: NWDSCreateContextHandle() = ...
401E3242: NWDSInitRequester() = ...
401E22B2: my_iconv() = 0
401E22C0: my_iconv_close() = 0
(cont'd.) ... = 0
401E3377: NWDSSetContext() = ...
401E39B3: my_iconv_open() = 135390952
401E39D6: my_iconv_open() = 135305312
(cont'd.) ... = 0
401E33CA: NWDSSetTransport() = 0
(cont'd.) ... = 0
(cont'd.) ... = 137280664
402B5BB0: NWDSDuplicateContext() = ...
401E37BE: NWDSDuplicateContextHandle() = ...
401E3508: NWDSSetContext() = ...
401E39B3: my_iconv_open() = 135292056
401E39D6: my_iconv_open() = 135291776
(cont'd.) ... = 0
401E360E: NWDSSetContext() = ...
401E39B3: my_iconv_open() = 135404088
401E39D6: my_iconv_open() = 135733664
401E3A05: my_iconv_close() = 0
401E3A22: my_iconv_close() = 0
(cont'd.) ... = 0
(cont'd.) ... = 0
(cont'd.) ... = 136991752
40255E93: NWDSFreeContext() = ...
401E36A1: my_iconv_close() = 0
401E36B5: my_iconv_close() = 0
(cont'd.) ... = 0
40255E93: NWDSFreeContext() = ...
401E36A1: my_iconv_close() = 0
401E36B5: my_iconv_close() = 0
(cont'd.) ... = 0
$
Enjoy,
Petr Vandrovec
vandrove@vc.cvut.cz

24
contrib/libtrace/demo.pl Executable file
View File

@@ -0,0 +1,24 @@
#! /usr/bin/perl -w
use strict;
use diagnostics;
use ncpfs;
my ($err,$ctx);
print 'NWDSCreateContext() = ';
$ctx = ncpfs::NWDSCreateContext();
if (not defined($ctx)) {
print "failed\n";
} else {
my ($nctx);
print "ok, ctx=$ctx\n";
print 'NWDSDuplicateContext(ctx) = ';
$nctx = ncpfs::NWDSDuplicateContext($ctx);
if (not defined($nctx)) {
print "failed\n";
} else {
print "ok, nctx=$nctx\n";
}
}

35
contrib/libtrace/demo.trc Normal file
View File

@@ -0,0 +1,35 @@
402B593D: NWDSCreateContext() = ...
401E3787: NWDSCreateContextHandle() = ...
401E3242: NWDSInitRequester() = ...
401E22B2: my_iconv() = 0
401E22C0: my_iconv_close() = 0
(cont'd.) ... = 0
401E3377: NWDSSetContext() = ...
401E39B3: my_iconv_open() = 135390952
401E39D6: my_iconv_open() = 135305312
(cont'd.) ... = 0
401E33CA: NWDSSetTransport() = 0
(cont'd.) ... = 0
(cont'd.) ... = 137280664
402B5BB0: NWDSDuplicateContext() = ...
401E37BE: NWDSDuplicateContextHandle() = ...
401E3508: NWDSSetContext() = ...
401E39B3: my_iconv_open() = 135292056
401E39D6: my_iconv_open() = 135291776
(cont'd.) ... = 0
401E360E: NWDSSetContext() = ...
401E39B3: my_iconv_open() = 135404088
401E39D6: my_iconv_open() = 135733664
401E3A05: my_iconv_close() = 0
401E3A22: my_iconv_close() = 0
(cont'd.) ... = 0
(cont'd.) ... = 0
(cont'd.) ... = 136991752
40255E93: NWDSFreeContext() = ...
401E36A1: my_iconv_close() = 0
401E36B5: my_iconv_close() = 0
(cont'd.) ... = 0
40255E93: NWDSFreeContext() = ...
401E36A1: my_iconv_close() = 0
401E36B5: my_iconv_close() = 0
(cont'd.) ... = 0

139
contrib/libtrace/tracencp.c Normal file
View File

@@ -0,0 +1,139 @@
#define _GNU_SOURCE
#include <dlfcn.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
static void* freestack[256];
static void** RetAddrPtr = freestack;
static int infunc = 0;
static FILE* tracefile = NULL;
static void linesetup(void) {
int x;
x = RetAddrPtr - freestack;
while (x--) {
fprintf(tracefile, " ");
}
}
static void logprintf(void* calladdr, const char * message, ...) {
va_list va;
if (!tracefile) {
char* x = getenv("NCP_TRACE_FILE");
if (x) {
tracefile = fopen(x, "wt");
}
if (!tracefile)
tracefile = stderr;
}
if (infunc) {
fprintf(tracefile, "...\n");
}
fprintf(tracefile, "%08lX: ", (unsigned long)calladdr);
linesetup();
va_start(va, message);
vfprintf(tracefile, message, va);
va_end(va);
infunc = 1;
}
static void resprintf(const char * message, ...) {
va_list va;
if (!infunc) {
fprintf(tracefile, "(cont'd.) ");
linesetup();
fprintf(tracefile, "... = ");
}
va_start(va, message);
vfprintf(tracefile, message, va);
va_end(va);
infunc = 0;
}
#define DO_ASM_SYMBOL(SYMBOL) \
asm( \
".data \n" \
" .align 4 \n" \
" .type .L99" #SYMBOL "_wrap,@object \n" \
" .size .L99" #SYMBOL "_wrap,4 \n" \
".L99" #SYMBOL "_wrap: \n" \
" .long 0 \n" \
".section .rodata \n" \
".LC0" #SYMBOL ": \n" \
" .string \"" #SYMBOL "\" \n" \
".text \n" \
" .align 4 \n" \
".globl " #SYMBOL " \n" \
" .type " #SYMBOL ",@function \n" \
#SYMBOL ": \n" \
" movl $trace_in_" #SYMBOL ",%eax \n" \
" testl %eax,%eax \n" \
" jne .L8" #SYMBOL " \n" \
" movl $trace_default_in,%eax \n" \
".L8" #SYMBOL ": \n" \
" pushl $.LC0" #SYMBOL " \n" \
" call *%eax \n" \
" addl $4,%esp \n" \
".L3" #SYMBOL ": \n" \
" cmpl $0,.L99" #SYMBOL "_wrap \n" \
" jne .L4" #SYMBOL " \n" \
" pushl $.LC0" #SYMBOL " \n" \
" pushl $-1 \n" \
" call dlsym \n" \
" addl $8,%esp \n" \
" movl %eax,.L99" #SYMBOL "_wrap \n" \
" testl %eax,%eax \n" \
" jne .L4" #SYMBOL " \n" \
" call __errno_location \n" \
" movl $-38,(%eax) \n" \
" movl $-1,%eax \n" \
" jmp .L6" #SYMBOL " \n" \
" .p2align 4,,7 \n" \
".L4" #SYMBOL ": \n" \
" movl RetAddrPtr,%eax \n" \
" popl (%eax) \n" \
" addl $4,RetAddrPtr \n" \
" pushl $.L99" #SYMBOL "_continue \n" \
" jmp *.L99" #SYMBOL "_wrap \n" \
".L99" #SYMBOL "_continue: \n" \
" addl $-4,RetAddrPtr \n" \
" movl RetAddrPtr,%ecx \n" \
" pushl (%ecx) \n" \
" movl $trace_out_" #SYMBOL ",%ecx \n" \
" testl %ecx,%ecx \n" \
" jne .L7" #SYMBOL " \n" \
" movl $trace_default_out,%ecx \n" \
".L7" #SYMBOL ": \n" \
" pushl %eax \n" \
" call *%ecx \n" \
" popl %eax \n" \
".L6" #SYMBOL ": \n" \
" ret \n" \
".Lfe1" #SYMBOL ": \n" \
" .size " #SYMBOL ",.Lfe1" #SYMBOL "-" #SYMBOL "\n"\
" .weak trace_out_" #SYMBOL " \n" \
" .weak trace_in_" #SYMBOL " \n");
#define DO_ASM_SYMBOL_EASY(SYMBOL) \
DO_ASM_SYMBOL(SYMBOL)
void trace_default_in(const char* funcname, void* calladdr) {
logprintf(calladdr, "%s() = ", funcname);
}
void trace_default_out(int result) {
resprintf("%d\n", result);
}
#include "allsyms.c"
void trace_out_strnwerror(const char* result) {
resprintf("%s\n", result);
}

27
contrib/nss64/Makefile Normal file
View File

@@ -0,0 +1,27 @@
NWSDK = /mnt/novell/nwsdk
#NWSDK = /usr/src/ndk
CFLAGS = -DN_PLAT_NLM -nostdinc -fpack-struct -I${NWSDK}/include/nlm -I${NWSDK}/include -W -Wall -Winline -O2 -fomit-frame-pointer -mpreferred-stack-boundary=2 -fverbose-asm
#SERVER = /vana2/sys
SERVER = /nw5/sys
ncphook.nlm: ncphook.o ncphook.def prelude.o
nlmconv -T ncphook.def -l ld
prelude.o: prelude.c
$(CC) $(CFLAGS) -c -o prelude.o prelude.c
ncphook.o: ncphook.s
$(CC) $(CFLAGS) -c ncphook.s
ncphook.s: ncphook.c ncphook.h
$(CC) $(CFLAGS) -S ncphook.c
clean:
rm -f *.o *.s *.nlm
mrproper: clean
distclean: mrproper
install: ncphook.nlm
cp ncphook.nlm ${SERVER}/ncphook.nlm

663
contrib/nss64/ncphook.c Normal file
View File

@@ -0,0 +1,663 @@
#include "ncphook.h"
#include <stddef.h>
#include <signal.h>
#include <nwadv.h>
#include <nwthread.h>
#include <string.h>
#include <stdio.h>
static unsigned char NSS2NCPErrorTable[5000];
static void InitNSS2NCPErrorTable(void) {
memset(NSS2NCPErrorTable, 0xFF, sizeof(NSS2NCPErrorTable));
NSS2NCPErrorTable[ 0] = 0x96;
NSS2NCPErrorTable[ 1] = 0xFD;
NSS2NCPErrorTable[ 2] = 0xFD;
NSS2NCPErrorTable[ 4] = 0x77;
NSS2NCPErrorTable[ 7] = 0xFB;
NSS2NCPErrorTable[ 99] = 0xFC;
NSS2NCPErrorTable[ 101] = 0x83;
NSS2NCPErrorTable[ 102] = 0x83;
NSS2NCPErrorTable[ 103] = 0x01;
NSS2NCPErrorTable[ 104] = 0x01;
NSS2NCPErrorTable[ 300] = 0x9C;
NSS2NCPErrorTable[ 400] = 0x9C;
NSS2NCPErrorTable[ 401] = 0x88;
NSS2NCPErrorTable[ 402] = 0x9B;
NSS2NCPErrorTable[ 404] = 0x9E;
NSS2NCPErrorTable[ 405] = 0x9C;
NSS2NCPErrorTable[ 406] = 0x9C;
NSS2NCPErrorTable[ 408] = 0x9C;
NSS2NCPErrorTable[ 409] = 0x9C;
NSS2NCPErrorTable[ 410] = 0x9C;
NSS2NCPErrorTable[ 411] = 0x98;
NSS2NCPErrorTable[ 417] = 0xA0;
NSS2NCPErrorTable[ 421] = 0x01;
NSS2NCPErrorTable[ 438] = 0x82;
NSS2NCPErrorTable[ 439] = 0x9D;
NSS2NCPErrorTable[ 440] = 0x9C;
NSS2NCPErrorTable[ 444] = 0x9C;
NSS2NCPErrorTable[ 445] = 0x2D;
NSS2NCPErrorTable[ 499] = 0x9C;
NSS2NCPErrorTable[ 500] = 0x8E;
NSS2NCPErrorTable[ 501] = 0x8D;
NSS2NCPErrorTable[ 502] = 0x90;
NSS2NCPErrorTable[ 503] = 0x8F;
NSS2NCPErrorTable[ 504] = 0x92;
NSS2NCPErrorTable[ 505] = 0x91;
NSS2NCPErrorTable[ 506] = 0x8B;
NSS2NCPErrorTable[ 507] = 0xA4;
NSS2NCPErrorTable[ 508] = 0x9A;
NSS2NCPErrorTable[ 550] = 0xBE;
NSS2NCPErrorTable[ 601] = 0xCF;
NSS2NCPErrorTable[ 650] = 0x17;
NSS2NCPErrorTable[ 651] = 0x11;
NSS2NCPErrorTable[ 652] = 0x18;
NSS2NCPErrorTable[ 653] = 0x95;
NSS2NCPErrorTable[ 654] = 0x95;
NSS2NCPErrorTable[ 700] = 0xBF;
NSS2NCPErrorTable[ 701] = 0xBF;
NSS2NCPErrorTable[ 702] = 0xBF;
NSS2NCPErrorTable[ 703] = 0xBF;
NSS2NCPErrorTable[ 800] = 0x98;
NSS2NCPErrorTable[ 801] = 0x98;
NSS2NCPErrorTable[ 804] = 0x78;
NSS2NCPErrorTable[ 850] = 0x8C;
NSS2NCPErrorTable[ 851] = 0x84;
NSS2NCPErrorTable[ 856] = 0xFE;
NSS2NCPErrorTable[ 857] = 0x9C;
NSS2NCPErrorTable[ 859] = 0xA8;
NSS2NCPErrorTable[ 860] = 0x94;
NSS2NCPErrorTable[ 861] = 0x93;
NSS2NCPErrorTable[ 862] = 0x8A;
NSS2NCPErrorTable[ 863] = 0x8A;
NSS2NCPErrorTable[ 867] = 0xFC;
NSS2NCPErrorTable[ 868] = 0x8E;
NSS2NCPErrorTable[ 869] = 0x85;
NSS2NCPErrorTable[ 870] = 0x84;
NSS2NCPErrorTable[ 900] = 0xA2;
NSS2NCPErrorTable[ 901] = 0x80;
NSS2NCPErrorTable[ 903] = 0xFE;
NSS2NCPErrorTable[ 905] = 0x80;
NSS2NCPErrorTable[ 906] = 0x80;
NSS2NCPErrorTable[ 907] = 0x80;
NSS2NCPErrorTable[ 908] = 0x80;
NSS2NCPErrorTable[ 1303] = 0x01;
NSS2NCPErrorTable[ 1503] = 0x01;
NSS2NCPErrorTable[ 2000] = 0xA5;
}
static LONG NSS2NCPError(nuint32 ec) {
if (ec) {
if (ec < 20000 || ec >= 20000 + sizeof(NSS2NCPErrorTable)) {
return 0xFF;
}
return NSS2NCPErrorTable[ec - 20000];
}
return 0;
}
static nuint32 nlmHandle;
static nuint32 NCPRTag;
//static nuint32 AllocRTag;
static int ncpHooked = 0;
static inline void cachePut(struct cacheblk* cacheBlock) {
if (!--cacheBlock->pinCount) {
cacheUnpinned(cacheBlock);
}
}
static inline void releaseReadReply(struct largeReadControl* lrc) {
struct largeReadControlFrag* lrcf;
unsigned int i;
lrcf = lrc->frags + 1;
for (i = lrc->fragCount; --i; ) {
struct cacheblk* cacheBlock;
cacheBlock = lrcf->cacheBlock;
if (cacheBlock) {
cachePut(cacheBlock);
}
lrcf++;
}
return;
}
static void sendDone(struct ncpSendCacheCB* sendCb) {
struct largeReadControlFrag* lrcf;
struct largeReadControl* lrc;
unsigned int i;
lrc = (**NW_connectionTable)[sendCb->connNum]->largeReadControl;
lrcf = lrc->frags + 1;
for (i = lrc->fragCount; --i; ) {
mailInterrupt(cachePut, lrcf->cacheBlock);
lrcf++;
}
return;
}
static inline void __LBL_sSignal(struct semaphore* sem) {
if (!--sem->value && sem->queue) {
LBL_sSignal(sem);
}
}
static inline void readAsyncCallback(struct LB_async* req) {
struct largeReadControlFrag* lrcf;
lrcf = req->frag;
if (req->errorCode) {
lrcf->fragAddr = NULL;
lrcf->cacheBlock = NULL;
SetErrno(req->sema->data, req->errorCode);
} else {
struct cacheblk* cacheBlock = req->cacheBlock;
cacheBlock->pinCount++;
cacheRelease(cacheBlock);
lrcf->fragAddr = cacheBlock->address + (nuint32)lrcf->fragAddr;
lrcf->cacheBlock = cacheBlock;
}
__LBL_sSignal(req->sema);
LB_freeAsyncio(req);
}
static inline void __LBL_sWait(struct semaphore* sem) {
if (sem->value) {
if (sem->value < 0 || sem->queue) {
LBL_sWait(sem);
} else {
sem->value++;
}
} else {
sem->value = 1;
}
}
static inline void __LBL_cntSignal(struct semaphore* sem, int val) {
sem->value += val;
if (sem->queue) {
LBL_cntSignal(sem, val);
}
}
static inline void __LBL_cntWait(struct semaphore* sem, int val) {
if (sem->value < val) {
LBL_cntWait(sem, val);
} else {
sem->value -= val;
}
}
static inline int __LBL_xIsLocked(struct semaphore* sem) {
return sem->value;
}
static inline void __LBL_xSignal(struct semaphore* sem) {
sem->value = 0;
if (sem->queue) {
LBL_xSignal(sem);
}
}
static inline void __LBL_xWait(struct semaphore* sem) {
if (sem->value) {
LBL_xWait(sem);
} else {
sem->value = -1;
}
}
static nuint32 nssReadEnter;
static nuint32 nssReadExit;
static nuint32 nssGetSizeEnter;
static nuint32 nssGetSizeExit;
static inline unsigned long long shr(unsigned long long val, unsigned int shift) {
return val >> shift;
}
void Case72(struct ncpReqInfo* info, struct ncpSend* send, nuint32 unk, nuint32 reqLen,
void* workspace, nuint32 workspaceLen);
struct fhOffsLen {
nuint16 filehandle_l PACKED;
nuint32 filehandle_h PACKED;
nuint16 rsvd PACKED;
unsigned long long offset PACKED;
unsigned long long length PACKED;
nuint8 data[1];
};
struct fhReq {
nuint16 filehandle_l PACKED;
nuint32 filehandle_h PACKED;
nuint16 rsvd PACKED;
};
static void NWSARead(struct ncpReqInfo* info, struct ncpSend* send, struct fhOffsLen* rq,
void* workspace, nuint32 workspaceLen) {
struct fh* nssFD;
nuint32 connNum;
struct zComnFile zFile;
struct zComnInfo zInfo;
nssReadEnter++;
zFile.fileHandle = rq->filehandle_h;
zFile.nssHandle = 0;
Inst.readRequests++;
connNum = info->conn;
zInfo.errorcode = 0;
zInfo.connection = connNum;
zInfo.conn = NULL;
zInfo.reserved2 = 0;
zInfo.reserved3 = 2;
__LBL_cntWait(&ReserveResource, 32);
if (zFile.nssHandle == NULL) {
nssFD = COMN_DoResolveFileHandle(&zInfo, &zFile);
} else {
nssFD = zFile.nssHandle;
}
if (nssFD) {
if ((nssFD->accessMode & zRR_READ_ACCESS) == 0) {
SetErrno(&zInfo, zERR_NO_READ_PRIVILEGE);
} else {
unsigned long long file_offset;
nuint32 read_length;
unsigned long long file_size;
unsigned long long requestEnd;
unsigned long long pageNumber;
nuint32 firstByte;
struct largeReadControl* lrc;
nuint32 was_read;
struct largeReadControlFrag* lrcf_base;
nuint8 cacheShift;
struct nwconnection* conn;
nuint32 pagesRead;
nuint32 cacheBlockSize;
struct fh2* nssFH2;
struct fh2* nssFH1;
struct semaphore readDoneSema;
struct nxt* fh;
struct largeReadControlFrag* lrcf;
nuint32 readBytes;
file_offset = rq->offset;
read_length = rq->length > 65536 ? 65536 : rq->length;
nssFH1 = nssFD->nssFH;
__LBL_sWait(&nssFH1->sema);
if (((nssFH1->volume->flags & zATTR_COW) == 0) || ((nssFD->x2C & 4) == 0) || ((nssFH2 = nssFH1->altFH) == NULL)) {
nssFH2 = NULL;
file_size = nssFH1->file_size;
} else {
__LBL_sWait(&nssFH2->sema);
file_size = nssFH2->file_size;
}
if (file_size <= file_offset) {
__LBL_cntSignal(&ReserveResource, 32);
if (nssFH2) {
__LBL_sSignal(&nssFH2->sema);
}
__LBL_sSignal(&nssFH1->sema);
*(nuint64*)workspace = 0;
send->ReplyKeep(info, 0, 1, workspace, 8);
goto quit;
}
if (file_size < file_offset + read_length) {
read_length = file_size - file_offset;
}
cacheShift = nssFH1->cacheShift;
cacheBlockSize = 1 << cacheShift;
firstByte = file_offset & (cacheBlockSize - 1);
// asm __volatile__ (" int $3\n");
pageNumber = shr(file_offset, cacheShift);
readBytes = cacheBlockSize - firstByte;
requestEnd = file_offset + read_length - 1;
requestEnd = shr(requestEnd, cacheShift) - pageNumber;
conn = (**NW_connectionTable)[zInfo.connection];
if (requestEnd > conn->maxReadCacheBuf) {
read_length = (conn->maxReadCacheBuf - 1) << cacheShift;
}
if (read_length > conn->ncpDataSize - 8) {
read_length = conn->ncpDataSize - 8;
}
fh = &nssFH1->locks;
if (fh->next != fh) {
if (COMN_IsSharedByteRange(&zInfo, nssFH1, file_offset, read_length)) {
SetErrno(&zInfo, zERR_IOLOCK_ERROR);
if (nssFH2) {
__LBL_sSignal(&nssFH2->sema);
}
__LBL_sSignal(&nssFH1->sema);
goto errexit;
}
}
lrc = conn->largeReadControl;
lrc->info = info;
lrc->connNum = connNum;
lrc->send = send;
lrcf_base = lrc->frags;
lrcf_base->cacheBlock = NULL;
lrcf_base->fragLen = 8;
lrcf_base->fragAddr = lrcf_base->buffer;
*(unsigned long long*)(lrcf_base->buffer) = read_length;
was_read = 0;
readDoneSema.queue = 0;
readDoneSema.value = 0;
readDoneSema.data = &zInfo;
pagesRead = 0;
lrcf = lrcf_base + 1;
while (1) {
struct fh2* nssFH;
struct cacheblk* cacheBlock;
if (readBytes > read_length) {
readBytes = read_length;
}
if (!--PeriodicYieldCount) {
++Inst.readYieldRequests;
PeriodicYieldCount = 16;
CYieldIfNeeded();
}
if (nssFH2 && COMN_ReadSnapOrDontCopyToSnap(nssFH1, pageNumber)) {
nssFH = nssFH2;
} else {
nssFH = nssFH1;
}
cacheBlock = fastReadCache(&nssFH->netwareFH, pageNumber);
if (cacheBlock) {
cacheBlock->pinCount++;
cacheRelease(cacheBlock);
lrcf->cacheBlock = cacheBlock;
lrcf->fragAddr = cacheBlock->address + firstByte;
} else {
struct LB_async* req;
readDoneSema.value++;
req = LB_getAsyncio();
req->errorCode = 0;
req->netwareFH = &nssFH->netwareFH;
req->cacheBlock = NULL;
req->x50 = 0;
req->x54 = 0;
req->frag = lrcf;
req->sema = &readDoneSema;
req->pageNumber = pageNumber;
lrcf->fragAddr = (void*)firstByte;
asyncReadFileBlk(req, readAsyncCallback);
}
lrcf->fragLen = readBytes;
lrcf++;
was_read += readBytes;
read_length -= readBytes;
if (read_length == 0) {
break;
}
pageNumber++;
pagesRead++;
firstByte = 0;
readBytes = 1 << nssFH1->x94;
}
lrc->fragCount = pagesRead + 2;
++nssFH1->opsCount;
if (__LBL_xIsLocked(&readDoneSema)) {
__LBL_xWait(&readDoneSema);
__LBL_xSignal(&readDoneSema);
}
__LBL_cntSignal(&ReserveResource, 32);
if (nssFH2) {
__LBL_sSignal(&nssFH2->sema);
}
__LBL_sSignal(&nssFH1->sema);
if (zInfo.errorcode) {
COMN_Release(&nssFH1);
/* __LBL_cntSignal(&ReserveResource, 32); */
releaseReadReply(lrc);
send->ReplyKeepNoFragments(info, NSS2NCPError(zERR_HARD_READ_ERROR));
goto quit;
}
Inst.readBytes += was_read;
if (zInfo.conn) {
zInfo.conn->bytesRead += was_read;
}
// asm __volatile__ (" int $3\n");
send->ReplyReleaseWithFragments(connNum, info, sendDone);
if (pagesRead == pageNumber - nssFD->nextReadAheadPage) {
if (pagesRead) {
nssFD->x2D >>= pagesRead;
nssFD->nextReadAheadPage = pageNumber + 1;
}
if (nssFD->x2D == 0) {
asyncReadAhead(nssFD);
}
}
COMN_Release(&nssFH1);
goto quit;
}
}
errexit:;
__LBL_cntSignal(&ReserveResource, 32);
send->ReplyKeepNoFragments(info, NSS2NCPError(zInfo.errorcode));
quit:;
COMN_DoReleaseFileHandleIDP(&zInfo, &zFile);
nssReadExit++;
return;
}
static void NWSAGetSize(struct ncpReqInfo* info, struct ncpSend* send, struct fhReq* rq,
void* workspace, nuint32 workspaceLen) {
struct fh* nssFD;
nuint32 connNum;
struct zComnFile zFile;
struct zComnInfo zInfo;
nssGetSizeEnter++;
zFile.fileHandle = rq->filehandle_h;
zFile.nssHandle = 0;
connNum = info->conn;
zInfo.errorcode = 0;
zInfo.connection = connNum;
zInfo.conn = NULL;
zInfo.reserved2 = 0;
zInfo.reserved3 = 2;
__LBL_cntWait(&ReserveResource, 32);
if (zFile.nssHandle == NULL) {
nssFD = COMN_DoResolveFileHandle(&zInfo, &zFile);
} else {
nssFD = zFile.nssHandle;
}
if (nssFD) {
struct fh2* nssFH2;
struct fh2* nssFH1;
nssFH1 = nssFD->nssFH;
__LBL_sWait(&nssFH1->sema);
if (((nssFH1->volume->flags & zATTR_COW) == 0) || ((nssFD->x2C & 4) == 0) || ((nssFH2 = nssFH1->altFH) == NULL)) {
nssFH2 = NULL;
*(nuint64*)workspace = nssFH1->file_size;
} else {
__LBL_sWait(&nssFH2->sema);
*(nuint64*)workspace = nssFH2->file_size;
}
__LBL_cntSignal(&ReserveResource, 32);
if (nssFH2) {
__LBL_sSignal(&nssFH2->sema);
}
__LBL_sSignal(&nssFH1->sema);
send->ReplyKeep(info, 0, 1, workspace, 8);
} else {
__LBL_cntSignal(&ReserveResource, 32);
send->ReplyKeepNoFragments(info, NSS2NCPError(zInfo.errorcode));
}
COMN_DoReleaseFileHandleIDP(&zInfo, &zFile);
nssGetSizeExit++;
return;
}
static void nss64NCP(struct ncpReqInfo* i, struct ncpSend* ncpsend, nuint32 unknown, nuint32 reqLen,
void* workspace, nuint32 workspaceLen) {
nuint32 err;
struct nwconnection* conn;
conn = (**NW_connectionTable)[i->conn];
/* Why this happens?! Netware's NCP write suffers from this bug too - you can force it to
write random parts of memory to disk by issuing write command which says that
60KB of data is going to be written... MTU..60000 bytes will contain random garbage */
/* We prevent this by truncating request */
err = 0x7E;
// asm __volatile__ (" int $3\n");
if (reqLen < offsetof(struct ncpReqInfo, request) + 2) {
goto errquit;
}
reqLen -= offsetof(struct ncpReqInfo, request) - 2;
if (reqLen > conn->ncpDataSize - 8) {
if (i->request[1] == 2) {
reqLen = conn->ncpDataSize - 8;
} else {
goto errquit;
}
}
switch (i->request[1]) {
case 1:
if (reqLen < 8 + 8 + 8) {
break;
}
{
struct fhOffsLen* rq = (struct fhOffsLen*)(i->request + 2);
err = 0xFF;
if (rq->rsvd != 0) {
break;
}
err = 0x84;
if (((rq->filehandle_l - 1U) & 0xFFFF) != (rq->filehandle_h & 0xFFFF)) {
break;
}
if (!(rq->filehandle_h & 0x80000000U)) {
/* only NSS handles allowed... We have to do some fallback here... */
break;
}
NWSARead(i, ncpsend, rq, workspace, workspaceLen);
}
return;
case 2:
if (reqLen < 8 + 8 + 8) {
break;
}
reqLen -= 24;
{
struct zComnInfo info;
struct zComnFile file;
struct zComnPosition pos;
struct fhOffsLen* rq = (struct fhOffsLen*)(i->request + 2);
// asm __volatile__ (" int $3\n");
if (rq->length > reqLen) {
rq->length = reqLen;
}
err = 0xFF;
if (rq->rsvd != 0) {
break;
}
err = 0x84;
if (((rq->filehandle_l - 1U) & 0xFFFF) != (rq->filehandle_h & 0xFFFF)) {
break;
}
if (!(rq->filehandle_h & 0x80000000U)) {
/* only NSS handles allowed... We have to do some fallback here... */
break;
}
Inst.writeRequests++;
info.errorcode = 0;
info.connection = i->conn;
info.conn = NULL;
info.reserved2 = 0;
info.reserved3 = 2;
file.fileHandle = rq->filehandle_h;
file.nssHandle = NULL;
pos.written = 0;
if (rq->length) {
pos.offset = rq->offset;
pos.length = rq->length;
pos.buffer = rq->data;
pos.reserved1 = 0;
COMN_Write(&info, &pos, &file);
Inst.writtenBytes += pos.written;
if (info.conn) {
info.conn->bytesWritten += pos.written;
}
} else {
COMN_SetDataSize(&info, &file, rq->offset, 0);
}
if (info.errorcode) {
ncpsend->ReplyKeepNoFragments(i, NSS2NCPError(info.errorcode));
} else {
unsigned long long len = pos.written;
ncpsend->ReplyKeep(i, 0, 1, &len, sizeof(len));
}
COMN_DoReleaseFileHandleIDP(&info, &file);
}
return;
case 3:
if (reqLen < 8) {
break;
}
{
struct fhReq* rq = (struct fhReq*)(i->request + 2);
err = 0xFF;
if (rq->rsvd != 0) {
break;
}
err = 0x84;
if (((rq->filehandle_l - 1U) & 0xFFFF) != (rq->filehandle_h & 0xFFFF)) {
break;
}
if (!(rq->filehandle_h & 0x80000000U)) {
/* only NSS handles allowed... We have to do some fallback here... */
break;
}
NWSAGetSize(i, ncpsend, rq, workspace, workspaceLen);
}
return;
default:
break;
}
errquit:;
ncpsend->ReplyKeepNoFragments(i, err);
}
static void termFn(int dummy) {
if (ncpHooked) {
ncpHooked = 0;
ReleaseNCPVerb(NCPRTag, NCP_NSS64Verb);
}
}
int main(int argc, char* argv[]) {
int err;
signal(SIGINT, termFn);
signal(SIGTERM, termFn);
InitNSS2NCPErrorTable();
nlmHandle = GetNLMHandle();
// AllocRTag = AllocateResourceTag(nlmHandle, "Buffer memory", AllocSignature);
NCPRTag = AllocateResourceTag(nlmHandle, "64-bit Linux NCP calls", NCPVerbRTag);
err = HookNCPVerb(NCPRTag, NCP_NSS64Verb, nss64NCP);
if (err) {
printf("Cannot hook NCP 0x%02X, error = %u!\r\n", NCP_NSS64Verb, err);
return 0;
}
ncpHooked = 1;
ExitThread(TSR_THREAD, 0);
}

22
contrib/nss64/ncphook.def Normal file
View File

@@ -0,0 +1,22 @@
SCREENNAME "none"
VERSION 1 0 1
COPYRIGHT "(c) 2001 Petr Vandrovec"
DESCRIPTION "NCPs for 64bit file access"
OS_DOMAIN
PSEUDOPREEMPTION
IMPORT memset,printf,signal
IMPORT _SetupArgv,_StartNLM,_TerminateNLM
IMPORT AllocateResourceTag,ExitThread,GetNLMHandle,CYieldIfNeeded
IMPORT HookNCPVerb,ReleaseNCPVerb
IMPORT COMN_Write,COMN_SetDataSize,COMN_DoReleaseFileHandleIDP,COMN_Release
IMPORT COMN_IsSharedByteRange,COMN_DoResolveFileHandle,COMN_ReadSnapOrDontCopyToSnap
IMPORT asyncReadAhead,asyncReadFileBlk,fastReadCache,mailInterrupt
IMPORT cacheUnpinned,cacheRelease
IMPORT LB_getAsyncio,LB_freeAsyncio
IMPORT LBL_sSignal,LBL_sWait,LBL_cntSignal,LBL_cntWait,LBL_xSignal,LBL_xWait
IMPORT SetErrno
IMPORT ReserveResource,NW_connectionTable,PeriodicYieldCount
#MODULE CLIB,MBNWSA
INPUT prelude.o
INPUT ncphook.o
OUTPUT ncphook.nlm

223
contrib/nss64/ncphook.h Normal file
View File

@@ -0,0 +1,223 @@
#ifndef __NCP_HOOK_H__
#define __NCP_HOOK_H__
#include <ntypes.h>
#include <nwtypes.h>
typedef unsigned long long nuint64;
LONG AllocateResourceTag(LONG NLMHandle, const unsigned char* description, LONG resourceType);
unsigned int GetNLMHandle(void);
void* Alloc(LONG len, nuint32 rTag);
#define PACKED __attribute__((packed))
#define NCPVerbRTag 0x5650434E
struct ncpReqInfo {
nuint8 reserved1[33] PACKED;
nuint16 conn PACKED;
nuint8 task PACKED;
nuint8 request[1] PACKED;
};
struct ncpConnInfo {
nuint8 reserved1[0x86] PACKED;
nuint32 bytesRead PACKED;
nuint32 bytesWritten PACKED;
};
struct ncpSend {
void (*ReplyKeep)(struct ncpReqInfo*, nuint32 error, nuint32 fragCount, void* addr, nuint32 len, ...);
void (*ReplyDisgard)(struct ncpReqInfo*, nuint32 error, nuint32 fragCount, void* addr, nuint32 len, ...);
void (*ReplyKeepNoFragments)(struct ncpReqInfo*, nuint32 error);
void* (*GetReplyKeepBuffer)(struct ncpReqInfo*);
void (*ReplyKeepBufferFilledOut)(struct ncpReqInfo*, nuint32 len);
void (*ReplyKeepNoFragmentsWithStation)(nuint32 conn, nuint32 error);
void (*ReplyUsingAllocBuffer)(struct ncpReqInfo*, nuint32 error, void* base, nuint32 len);
void (*ReplyKeepWithBufferAndFreePtr)(struct ncpReqInfo*, nuint32 error, void* toFree, nuint32 fragCount, void* addr, nuint32 len, ...);
void (*ReplyReleaseWithFragments)(nuint32 conn, struct ncpReqInfo*, void (*fn)());
};
nuint32 HookNCPVerb(nuint32 rTag, nuint32 ncpVerb, void (*ncpFunc)(struct ncpReqInfo*, struct ncpSend*, nuint32, nuint32 reqLen,
void* workspace, nuint32 workspaceLen));
nuint32 ReleaseNCPVerb(nuint32 rTag, nuint32 ncpVerb);
struct cacheblk {
void* address PACKED;
nuint8 y4[0x7B-0x04] PACKED;
nuint8 pinCount PACKED;
};
void cacheUnpinned(struct cacheblk*);
struct ncpSendCacheCB {
nuint8 y0[0x24-0x00] PACKED;
nuint32 connNum PACKED;
};
struct largeReadControlFrag {
nuint8 y0[0x04-0x00] PACKED;
void* fragAddr PACKED;
struct cacheblk* cacheBlock PACKED;
nuint32 fragLen PACKED;
nuint8 y10[0x14-0x10] PACKED;
nuint8 buffer[12] PACKED;
};
struct largeReadControl {
struct ncpReqInfo* info PACKED;
nuint32 connNum PACKED;
struct ncpSend* send PACKED;
nuint8 y0C[0x14-0x0C] PACKED;
nuint32 fragCount PACKED;
nuint32 y18 PACKED;
struct largeReadControlFrag frags[0] PACKED;
};
struct semaphore {
void* queue PACKED;
int value PACKED;
void* data PACKED;
};
struct nxt {
struct nxt* next PACKED;
};
struct nssVolume {
nuint8 y[0x168-0x00] PACKED;
nuint32 flags PACKED;
};
struct fh2 {
nuint8 y0[0x08-0x00] PACKED;
unsigned long long file_size PACKED;
nuint8 y10[0x14-0x10] PACKED;
nuint8 cacheShift PACKED;
nuint8 y15[0x1C-0x15] PACKED;
nuint32 opsCount PACKED;
nuint8 y20[0x38-0x20] PACKED;
struct fh2* altFH PACKED;
nuint8 y3C[0x44-0x3C] PACKED;
struct nssVolume* volume PACKED;
nuint8 y48[0x4C-0x48] PACKED;
nuint32 netwareFH PACKED;
nuint8 y50[0x60-0x50] PACKED;
struct semaphore sema PACKED;
nuint8 y6C[0x94-0x6C] PACKED;
nuint8 x94 PACKED;
nuint8 y95[0xD8-0x95] PACKED;
struct nxt locks PACKED;
};
struct fh {
nuint8 y0[0x0C-0x00] PACKED;
struct fh2* nssFH PACKED;
nuint8 y10[0x24-0x10] PACKED;
nuint32 accessMode PACKED;
nuint8 y28[0x2C-0x28] PACKED;
nuint8 x2C PACKED;
nuint8 x2D PACKED;
nuint8 y2E[0x38-0x2E] PACKED;
nuint32 nextReadAheadPage PACKED;
};
struct zComnInfo {
nuint32 errorcode PACKED;
nuint32 connection PACKED;
struct ncpConnInfo* conn PACKED;
nuint32 reserved2 PACKED;
nuint32 reserved3 PACKED;
};
struct zComnPosition {
unsigned long long offset PACKED;
nuint32 length PACKED;
void* buffer PACKED;
nuint32 reserved1 PACKED;
nuint32 written PACKED;
};
struct zComnFile {
nuint32 fileHandle PACKED;
struct fh* nssHandle PACKED;
};
struct nwconnection {
nuint8 y0[0x180] PACKED;
nuint32 maxReadCacheBuf PACKED;
struct largeReadControl* largeReadControl PACKED;
nuint32 ncpDataSize PACKED;
};
struct LB_async {
nuint8 y0[0x0C-0x00] PACKED;
struct semaphore* sema PACKED;
nuint8 y10[0x3C-0x10] PACKED;
nuint32 errorCode PACKED;
nuint32* netwareFH PACKED;
struct cacheblk* cacheBlock PACKED;
nuint8 y48[0x4C-0x48] PACKED;
nuint32 pageNumber PACKED;
nuint32 x50 PACKED;
nuint8 x54 PACKED;
nuint8 y55[0x6C-0x55] PACKED;
struct largeReadControlFrag* frag PACKED;
};
struct {
nuint8 y0[0x54-0x00] PACKED;
nuint32 readYieldRequests PACKED;
nuint8 y58[0x5C-0x58] PACKED;
nuint32 readRequests PACKED;
nuint32 writeRequests PACKED;
nuint32 readBytes PACKED;
nuint32 writtenBytes PACKED;
} Inst;
extern struct nwconnection* (**NW_connectionTable)[];
extern struct semaphore ReserveResource;
extern int PeriodicYieldCount;
extern void LBL_sSignal(struct semaphore*);
extern void LBL_sWait(struct semaphore*);
extern void LBL_cntSignal(struct semaphore*, int);
extern void LBL_cntWait(struct semaphore*, int);
extern void LBL_xSignal(struct semaphore*);
extern void LBL_xWait(struct semaphore*);
extern void mailInterrupt(void (*)(struct cacheblk*), struct cacheblk*);
extern struct cacheblk* fastReadCache(nuint32*, nuint32 block);
extern void asyncReadFileBlk(struct LB_async*, void (*)(struct LB_async*));
extern void cacheRelease(struct cacheblk*);
extern void asyncReadAhead(struct fh*);
extern void SetErrno(struct zComnInfo*, nuint32 nssErrorCode);
extern void CYieldIfNeeded(void);
extern void LB_freeAsyncio(struct LB_async*);
extern struct LB_async* LB_getAsyncio(void);
extern void COMN_Write(struct zComnInfo*, struct zComnPosition*, struct zComnFile*);
extern void COMN_SetDataSize(struct zComnInfo*, struct zComnFile*, unsigned long long offs, nuint32 flags);
extern struct fh* COMN_DoResolveFileHandle(struct zComnInfo*, struct zComnFile*);
extern void COMN_DoReleaseFileHandleIDP(struct zComnInfo*, struct zComnFile*);
extern int COMN_IsSharedByteRange(struct zComnInfo*, struct fh2*, unsigned long long offs, unsigned long long len);
extern int COMN_ReadSnapOrDontCopyToSnap(struct fh2*, unsigned int page);
extern void COMN_Release(struct fh2**);
#define zRR_READ_ACCESS 0x00000001
#define zERR_HARD_READ_ERROR 20101
#define zERR_NO_READ_PRIVILEGE 20861
#define zERR_IOLOCK_ERROR 20900
#define zATTR_COW 0x00040000
#define NCP_NSS64Verb 0xE5
#endif /* __NCP_HOOK_H__ */

49
contrib/nss64/prelude.c Normal file
View File

@@ -0,0 +1,49 @@
/*
* prelude.c
* Copyright (c) 2001 Petr Vandrovec <vandrove@vc.cvut.cz>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
extern void _TerminateNLM(unsigned int, unsigned int, unsigned int);
extern int _SetupArgv(void*);
extern int _StartNLM(void*, void*, const char*,
const char*, unsigned int, void*,
int (*)(), unsigned int, unsigned int,
unsigned int*, void*);
extern int main(int argc, char* argv[]);
/* unsigned int _argc = 0; */
static unsigned int NLMID = 0;
static int _cstart_(void) {
return _SetupArgv(main);
}
void _Stop(void) {
_TerminateNLM(NLMID, 0, 5);
}
unsigned int _Prelude(void* NLMHandle, void* errorScreen, const char* commandLine,
const char* loadDirectoryPath,
unsigned int uninitializedDataLength, void* NLMFileHandle,
int (*readRoutineP)(), unsigned int customDataOffset,
unsigned int customDataSize) {
return _StartNLM(NLMHandle, errorScreen, commandLine, loadDirectoryPath,
uninitializedDataLength, NLMFileHandle, readRoutineP, customDataOffset,
customDataSize, &NLMID, _cstart_);
}

View File

@@ -0,0 +1,48 @@
INSTALLATION:
CONTENT OF THE ZIP:
Directories:
REALDS8: snapin that recognizes NDS8 Unix attributes see the README inside.
PAMNCP REG Registry entries to add this snapin to current user.
PAMNCP DLL The actual snapin DLL
DUMMYDS8: snapin for testing on DS7 with dummy attributes (LINUX:*), see the README inside.
PAMNCP REG Registry entries to add this snapin to current user.
PAMNCP DLL The actual snapin DLL
DLLS: modules were compiled with BC++4.5. Make sure that you have CW3215.DLL
if you are going to use precompiled modules.
Source code are for Borland C 4.5.
I am not sure that the snapin code can be provided under GPL since it
use the copyrighted NDSK API calls and the toolbox to make "snapins".
If you need to recompile , you must have subscribed to developer.novell.com (free)
to be able to download the latest NDK for C.
As far as the snapin toolkit, it can be found at the follwing place:
------------------------------------------------------------------------
http://developer.novell.com/graveyard/index.htm
"downloads from this page are provided as a courtesy to our development
community. From this page, you can access utilities, APIs, and some source
code for items"that are no longer in active development at Novell."
-------------------------------------------------------------------------
Unzip this file to a temporary directory and proceed as follow, depending of your version of NWAdmin. If you run several versions of NWAdmin, repeat the process for each one.
NWADMIN95.EXE:
1. copy the appropriate pamncp.dll in the sys:public/win95 of your servers.
2. Check that snapin32.dll AND cw3220.dll are there. If absent, make sure they are in a directory of your path, or copy these files from a recent Novell distribution. To sys:public/win95.
3. Double-click on the pamncp.reg icon to register the snapin in the Current User part of the local registry. Note that this step should be done for every user running this snapin. My solution is to create a NAL application for NWadmin95 and to import the pamncp.reg file into its registry settings page.
NWADMINNT.EXE
1. copy the pamncp.dll in the sys:public/winnt of your servers.
2. steps 2 and 3 are identical to the NWADMIN95.EXE installation.
NWADMIN32:
1. copy the pamncp.dll in the sys:public/win32/snapins directory. No registry entries are needed.
A more complete documentation is **under progress** at
http://cipcinsa.insa-lyon.fr/ppollet/pamncp/
Patrick Pollet
Feb 05/02/2001

View File

@@ -0,0 +1,77 @@
This VERSION of the snapin is for uses on pré-DS8
shcemas
It *may* uses the following Unix properties
that must be created with Schemax
with the following names and syntaxes
and associated to USER and GROUP classes.
If you don't like extending the schema, don't create
theses attributes and stuff everything in L ( Location
attribute) visible on the Identification page of NWADmin.
For USERS:
"LINUX:UID" SYN_INTEGER
"LINUX:Primary GroupName" SYN_DIST_NAME
"LINUX:Primary GroupID" SYN_INTEGER
"LINUX:GID" SYN_INTEGER
"LINUX:Login Shell" SYN_CE_STRING
"LINUX:Home Directory" SYN_CE_STRING
"LINUX:Comments" SYN_CI_STRING
for GROUPS:
"LINUX:GID" SYN_INTEGER
// Either way , the snapin will always try to get *missing* data
// from the L attribute
// Of course NDS8 real or dummy attributes have priority, that is
// if both exists "NDS8" attribute will keep their values and the
// L attribute value will be erased when saving back the NDS.
So you can migrate slowly...
User:
U:nnn Unix UID
G:nnn Unix GID
S:/.../... Unix Shell
H:/.../.... Unix Home
Group:
G:nnn Unix GID
Currently the following attributes recognized by the PAM module
are NOT modifiable by this snapin. You should modify them
using the "built-in" string editor of NWADmin under the Identification Page
( Location attribute):
User:
O: Unix or NDS name of other group ( if that group is a NDS name
and has a N:nnnn attribute, this value will be used for
translation to Unix name, otherwise, a "proper Unix name"
will be made from the NDS one ( remove context part,
skip all spaces and illegal chars and prepend a Z if its
starts by a digit ( this is required by useradd/usermod
that misbehave with a group name starting with a digit)
C: Unix comment, added to the Gecos field after the full name
(-comma separator added)
P: Primary group name. So far the snapin works with the numeric
Primary Group ID for user's. It may change in the next release.
Of course any other L (location) strings is left untouched by the snapin
( no error message)!
Patrick Pollet
Feb 05/02/2001

Binary file not shown.

2357
contrib/pam-snapin/pamncp.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
LIBRARY PAMNCP
DESCRIPTION 'NWAdmin Snapin for PAM NCP authentication module: 32 bit SnapIn'
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE SINGLE
HEAPSIZE 16000
EXPORTS InitSnapin
SnapinPamNcpProcUser
SnapinPamNcpProcGroup
PamNcpSnapinHelpDlg
PamNcpSnapinTraceDlg

Binary file not shown.

102
contrib/pam-snapin/pamncp.h Normal file
View File

@@ -0,0 +1,102 @@
#ifndef __PAMNCP_H
#define IDC_DEFAULT 196
#define IDC_UNHERITED 197
#define IDC_VERSION 198
#define IDC_VERSION_NUM 199
#define IDC_EDIT_UID 200
#define IDC_EDIT_HOME 201
#define IDC_EDIT_GID 202
#define IDC_COMBO_SHELL 203
#define IDC_EDIT_SHELL 204
#define IDC_BASIC 205
#define IDC_UID_LBL 210
#define IDC_HOME_LBL 211
#define IDC_SHELL_LBL 212
#define IDC_GID_LBL 213
#define IDC_GNAME_LBL 214
#define IDC_EDIT_GNAME 215
#define IDC_EDIT_GID1 216
#define IDC_GID1_LBL 217
#define IDC_ZF_A 102
#define IDC_ZF_B 103
#define IDC_ZF_C 104
#define IDC_ZF_D 105
#define IDC_ZF_E 106
#define IDC_ZF_F 107
#define IDC_ZF_G 108
#define IDC_ZF_H 109
#define IDC_ZF_I 110
#define IDC_ZF_J 111
#define IDC_ZF_K 112
#define IDC_ZF_L 113
#define IDC_ZF_M 114
#define IDC_ZF_O 115
#define IDC_ZF_N 116
#define IDC_ZF_P 117
#define IDC_ZF_Q 118
#define IDC_ZF_R 119
#define IDC_ZF_S 120
#define IDC_ZF_T 121
#define IDC_ZF_U 122
#define IDC_ZF_V 123
#define IDC_ZF_W 124
#define IDC_ZF_X 125
#define IDC_ZF_Y 126
#define IDC_ZF_Z 127
#define IDC_ZF_0 128
#define IDC_ZF_1 129
#define IDC_ZF_2 130
#define IDC_ZF_3 131
#define IDC_ZF_4 132
#define IDC_ZF_5 133
#define IDC_ZF_1H 165
#define IDC_ZF_2H 164
#define IDC_ZF_3H 163
#define IDC_ZF_4H 162
#define IDC_ZF_5H 161
#define IDC_ZF_0H 160
#define IDC_ZF_ZH 159
#define IDC_ZF_YH 158
#define IDC_ZF_XH 157
#define IDC_ZF_WH 156
#define IDC_ZF_VH 155
#define IDC_ZF_UH 154
#define IDC_ZF_TH 153
#define IDC_ZF_SH 152
#define IDC_ZF_RH 151
#define IDC_ZF_QH 150
#define IDC_ZF_PH 149
#define IDC_ZF_OH 148
#define IDC_ZF_NH 147
#define IDC_ZF_MH 146
#define IDC_ZF_LH 145
#define IDC_ZF_KH 144
#define IDC_ZF_JH 143
#define IDC_ZF_IH 142
#define IDC_ZF_HH 141
#define IDC_ZF_GH 140
#define IDC_ZF_FH 139
#define IDC_ZF_EH 138
#define IDC_ZF_DH 137
#define IDC_ZF_CH 136
#define IDC_ZF_BH 135
#define IDC_ZF_AH 134
#define IDC_MEMO 300
#define IDC_ADD_LINE 400
#define __PAMNCP_H
#endif

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,147 @@
#
# Borland C++ IDE generated makefile
#
.AUTODEPEND
#
# Borland C++ tools
#
IMPLIB = Implib
BCC32 = Bcc32 +BccW32.cfg
TLINK32 = TLink32
TLIB = TLib
BRC32 = Brc32
TASM32 = Tasm32
#
# IDE macros
#
#
# Options
#
IDE_LFLAGS32 = -LC:\BC45\LIB
IDE_RFLAGS32 =
LLATW32_pamncpdlib = -Tpd -aa -c -LC:\BC45\LIB;C:\NOVELL\NDS\NWSDK\LIB\WIN32\BORLAND
RLATW32_pamncpdlib = -w32
BLATW32_pamncpdlib =
CNIEAT_pamncpdlib = -IC:\BC45\INCLUDE;C:\NOVELL\NDK\NWSDK\INCLUDE -D_RTLDLL;_BIDSDLL;_OWLDLL;_OWLALLPCH;
LNIEAT_pamncpdlib = -x
LEAT_pamncpdlib = $(LLATW32_pamncpdlib)
REAT_pamncpdlib = $(RLATW32_pamncpdlib)
BEAT_pamncpdlib = $(BLATW32_pamncpdlib)
CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib =
LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib =
RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib =
BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib =
CEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib = $(CEAT_pamncpdlib) $(CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib)
CNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib = -IC:\BC45\INCLUDE;C:\NOVELL\NDK\NWSDK\INCLUDE -D_RTLDLL;_BIDSDLL;_OWLDLL;_OWLALLPCH;
LNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib = -x
LEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib = $(LEAT_pamncpdlib) $(LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib)
REAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib = $(REAT_pamncpdlib) $(RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib)
BEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib = $(BEAT_pamncpdlib) $(BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbcalwin32dlib)
CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib =
LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib =
RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib =
BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib =
CEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib = $(CEAT_pamncpdlib) $(CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib)
CNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib = -IC:\BC45\INCLUDE;C:\NOVELL\NDK\NWSDK\INCLUDE -D_RTLDLL;_BIDSDLL;_OWLDLL;_OWLALLPCH;
LNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib = -x
LEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib = $(LEAT_pamncpdlib) $(LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib)
REAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib = $(REAT_pamncpdlib) $(RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib)
BEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib = $(BEAT_pamncpdlib) $(BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbclxwin32dlib)
CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib =
LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib =
RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib =
BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib =
CEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib = $(CEAT_pamncpdlib) $(CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib)
CNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib = -IC:\BC45\INCLUDE;C:\NOVELL\NDK\NWSDK\INCLUDE -D_RTLDLL;_BIDSDLL;_OWLDLL;_OWLALLPCH;
LNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib = -x
LEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib = $(LEAT_pamncpdlib) $(LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib)
REAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib = $(REAT_pamncpdlib) $(RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib)
BEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib = $(BEAT_pamncpdlib) $(BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandblocwin32dlib)
CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib =
LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib =
RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib =
BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib =
CEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib = $(CEAT_pamncpdlib) $(CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib)
CNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib = -IC:\BC45\INCLUDE;C:\NOVELL\NDK\NWSDK\INCLUDE -D_RTLDLL;_BIDSDLL;_OWLDLL;_OWLALLPCH;
LNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib = -x
LEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib = $(LEAT_pamncpdlib) $(LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib)
REAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib = $(REAT_pamncpdlib) $(RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib)
BEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib = $(BEAT_pamncpdlib) $(BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbnetwin32dlib)
CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib =
LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib =
RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib =
BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib =
CEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib = $(CEAT_pamncpdlib) $(CLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib)
CNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib = -IC:\BC45\INCLUDE;C:\NOVELL\NDK\NWSDK\INCLUDE -D_RTLDLL;_BIDSDLL;_OWLDLL;_OWLALLPCH;
LNIEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib = -x
LEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib = $(LEAT_pamncpdlib) $(LLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib)
REAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib = $(REAT_pamncpdlib) $(RLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib)
BEAT_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib = $(BEAT_pamncpdlib) $(BLATW16_ddbddbddbnovellbndkbnwsdkblibbwin32bborlandbsnapin32dlib)
#
# Dependency List
#
Dep_pamncp = \
pamncp.lib
pamncp : BccW32.cfg $(Dep_pamncp)
echo MakeNode
pamncp.lib : pamncp.dll
$(IMPLIB) $@ pamncp.dll
Dep_pamncpddll = \
..\..\..\novell\ndk\nwsdk\lib\win32\borland\calwin32.lib\
..\..\..\novell\ndk\nwsdk\lib\win32\borland\clxwin32.lib\
..\..\..\novell\ndk\nwsdk\lib\win32\borland\locwin32.lib\
..\..\..\novell\ndk\nwsdk\lib\win32\borland\netwin32.lib\
..\..\..\novell\ndk\nwsdk\lib\win32\borland\snapin32.lib\
pamncp.obj\
pamncp.def\
pamncp.res
pamncp.dll : $(Dep_pamncpddll)
$(TLINK32) @&&|
/v $(IDE_LFLAGS32) $(LEAT_pamncpdlib) $(LNIEAT_pamncpdlib) +
C:\BC45\LIB\c0d32.obj+
pamncp.obj
$<,$*
..\..\..\novell\ndk\nwsdk\lib\win32\borland\calwin32.lib+
..\..\..\novell\ndk\nwsdk\lib\win32\borland\clxwin32.lib+
..\..\..\novell\ndk\nwsdk\lib\win32\borland\locwin32.lib+
..\..\..\novell\ndk\nwsdk\lib\win32\borland\netwin32.lib+
..\..\..\novell\ndk\nwsdk\lib\win32\borland\snapin32.lib+
C:\BC45\LIB\owlwfi.lib+
C:\BC45\LIB\bidsfi.lib+
C:\BC45\LIB\import32.lib+
C:\BC45\LIB\cw32i.lib
pamncp.def
|
$(BRC32) pamncp.res $<
pamncp.obj : pamncp.c
$(BCC32) -P- -c @&&|
$(CEAT_pamncpdlib) $(CNIEAT_pamncpdlib) -o$@ pamncp.c
|
pamncp.res : pamncp.rc
$(BRC32) $(IDE_RFLAGS32) $(REAT_pamncpdlib) $(CNIEAT_pamncpdlib) -R -FO$@ pamncp.rc
# Compiler configuration file
BccW32.cfg :
Copy &&|
-R
-v
-vi
-H
-H=pamncp.csm
-WD
-H"owl\owlpch.h"
| $@

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,128 @@
/****************************************************************************
PAMNCP.RC
produced by Borland Resource Workshop
*****************************************************************************/
#include "pamncp.h"
PAMNCP_UPAGE DIALOG 11, 21, 271, 249
STYLE 0x4L | WS_CHILD
FONT 8, "MS Sans Serif"
{
LTEXT "Unix uid:", IDC_UID_LBL, 7, 25, 30, 8
EDITTEXT IDC_EDIT_UID, 41, 23, 25, 12, WS_TABSTOP | WS_BORDER
LTEXT "Unix gid:", IDC_GID_LBL, 7, 43, 29, 8
EDITTEXT IDC_EDIT_GID, 41, 41, 25, 12, WS_TABSTOP | WS_BORDER
LTEXT "Unix home:", IDC_HOME_LBL, 90, 24, 37, 9
EDITTEXT IDC_EDIT_HOME, 131, 23, 119, 12, WS_TABSTOP | WS_BORDER
LTEXT "Unix shell:", IDC_SHELL_LBL, 93, 43, 33, 9
COMBOBOX IDC_COMBO_SHELL, 131, 39, 44, 56, CBS_DROPDOWN | WS_TABSTOP
EDITTEXT IDC_EDIT_SHELL, 183, 39, 66, 12, WS_TABSTOP | WS_BORDER | WS_GROUP
AUTOCHECKBOX "&Automount Netware home", IDC_ZF_A, 7, 70, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&Broadcast mode All", IDC_ZF_B, 7, 81, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Broadcast mode &Console", IDC_ZF_C, 7, 92, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&D reserved", IDC_ZF_D, 7, 103, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP
AUTOCHECKBOX "&E reserved", IDC_ZF_E, 7, 114, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "Allow &Ftp access", IDC_ZF_F, 7, 125, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&G reserved", IDC_ZF_G, 7, 136, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "Allow RS&H access", IDC_ZF_H, 7, 147, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Create ~/.nw&Infos file", IDC_ZF_I, 7, 158, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&J reserved", IDC_ZF_J, 7, 169, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "&K reserved", IDC_ZF_K, 7, 180, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "&L reserved", IDC_ZF_L, 7, 191, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP
AUTOCHECKBOX "Forward &Mail", IDC_ZF_M, 7, 202, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Create ~/.&Nwclient file", IDC_ZF_N, 7, 213, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&Overwrite ~/.nwclient file", IDC_ZF_O, 7, 224, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&Password in ~/.nwclient file", IDC_ZF_P, 7, 235, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&Q reserved", IDC_ZF_Q, 138, 70, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "Allow &Rlogin access", IDC_ZF_R, 138, 81, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Allow &Samba access", IDC_ZF_S, 138, 92, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Allow &Telnet access", IDC_ZF_T, 138, 103, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&U reserved", IDC_ZF_U, 138, 114, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "&Volative account", IDC_ZF_V, 138, 125, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "&W reserved", IDC_ZF_W, 138, 136, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "Allow &X access", IDC_ZF_X, 138, 147, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "&Y reserved", IDC_ZF_Y, 138, 158, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "&Z reserved", IDC_ZF_Z, 138, 169, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "Run zenscript &0 (opening)", IDC_ZF_0, 138, 180, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Run zenscript &1 (opening)", IDC_ZF_1, 138, 191, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Run zenscript &2 (opening)", IDC_ZF_2, 138, 202, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Run zenscript &3 (closing)", IDC_ZF_3, 138, 213, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Run zenscript &4 (closing)", IDC_ZF_4, 138, 224, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
AUTOCHECKBOX "Run zenscript &5 (closing)", IDC_ZF_5, 138, 235, 96, 10, BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_TABSTOP
LTEXT "Zenux Flags:", -1, 6, 58, 60, 8
LTEXT "Basic Unix properties:", IDC_BASIC, 7, 5, 190, 8
LTEXT "", IDC_VERSION, 195, 6, 22, 8
CONTROL "IDC_EDIT_DIR", -1, "static", SS_GRAYFRAME | WS_CHILD | WS_VISIBLE, 6, 16, 252, 39
CONTROL "", -1, "static", SS_GRAYFRAME | WS_CHILD | WS_VISIBLE, 5, 68, 255, 178
RTEXT "Text", IDC_VERSION_NUM, 200, 4, 47, 9
CONTROL "", -1, "static", SS_GRAYFRAME | WS_CHILD | WS_VISIBLE, 126, 70, 4, 172
AUTOCHECKBOX "", IDC_ZF_AH, 112, 70, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_BH, 112, 81, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_CH, 112, 92, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_DH, 112, 103, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_EH, 112, 114, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_FH, 112, 125, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_GH, 112, 136, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_HH, 112, 147, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_IH, 112, 158, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_JH, 112, 169, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_KH, 112, 180, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_LH, 112, 191, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_MH, 112, 202, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_NH, 112, 213, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_QH, 243, 70, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_RH, 243, 81, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_SH, 243, 92, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_TH, 243, 103, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_UH, 243, 114, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_VH, 243, 125, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_WH, 243, 136, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_XH, 243, 147, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_YH, 243, 158, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_ZH, 243, 169, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_0H, 243, 180, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_1H, 243, 191, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_2H, 243, 202, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_3H, 243, 213, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_OH, 112, 224, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_4H, 243, 224, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_PH, 112, 235, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
AUTOCHECKBOX "", IDC_ZF_5H, 243, 235, 9, 10, BS_AUTOCHECKBOX | NOT WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Show unherited", IDC_UNHERITED, 53, 56, 62, 12, WS_TABSTOP
LTEXT "Unix gid:", IDC_GID1_LBL, 18, 34, 29, 8
EDITTEXT IDC_EDIT_GID1, 52, 32, 25, 12, WS_TABSTOP | WS_BORDER
LTEXT "Unix name:", IDC_GNAME_LBL, 85, 33, 37, 9
EDITTEXT IDC_EDIT_GNAME, 126, 32, 119, 12, WS_TABSTOP | WS_BORDER
PUSHBUTTON "where is the profile", IDC_DEFAULT, 135, 56, 120, 12, BS_LEFTTEXT | WS_TABSTOP
}
HELP_DLG DIALOG 40, 34, 293, 173
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Pam Ncp Snapin Help"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "OK", IDOK, 126, 150, 50, 14
EDITTEXT IDC_MEMO, 7, 22, 280, 119, ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
CTEXT "Text", IDC_VERSION, 36, 6, 220, 8
}
TRACE_DLG DIALOG 40, 34, 293, 173
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Pam Ncp Snapin Trace"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "OK", IDOK, 126, 150, 50, 14
CTEXT "Text", IDC_VERSION, 36, 6, 220, 8
PUSHBUTTON "Cache", IDC_ADD_LINE, 205, 150, 50, 14, NOT WS_VISIBLE | WS_TABSTOP
EDITTEXT IDC_MEMO, 15, 19, 268, 122, ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,54 @@
This snapin uses the real Unix properties of DS8 and above
with the following names and syntaxes
"UNIX:UID"
"UNIX:Primary GroupName"
"UNIX:Primary GroupID"
"UNIX:GID"
"UNIX:Login Shell"
"UNIX:Comments"
"UNIX:Home Directory"
You can use it on non DS8 schémas in that case, you must stuff
Unix properties in the L attribute ( Location string under thhe
Identification page of NWAdmin32).
Either way , the snapin will always try to get *missing* data
from the L attribute
Of course NDS8 (real or dummy) attributes have priority, that is
if both exists NDS8 attribut will keep their values and the
L attribute value will be erased when saving the NDS.
User:
U:nnn Unix UID
G:nnn Unix GID
S:/.../... Unix Shell
H:/.../.... Unix Home
Group:
G:nnn Unix GID
Currently the following attributes recognized by the PAM module
are NOT modifiable by this snapin. You should modify them
using the "built-in" string editor of NWADmin under the Identification Page
( Location attribute):
User:
O: Unix or NDS name of other group ( if that group is a NDS name
and has a N:nnnn attribute, this value will be used for
translation to Unix name, otherwise, a "proper Unix name"
will be made from the NDS one ( remove context part,
skip all spaces and illegal chars and prepend a Z if its
starts by a digit ( this is required by useradd/usermod
that misbehave with a group name starting with a digit)
C: Unix comment, added to the Gecos field after the full name
(-comma separator added)
P: Primary group name. So far the snapin works with the numeric
Primary Group ID for user's. It may change in the next release.
Of course any other L (location) strings is left untouched by the snapin
( no error message)!
Patrick Pollet
Feb 05/02/2001

Binary file not shown.

339
contrib/pam/COPYING Normal file
View File

@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

62
contrib/pam/Makefile.in Normal file
View File

@@ -0,0 +1,62 @@
#
# Makefile for the linux ncp-filesystem routines.
#
top_srcdir = @top_srcdir@
top_builddir = ../..
include $(top_builddir)/Make.rules
LIBS = @INTLLIBS@ @LIBS@
LIB_PAM_SECURITY = @LIB_PAM_SECURITY@
NCP_LIB = libncp.so
NCPLIB_DIR = ../../lib
PAM_LIBRARY = pam_ncp_auth.so
PAM_OBJECTS = pam_ncp_auth.do support.do
CFLAGS_pam_ncp_auth.do := -DNCPMOUNT_PATH=\"$(bindir)/ncpmount\" -DNCPUMOUNT_PATH=\"$(bindir)/ncpumount\"
.PHONY : all install install-dev dep clean mrproper distclean
.PHONY : default
default:
make -C ../..
all: $(PAM_LIBRARY)
install: all
${INSTALL} -m 755 $(PAM_LIBRARY) $(DESTDIR)$(LIB_PAM_SECURITY)
install-dev:
$(NCPLIB_DIR)/$(NCP_LIB):
make -C $(NCPLIB_DIR) $(NCP_LIB)
$(PAM_OBJECTS): %.do: %.c
$(CC) $(CFLAGS) $(CCFLAGS) $(CFLAGS_$@) -fPIC -o $@ -c $<
%.d: %.c
set -e; $(CC) -M $(CFLAGS) $(CCFLAGS) $(CFLAGS_$(@:.d=.do)) $< \
| sed 's,\($*\)\.o[ :]*,\1.o \1.do \1.to $@ : ,g' > $@; \
[ -s $@ ] || rm -f $@
$(PAM_LIBRARY): $(PAM_OBJECTS)
$(CC) $(CFLAGS) -shared -o $@ $(PAM_OBJECTS) -L$(NCPLIB_DIR) -lncp -lpam ${LIBS}
dep:
clean:
rm -f $(PAM_OBJECTS) $(PAM_LIBRARY) *~
mrproper: clean
rm -f *.d
distclean: mrproper
ifeq ($(NEED_DEP),yes)
include $(PAM_OBJECTS:%.do=%.d)
endif

108
contrib/pam/Makefile.pam Normal file
View File

@@ -0,0 +1,108 @@
# $Header$
#
# This Makefile controls a build process of the pam_unix modules
# for Linux-PAM. You should not modify this Makefile.
#
# $Log$
#
#
########################################################################
# some options... uncomment to take effect
########################################################################
ifdef DYNAMIC
#LIBSESSSH = pam_ncp_session.so
LIBAUTHSH = pam_ncp_auth.so
#LIBPASSWDSH = pam_ncp_passwd.so
#LIBACCOUNT = pam_ncp_acct.so
endif
ifdef STATIC
LIBSTATIC = libpam_ncp.o
endif
LIBAUTHOBJ = pam_ncp_auth.o support.o
LIBAUTHSRC = pam_ncp_auth.c support.c
LIBOBJ = $(LIBAUTHOBJ)
LIBSRC = $(LIBAUTHSRC)
LIBSHARED = $(LIBAUTHSH)
LIBOBJD = $(addprefix dynamic/,$(LIBOBJ))
LIBOBJS = $(addprefix static/,$(LIBOBJ))
dynamic/%.o : %.c
$(CC) $(CFLAGS) -Iinclude $(DYNAMIC) $(CPPFLAGS) -c $< -o $@
static/%.o: %.c
$(CC) $(CFLAGS) -Iinclude $(STATIC) $(CPPFLAGS) -c $< -o $@
########################### don't edit below #######################
dummy:
@echo "**** This is not a top-level Makefile "
@echo "**** You need to compile this as part of a PAM source tree. "
exit
info:
@echo
@echo "*** Building pam-unix(alpha) module of the framework..."
@echo
all: dirs info $(LIBSHARED) $(LIBSTATIC) register
dirs:
ifdef DYNAMIC
mkdir -p ./dynamic
endif
ifdef STATIC
mkdir -p ./static
endif
register:
ifdef STATIC
( cd .. ; \
./register_static pam_ncp_auth pam_ncp/$(LIBSTATIC) ; \
)
endif
ifdef DYNAMIC
$(LIBOBJD): $(LIBSRC)
$(LIBAUTHSH): $(LIBAUTHSRC) $(LIBOBJD)
$(CC) -shared -o $@ $(addprefix dynamic/,$(LIBAUTHOBJ)) -lncp
endif
ifdef STATIC
$(LIBOBJS): $(LIBSRC)
$(LIBSTATIC): $(LIBOBJS)
$(CC) -Wl,-r -o $@ $(LIBOBJS) -lncp -nostdlib
#### Following line gives up on my system (P.V.)
#### It works with -L/usr/lib -lncp, but in that case
#### we have to pass this Makefile through configure magic
#### $(LD) -r -o $@ $(LIBOBJS) -lncp
endif
install: all
mkdir -p $(FAKEROOT)$(SECUREDIR)
ifdef DYNAMIC
install -m644 $(LIBSHARED) $(FAKEROOT)$(SECUREDIR)
endif
remove:
cd $(FAKEROOT)$(SECUREDIR) && rm -f $(LIBSHARED)
clean:
rm -f $(LIBOBJD) $(LIBOBJS) a.out core *~
extraclean: clean
rm -f *.a *.out *.o *.so *.bak
.c.o:
$(CC) -c $(CFLAGS) $<

122
contrib/pam/README Normal file
View File

@@ -0,0 +1,122 @@
Why authenticate Linux users against a Netware box?
--------------------------------------------------
The pam_ncp_auth module is designed for use in environments where users have
already been given Netware accounts and the requirement to have two separate
passwords would be a barrier to the deployment of Linux.
A pam_ncp_passwd module allowing users to also change their passwords is also
planned.
How come it only took a few hours to put it together from scratch?
-----------------------------------------------------------------
This module is based on the ncpfs utilities developed by Volker Lendecke,
and is dynamically linked to the library routines contained therein. Therefore,
the ncpfs utilities are a prerequisite for compiling this module.
The most up-to-date version of the utilities can generally be found at
ftp://platan.vc.cvut.cz/pub/linux/ncpfs/latest
It is my intention to make this module stand alone, for simplicity and for
licensing reasons.
Configuration
-------------
The pam_ncp_auth module recognises one option, which is required (and may
be repeated):
"server=<ServerName>" or "server=<ServerName>/<GroupName>"
Except that, it recoginzes couple of options:
-d : turn on debugging output
-v : display reasons login failures on terminal (default)
-q : do not display login failures
-s : disallow SUPERVISOR from logging-in
-S : disallow SUPERVISOR equivalent from logging-in (NYI)
-uMIN,MAX,CFLAGS,MFLAGS : parameters for user creation
-gMIN,MAX,CFLAGS : parameters for group creation
If you are using variant "server=<ServerName>/<GroupName>", <GroupName>
must be fully distinguished name of Group and <ServerName> must have
at least read-only replica of logging-in user (to be fixed...).
This module is designed to run alongside locally stored passwords. For example,
my /etc/pam.d/login file during testing looked like this:
auth required /lib/security/pam_securetty.so
auth requisite /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_ncp_auth.so use_first_pass server=ROB-SERVER
This has the effect that users are only looked up on the Netware server if the
password they type fails to match the locally stored password. Hence local-only
users (such as root) are supported in this configuration.
David Woodhouse <Dave@imladris.demon.co.uk>
4/3/98
Users and groups creation
-------------------------
User creation is enabled by non-empty CFLAGS option in -u parameter.
CFLAGS can consist of one or more following letters:
r : When creating user, it must take uid from UNIX:UID property. If uid
is already used, or object does not have UNIX:UID property, user is
not allowed to login.
p : When creating user, preffer uid from UNIX:UID property.
n : When inventing uid for new user, take one which is one greater than
highest used uid in MIN,MAX range.
f : When inventing uid for new user, take first unused in MIN,MAX range.
If you specify both 'r' and 'p', or both 'n' and 'f', behavior is undefined.
User modification is enabled by non-empty MFLAGS option in -u parameter.
MFLAGS can consist of one or more following letters:
g : Update user's primary gid according to NDS database.
c : Update user's gecos (comment, full name) according to NDS database.
d : Update user's home directory according to NDS database.
s : Update user's shell according to NDS database.
NDS background
--------------
If -g,,r or -g,,p is specified, group's UNIX:GID attribute is read from
NDS. If attribute does not exist, and 'r' was not used, new gid is invented
according to min, max and n/f values in -g option.
If -u,,r or -u,,p is specified, user's UNIX:UID attribute is read from
NDS. If attribute does not exist, and 'r' was not used, new uid is invented
according to min, max and n/f values in -g option.
During user creation, home directory is retrieved from UNIX:Home Directory,
login shell from UNIX:Login Shell. If UNIX:Home Directory does not exist,
/home/$cn is used as home directory for user. If UNIX:Login Shell does not
exist, /bin/bash is used.
OK, to get it to work on my Debian - potato box, I have to use following
items in /etc/pam.d/login:
#%PAM-1.0
#[For version 1.0 syntax, the above header is optional]
#
# The PAM configuration file for the `login' service
#
auth requisite pam_securetty.so
auth required pam_env.so
auth required pam_nologin.so
auth optional pam_group.so
auth sufficient pam_unix.so
auth sufficient pam_ncp_auth.so use_first_pass server=CDROM/VANA.LINUXES.VC.CVUT.CZ
auth required pam_deny.so
account requisite pam_time.so
account required pam_unix.so
session required pam_unix.so
session optional pam_motd.so
session optional pam_mail.so
session optional pam_lastlog.so
password required pam_unix.so
Petr Vandrovec <vandrove@vc.cvut.cz>
9/23/99

57
contrib/pam/install-to-PAM Executable file
View File

@@ -0,0 +1,57 @@
#!/bin/sh
INCLDIR=../../include
if [ "$1" = "-y" ]; then
REMOVE=/bin/true
shift
else
REMOVE=/bin/false
fi
if [ $# -ne 1 ]; then
echo "usage: install-to-PAM pam-directory"
echo ""
echo "Run this program if you want to place this code into PAM tree"
echo "Usual value for pam-directory is /usr/src/pam-0.66/Linux-PAM/modules"
echo ""
echo "Due to strangeness of static PAM modules do not forget, that static"
echo "module links together with static libncp, resulting in very big"
echo "object file (60KB without debugging info, 500KB with)."
echo ""
echo "Also, do not forget to do 'make install-dev' in ncpfs tree before"
echo "compiling PAM modules."
exit 1
fi
DEST=$1
if [ ! -d $DEST/. ]; then
echo "$DEST does not exist or is not directory"
exit 1
fi
if [ ! -f $DEST/register_static ]; then
echo "$DEST is not module directory of PAM suite"
exit 1
fi
if [ ! -f pam_ncp_auth.c ]; then
echo "You must run this program from ncp_pam_auth plugin directory"
exit 1
fi
DESTD=$DEST/pam_ncp_auth
if [ -d $DESTD ]; then
if $REMOVE ; then
echo "Removing old code from $DESTD"
rm -rf $DESTD
else
echo "pam_ncp_auth is already present in $DEST"
echo ""
echo "Remove pam_ncp_auth or run this program with option -y"
exit 1
fi
fi
mkdir $DESTD
cp Makefile.pam $DESTD/Makefile
cp COPYING README *.c $DESTD
echo "PAM module was copied into $DESTD directory."
echo ""
echo "Please, do not forget to do 'make install-dev' in ncpfs tree before"
echo "attempting to compile this PAM module."

4923
contrib/pam/pam_ncp_auth.c Normal file

File diff suppressed because it is too large Load Diff

270
contrib/pam/support.c Normal file
View File

@@ -0,0 +1,270 @@
/*
* $Header: /home/morgan/pam/Linux-PAM-0.53/modules/pam_unix/RCS/support.c,v 1.1 1996/11/09 19:44:35 morgan Exp $
*/
/*
* Copyright Andrew Morgan, 1996. All rights reserved.
* Modified by Alexander O. Yuriev
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, and the entire permission notice in its entirety,
* including the disclaimer of warranties.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* ALTERNATIVELY, this product may be distributed under the terms of
* the GNU Public License, in which case the provisions of the GPL are
* required INSTEAD OF the above restrictions. (This clause is
* necessary due to a potential bad interaction between the GPL and
* the restrictions contained in a BSD-style copyright.)
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* $Log: support.c,v $
*
* Revision 1.2 2000/06/02 17:40:00 vana
* Added support functions for chautok.
*
* Revision 1.1 1996/11/09 19:44:35 morgan
* Initial revision
*
* Revision 1.1 1996/04/17 01:11:08 alex
* Initial revision
*
*/
#include <stdlib.h> /* define NULL */
#include <string.h>
#include "support.h"
#ifndef NDEBUG
# include <syslog.h>
#endif /* NDEBUG */
/* Implementation */
static int converse( pam_handle_t *pamh,
int nargs,
struct pam_message **message,
struct pam_response **response )
{
int retval;
struct pam_conv *conv;
retval = pam_get_item( pamh, PAM_CONV, (const void **) &conv ) ;
if ( retval == PAM_SUCCESS )
{
retval = conv->conv( nargs,
( const struct pam_message ** ) message,
response,
conv->appdata_ptr );
}
return retval;
}
/***************************************************************************/
/* prompt user for a using conversation calls */
/***************************************************************************/
int _set_auth_tok(pam_handle_t *pamh, int flags) {
int retval;
char *p;
struct pam_message msg[1],*pmsg[1];
struct pam_response *resp;
/* set up conversation call */
pmsg[0] = &msg[0];
msg[0].msg_style = PAM_PROMPT_ECHO_OFF;
msg[0].msg = "Password: ";
resp = NULL;
if ( ( retval = converse( pamh, 1 , pmsg, &resp ) ) != PAM_SUCCESS )
return retval;
if ( resp )
{
if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) &&
resp[0].resp == NULL )
{
free( resp );
return PAM_AUTH_ERR;
}
p = resp[ 0 ].resp;
/* This could be a memory leak. If resp[0].resp
is malloc()ed, then it has to be free()ed!
-- alex
*/
resp[ 0 ].resp = NULL;
}
else
return PAM_CONV_ERR;
free( resp );
pam_set_item( pamh, PAM_AUTHTOK, p );
return PAM_SUCCESS;
}
int _read_new_pwd(pam_handle_t *pamh, int flags)
{
int retval;
char *p;
char *q;
struct pam_message msg[1],*pmsg[1];
struct pam_message msg2[1],*pmsg2[1];
struct pam_response *resp;
/* set up conversation call */
pmsg[0] = &msg[0];
msg[0].msg_style = PAM_PROMPT_ECHO_OFF;
msg[0].msg = "New Password: ";
resp = NULL;
if ( ( retval = converse( pamh, 1 , pmsg, &resp ) ) != PAM_SUCCESS )
return retval;
if ( resp )
{
if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) &&
resp[0].resp == NULL )
{
free( resp );
return PAM_AUTH_ERR;
}
p = resp[ 0 ].resp;
/* This could be a memory leak. If resp[0].resp
is malloc()ed, then it has to be free()ed!
-- alex
*/
resp[ 0 ].resp = NULL;
}
else
return PAM_CONV_ERR;
free( resp );
pmsg2[0] = &msg2[0];
msg2[0].msg_style = PAM_PROMPT_ECHO_OFF;
msg2[0].msg = "Retype New Password: ";
resp = NULL;
if ( ( retval = converse( pamh, 1 , pmsg2, &resp ) ) != PAM_SUCCESS )
return retval;
if ( resp )
{
if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) &&
resp[0].resp == NULL )
{
free( resp );
return PAM_AUTH_ERR;
}
q = resp[ 0 ].resp;
/* This could be a memory leak. If resp[0].resp
is malloc()ed, then it has to be free()ed!
-- alex
*/
resp[ 0 ].resp = NULL;
}
else
return PAM_CONV_ERR;
free( resp );
if (strcmp(p, q)) {
pmsg2[0] = &msg2[0];
msg2[0].msg_style = PAM_ERROR_MSG;
msg2[0].msg = "Passwords do not match!";
resp = NULL;
retval = converse( pamh, 1, pmsg2, &resp);
if ((retval != PAM_SUCCESS) && resp)
free(resp);
return PAM_AUTHTOK_ERR;
}
pam_set_item( pamh, PAM_AUTHTOK, p );
return PAM_SUCCESS;
}
int _set_oldauth_tok(pam_handle_t *pamh, int flags) {
int retval;
char *p;
struct pam_message msg[1],*pmsg[1];
struct pam_response *resp;
/* set up conversation call */
pmsg[0] = &msg[0];
msg[0].msg_style = PAM_PROMPT_ECHO_OFF;
msg[0].msg = "(current) NetWare password: ";
resp = NULL;
if ( ( retval = converse( pamh, 1 , pmsg, &resp ) ) != PAM_SUCCESS )
return retval;
if ( resp )
{
if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) &&
resp[0].resp == NULL )
{
free( resp );
return PAM_AUTH_ERR;
}
p = resp[ 0 ].resp;
/* This could be a memory leak. If resp[0].resp
is malloc()ed, then it has to be free()ed!
-- alex
*/
resp[ 0 ].resp = NULL;
}
else
return PAM_CONV_ERR;
free( resp );
pam_set_item( pamh, PAM_OLDAUTHTOK, p );
return PAM_SUCCESS;
}

18
contrib/pam/support.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef __SUPPORT_H__
#define __SUPPORT_H__
#ifndef LINUX
#include <security/pam_appl.h>
#endif /* LINUX */
#define _PAM_EXTERN_FUNCTIONS
#include <security/pam_modules.h>
int _set_auth_tok(pam_handle_t *pamh, int flags);
int _set_oldauth_tok(pam_handle_t *pamh, int flags);
int _read_new_pwd(pam_handle_t *pamh, int flags);
#endif /* __SUPPORT_H__ */

View File

@@ -0,0 +1,6 @@
LTLIBRARY_SHARED_NAME = php_auth_nds.la
LTLIBRARY_SOURCES = php_auth_nds.c
LTLIBRARY_LDFLAGS = -L../../lib -lncp
EXTRA_INCLUDES = -I../../include -DNCPFS_VERSION=\"@VERSION@\"
include $(top_srcdir)/build/dynlib.mk

1279
contrib/php/acinclude.m4 Normal file

File diff suppressed because it is too large Load Diff

4927
contrib/php/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,24 @@
# +----------------------------------------------------------------------+
# | PHP Version 4 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997-2002 The PHP Group |
# +----------------------------------------------------------------------+
# | This source file is subject to version 2.02 of the PHP license, |
# | that is bundled with this package in the file LICENSE, and is |
# | available at through the world-wide-web at |
# | http://www.php.net/license/2_02.txt. |
# | If you did not receive a copy of the PHP license and are unable to |
# | obtain it through the world-wide-web, please send a note to |
# | license@php.net so we can mail you a copy immediately. |
# +----------------------------------------------------------------------+
# | Author: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id: dynlib.mk,v 1.4 2002/02/28 08:25:30 sebastian Exp $
#
all: all-recursive
include $(builddir)/libs.mk
include $(top_srcdir)/build/rules.mk

80
contrib/php/build/fastgen.sh Executable file
View File

@@ -0,0 +1,80 @@
#! /bin/sh
#
# +----------------------------------------------------------------------+
# | PHP Version 4 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997-2002 The PHP Group |
# +----------------------------------------------------------------------+
# | This source file is subject to version 2.02 of the PHP license, |
# | that is bundled with this package in the file LICENSE, and is |
# | available at through the world-wide-web at |
# | http://www.php.net/license/2_02.txt. |
# | If you did not receive a copy of the PHP license and are unable to |
# | obtain it through the world-wide-web, please send a note to |
# | license@php.net so we can mail you a copy immediately. |
# +----------------------------------------------------------------------+
# | Author: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id: fastgen.sh,v 1.14 2002/02/28 08:25:33 sebastian Exp $
#
if test "$#" = "0"; then
echo "Usage: fastgen.sh <srcdir> <mkdir_p> <bsdmakefile_p> <file>"
fi
srcdir=$1
shift
mkdir_p=$1
shift
bsd_makefile=$1
shift
top_srcdir=`(cd $srcdir; pwd)`
top_builddir=`pwd`
if test "$mkdir_p" = "yes"; then
mkdir_p="mkdir -p"
else
mkdir_p="$top_srcdir/build/shtool mkdir -p"
fi
if test "$bsd_makefile" = "yes"; then
(cd $top_srcdir; ./build/bsd_makefile)
for makefile in $@; do
echo "fastgen.sh: creating $makefile"
dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
$mkdir_p "$dir/"
cat - $top_srcdir/$makefile.in <<EOF |sed 's/^include \(.*\)/.include "\1"/' >$makefile
top_srcdir = $top_srcdir
top_builddir = $top_builddir
srcdir = $top_srcdir/$dir
builddir = $top_builddir/$dir
VPATH = $top_srcdir/$dir
EOF
test -z "$dir" && dir=.
touch $dir/.deps
done
else
for makefile in $@; do
echo "fastgen.sh: creating $makefile"
dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
$mkdir_p "$dir/"
cat - $top_srcdir/$makefile.in <<EOF >$makefile
top_srcdir = $top_srcdir
top_builddir = $top_builddir
srcdir = $top_srcdir/$dir
builddir = $top_builddir/$dir
VPATH = $top_srcdir/$dir
EOF
test -z "$dir" && dir=.
touch $dir/.deps
done
fi

View File

@@ -0,0 +1,23 @@
# +----------------------------------------------------------------------+
# | PHP Version 4 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997-2002 The PHP Group |
# +----------------------------------------------------------------------+
# | This source file is subject to version 2.02 of the PHP license, |
# | that is bundled with this package in the file LICENSE, and is |
# | available at through the world-wide-web at |
# | http://www.php.net/license/2_02.txt. |
# | If you did not receive a copy of the PHP license and are unable to |
# | obtain it through the world-wide-web, please send a note to |
# | license@php.net so we can mail you a copy immediately. |
# +----------------------------------------------------------------------+
# | Author: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id: library.mk,v 1.12 2002/02/28 08:25:33 sebastian Exp $
#
LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X)
$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES)
$(LINK) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD)

View File

@@ -0,0 +1,24 @@
# +----------------------------------------------------------------------+
# | PHP Version 4 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997-2002 The PHP Group |
# +----------------------------------------------------------------------+
# | This source file is subject to version 2.02 of the PHP license, |
# | that is bundled with this package in the file LICENSE, and is |
# | available at through the world-wide-web at |
# | http://www.php.net/license/2_02.txt. |
# | If you did not receive a copy of the PHP license and are unable to |
# | obtain it through the world-wide-web, please send a note to |
# | license@php.net so we can mail you a copy immediately. |
# +----------------------------------------------------------------------+
# | Author: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id: ltlib.mk,v 1.7 2002/02/28 08:25:34 sebastian Exp $
#
targets = $(LTLIBRARY_NAME)
include $(top_srcdir)/build/rules.mk
include $(top_srcdir)/build/library.mk

Some files were not shown because too many files have changed in this diff Show More