Restructure for camke build

This commit is contained in:
Mario Fetka
2011-11-13 17:37:22 +01:00
parent 79813c691a
commit 0fbc9baf41
102 changed files with 771 additions and 201 deletions

76
opt/CMakeLists.txt Normal file
View File

@@ -0,0 +1,76 @@
#################################
# Project
##############
#################################
# Dependencies
##############
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/nw.ini.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/nwserv.conf"
IMMEDIATE @ONLY)
#################################
# Compiler Switches
##############
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_SOURCE_DIR}/include
${CMAKE_BINARY_DIR}/include
)
if (CMAKE_SYSTEM_NAME MATCHES Linux)
add_definitions(
-DLINUX -D_GNU_SOURCE -Dsignal=__sysv_signal
)
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
add_definitions(
-D_VERS_H_=\"${VERSION_MAJOR}\"
-D_VERS_L_=\"${VERSION_MINOR}\"
-D_VERS_P_=\"${VERSION_PATCH}\"
)
#################################
# Source Files
##############
#SET (include_src
# cbmcopy.h
# d64copy.h
# opencbm.h
# )
add_executable( comm comm.c )
add_executable( sendm sendm.c )
add_executable( unxcomm unxcomm.c )
add_executable( unxsendm unxsendm.c )
# add_executable( xsockrt xsockrt.c )
#################################
# Linking
##############
#################################
# Install Files
##############
#install(FILES ${include_src} DESTINATION ${INCLUDE_INSTALL_DIR})
install(FILES nwserv.conf DESTINATION ${MARS_NWE_INSTALL_FULL_CONFDIR})
install(FILES nwserv.stations DESTINATION ${MARS_NWE_INSTALL_FULL_CONFDIR})
install(FILES nw.ini.cnv.437 DESTINATION ${MARS_NWE_INSTALL_FULL_CONFDIR}/nwserv.cnv.437)
install(FILES nw.ini.cnv.cyr DESTINATION ${MARS_NWE_INSTALL_FULL_CONFDIR}/nwserv.cnv.cyr)
install(FILES nw.ini.cnv.min DESTINATION ${MARS_NWE_INSTALL_FULL_CONFDIR}/nwserv.cnv.min)
install(FILES nwopt DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/.nwopt.vol)
install(FILES nwopt DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/skel/.nwopt)
install(TARGETS comm DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR})
install(TARGETS sendm DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR})
install(TARGETS unxcomm DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR})
install(TARGETS unxsendm DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR})
# install(TARGETS xsockrt DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR})

219
opt/comm.c Normal file
View File

@@ -0,0 +1,219 @@
/* comm.c 22-Oct-98
* simple demo for a command programm which do a
* DOS/WIN <-> UNX command handling using PIPE filesystem.
* Most problem under W95 is the file caching.
* Only the 32-bit version (comm32) works correct under W95.
* NT do not have this problems.
*
* can be used with unxcomm for UNX.
*
* Can also be used under Linux for ncpfs <-> mars_nwe.
* comm and unxcomm must be same version !
*/
#define MAXARGLEN 1024
/* Environment string could be in the form: UNXCOMM=p:/unxcomm
* or under 32bit: UNXCOMM=\\lx1\pipes\unxcomm
* or under linux: UNXCOMM=/pipes/unxcomm
*
*/
#define ENV_UNXCOMM "UNXCOMM"
#ifdef LINUX
# define DEFAULT_COMM "/pipes/unxcomm"
#else
# ifdef DEFAULT_UNC
# define DEFAULT_COMM DEFAULT_UNC
# else
# define DEFAULT_COMM "p:/unxcomm"
# endif
#endif
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#ifndef LINUX
# include <io.h>
#else
# define O_BINARY 0
#endif
#include <fcntl.h>
static int usage(char *progname)
{
fprintf(stderr, "Usage:\t%s prog [paras]\n", progname);
return(1);
}
#ifdef WIN32
#include <windows.h>
#include <direct.h>
int get_server_name(char *servername, char *path)
/* returns len of servername if exist or 0 */
{
int result=0;
char remotepath[300];
if (path && *path != '\\' && *path != '/' && *(path+1) != ':'){
getcwd(remotepath, sizeof(remotepath)-1);
path=remotepath;
}
if (path && path[1] == ':') {
char localpath[10];
DWORD size=sizeof(remotepath);
memcpy(localpath, path, 2);
*(localpath+2)='\0';
if (WNetGetConnection(localpath, remotepath,
&size)==NO_ERROR) {
path=remotepath;
}
}
if (path && (*path == '\\' || *path == '/')
&& (*(++path) == '\\' || *path == '/') ) {
char *p=++path;
while (*p && *p!='/' && *p!='\\') ++p;
result= (int)(p-path);
if (result&&servername) {
memcpy(servername, path, result );
servername[result] = '\0';
}
}
return(result);
}
HANDLE loc_open(char *fn, int mode)
{
HANDLE fd=CreateFile(fn, GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|
FILE_FLAG_SEQUENTIAL_SCAN|
FILE_FLAG_NO_BUFFERING, /* IMPORTANT !!! */
NULL);
return(fd);
}
int loc_read(HANDLE fd, char *buf, int size)
{
if (ReadFile(fd, buf, size, &size, NULL))
return(size);
return(-1);
}
#define loc_close(fd) CloseHandle(fd)
#define loc_lseek(fd, offs, what) /* not yet used */
#else
#define loc_lseek lseek
#define loc_read read
#define loc_open open
#define loc_close close
typedef int HANDLE;
#define INVALID_HANDLE_VALUE -1
#endif
int main(int argc, char **argv)
{
char *unxcomm=getenv(ENV_UNXCOMM);
if (NULL == unxcomm) unxcomm=DEFAULT_COMM;
if (argc > 1) {
char **pp=argv+1;
int size;
char buf[MAXARGLEN+1024];
HANDLE fdin = loc_open(unxcomm, O_RDONLY|O_BINARY);
int fdout = -1;
#ifdef WIN32
char buf_unxcomm[200];
if (fdin == INVALID_HANDLE_VALUE) {
char servername[100];
if (get_server_name(servername, argv[0])>0){
sprintf(buf_unxcomm, "\\\\%s\\pipes\\unxcomm", servername);
unxcomm=buf_unxcomm;
fdin = loc_open(unxcomm, O_RDONLY|O_BINARY);
}
}
#endif
if (fdin != INVALID_HANDLE_VALUE) {
int count=loc_read(fdin, buf, 10);
char pipepath[200];
char *pipeext=pipepath;
int tries=0;
while (count < 10 && tries < 20) {
int nc;
if (count < 0) count =0;
nc=loc_read(fdin, buf+count, 1);
if (nc > 0) count+=nc;
tries++;
}
if (count == 10 && buf[0]=='#' && buf[9] == '\n') {
char *p;
strcpy(pipepath, unxcomm);
p=pipepath+strlen(unxcomm);
while (p>pipepath) {
if (*p=='\\' || *p=='/')
break;
--p;
}
if (p > pipepath) {
++p;
*p++='r';
*p++='u';
*p++='n';
*p++='/';
memcpy(p, buf+1, 8);
p += 8;
*p++='.';
pipeext = p;
strcpy(pipeext, "in");
} else pipepath[0] = '\0';
tries=0;
do {
fdout = open(pipepath, O_WRONLY|O_BINARY);
} while (fdout < 0 && tries++ < 5);
if (fdout <0) {
fprintf(stderr, "Cannot open pipe '%s'\n", pipepath);
}
} else {
buf[count>0 ? count : 0]='\0';
fprintf(stderr, "%d Bytes read are wrong'%s'\n", count, buf);
}
if (fdout > -1) {
char *p=buf;
while(--argc) {
int l=strlen(*pp);
memcpy(p, *pp, l);
++pp;
p+=l;
*p++ = 32;
}
*p++='\0';
write(fdout, buf, (int)(p-buf));
close(fdout);
loc_lseek(fdin, 0, 0);
memset(buf, 0, 512);
while (0 < (size = loc_read(fdin, buf, 512 /*sizeof(buf)*/))) {
write(1, buf, size);
loc_lseek(fdin, 0, 2);
}
loc_close(fdin);
return(0);
}
loc_close(fdin);
} else
fprintf(stderr, "Cannot open PIPECOMMAND '%s'\n", unxcomm);
}
return(usage(argv[0]));
}

889
opt/nw.ini.cmake Normal file
View File

@@ -0,0 +1,889 @@
#
# This is the configuration-file for "mars_nwe", a free netware-emulator
# for Linux.
#
# last changed: 01-Sep-00
# new volume flag 'x' for unix access rights (Przemyslaw Czerpak) 0.99.pl20
# comment out second printer and printserver entry in 0.99.pl20
# debug log section changed some values to '1' in 0.99.pl20
#
# !! section 31 : flags added in 0.99.pl18, but not used
# !! section 8 : new flags added in 0.99.pl18 !!
# !! section 9 : default directory/file umask changed in 0.99.pl9 !!
# !! section 46 : default attrib location changed in 0.99.pl9 !!
# !! section 5 : deleting of ipx devices/routes changed in 0.99.pl6 !!
# !! section 4 : automatic creation of ipx-interfaces changed in 0.98.pl9 !!
#
# since version 0.98.pl11:
# the most important options in config.h can now be altered in
# this file begin at section 60.
#
# Most configuration errors depend on section 4.
# !! Please read section 4 very carefully. !!
#
# This file specifies which Linux-resources (printers, users, directories)
# should be accessible to the DOS-clients via "mars_nwe". Furthermore
# some general parameters are configured here.
# Some options of "mars_nwe" can only be altered by editing the the file
# `config.h' and re-compiling "mars_nwe", please see there for more
# information.
# Syntax of this config-file:
# - everything after a "#" is treated as a comment (particularly
# it does never belong to the values themselves)
# - entries _must_ begin with a number, indicating the section
# they belong to
# - hexadecimal values are prepended by "0x"
#
# All examples are verbatim.
#
# The term "DOS-client" does not refer to the special operating-system
# "DOS" in _this_ file. "DOS-client" is only a synomym for all possible
# ipx-clients (it's choosen for the people who are confused by the
# meaning of "client" and "server").
# The "Linux-side" of the game is always the "mars_nwe"-server.
# =========================================================================
# Section 1: volumes (required)
#
# In this section you list all Linux-directories accessible via "mars_nwe".
#
# To be more precise: a mapping from Linux-directories to mars_nwe-volumes
# is done. (Volumes are the beasts you can map to drive letters under DOS
# using "map.exe").
#
# Linux-directory mars_nwe-volume map.exe DOS-Drive
# /var/local/nwe/SYS -------> SYS -------------> W:
#
# More than one entry is allowed in this section.
# The maximum number of volumes must be specified in `config.h'
# or in section 61 in this file.
#
# Please note that at least the volume "SYS" must be defined and it must
# contain the following sub-directories: LOGIN, PUBLIC, SYSTEM, MAIL.
# See the installation-instructions in the doc-directory for more infos
# and the info to section 16 (tests on startup) in this file.
#
# !! NOTE !!
# First defined volume should always named 'SYS'.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 1 VOLUMENAME DIRECTORY [OPTIONS] [UMASKDIR UMASKFILE]
#
# VOLUMENAME: the name of the mars_nwe-volume (max. 8 characters)
# DIRECTORY: the directory on your Linux-system associated with that
# volume; use the special name "~" to refer to the users
# individual home-directory.
# A directory entry like "~/tmp" also work since 0.99.pl3.
#
# If the netadmin wants to map the homedirectories with the MAP-Command to
# every user, he can do it in two variants:
# We suppose that the user test2 is logged in MARS_NWE. He has files
# earlier stored in his homedirectory /home/test2.
# In case of entry 1 in /etc/nwserv.conf (naturally amongst other entries)
# there are other results of the MAP-command.
#
# Variant 1 Variant 2
#
#DOS-Command MAP H:=MARS\HOMEDIR: MAP H:=MARS\HOMEDIR:
#
#Entry in /etc/nwserv.conf
# 1 HOMEDIR ~ k 1 HOMEDIR /home k
#
#Result of DIR *.* All files stored in All homedirs of the
# /home/test2 will shown. users will shown.
# Showing his own files
# it is a command like
# CD test2 and then
# dir *.* necessary.
#
# OPTIONS: none or some of the following characters (without a seperator)
# - Placeholder.
#
# Next two options control DOS and OS/2 namespace.
# i ignore case, handle mixing upper/lowercase filenames (slow)
# should only be used if you really need it.
# k use lowercase-filenames (if you don't set this,
# and you don't set 'i' all files _must_ be upper-case)
#
# m removable volume (e.g. cd-roms) or volumes, which
# should be remountable when mars_nwe is running.
# n (n)o fixed inodes. This volume do not have fixed inodes.
# e.g. DOS-Volumes, CD-ROMS. This flag is very important for
# attrib and trustee handling.
# o (lowercase o)
# volume has only one filesystem/device/namespace
# this is for filesystems with high inode > 0xFFFFFFF.
# because for namespace services mars_nwe normally use the
# first 4 bit of 32 bit inode for distinguish
# between several devices/namespaces for one volume.
# p "PIPE"-filesystem. All files are pipe commands.
# See `doc/PIPE-FS'.
# r volume is read-only and always reports "0 byte free"
# (this is intended for copies of CD-ROMs on harddisks)
# t volume has trustees.
# Real access is trustee rights + unix rights.
# Trustees are stored in extra directories,
# normally under /var/nwserv/trustees.
# Must only be used for volume which have fix inodes.
# A volume with trustees should never be renamed.
# For some more notes see 'doc/TRUSTEES'.
# x use unix access rights (for use with ACL)
# T volume has trustees & ignore the rights granted in UN*X filesystem
# exactly like option "t" except that the unix rights are not added
#
# additional Namespaces
# O (uppercase o)
# + OS/2 namespace (useful for Win95 clients, see doc/FAQS).
# N + NFS namespace (not really tested).
#
#
# UMASKDIR: default directory creat umask.
# UMASKFILE: default file creat umask.
# values are always octal, they overwrite standard
# section 9 values for this specific volume.
#
# -------------------------------------------------------------------------
#
# Examples:
# 1 SYS /var/local/nwe/SYS kt 711 600
# 1 CDROM /cdrom kmnor
# 1 HOME ~ k -1
# 1 HOMETMP ~/tmp kiO
# 1 PRIVAT ~/privat kO 700 600
# 1 WORLD /var/world kiO 777 666
# 1 FAXQ /var/spool/fax/faxqueue k
1 SYS @MARS_NWE_INSTALL_FULL_FILEDIR@/SYS/ kt 711 600
# =========================================================================
# Section 2: servername (optional)
#
# The servername is the name under which this server will show up when
# using tools like "slist" (server-list).
#
# If you don't supply an entry for this section, the hostname of your
# Linux-machine will be converted to all-uppercase and used as the servername.
#
# -------------------------------------------------------------------------
# Syntax:
# 2 SERVERNAME
#
# SERVERNAME: a name for this nw-server
# -------------------------------------------------------------------------
#
# Example:
# 2 MARS # name of the server would be "MARS"
# =========================================================================
# Section 3: Number of the internal network (required)
#
# If have dealt with the TCP/IP-configuration of your Linux-Box, the term
# "ip-address" may be familiar to you. It's a numer that uniquely
# identifies your machine in the internet.
# As you might already expect, even the IPX-people use a unique number to
# identify each other. Addresses in the IPX-world always consist of a
# 4-byte "network-number" plus a 6-byte "node-number" (remember the
# ip-addresses also use 4-bytes).
#
# The numbering-rule for ipx-clients is easy: their "address" is the
# external-network of the server they are connected to plus the
# hardware-address of their own ethernet-card (6 byte). As a result of this
# rule, the clients can determine their address automatically (by listening
# to the server and looking at their own ethernet-hardware) and no
# configuration-files on the clients-side have to be maintained. (It would
# really be a nasty thing if you think of very many DOS-clients [remember:
# DOS is an OS where ordinary users can screw up the configuration files].)
#
# For internal routing purposes, a netware-server has an "internal network"
#
# As there is no organisation which regulates the use of network-numbers
# in the IPX-world, you have to run "slist" (under DOS or Linux) to
# determine a number that isn't already used by another server on your
# net. You better double-check and ask the other network administrators
# before using a random value because not all servers might be on-line when
# you "listen" to the net.
#
# A reasonable choice for the internal net-number of your mars_nwe-server
# could be the ip-address of your Linux-Box. It is reasonable because
# ip-addresse are unique and if every nw-administrator uses only this uniqe
# value, potential conflicts will be minimized. Of course this choice is
# no guarantee and it only works if your Linux-Box IP is well configured.
#
# Please note that you have to specify the address of your "internal
# ipx-network" in hexadecimal format (the leading "0x" indicates it).
#
#
# -------------------------------------------------------------------------
# Syntax:
# 3 INTERNAL_NET [NODE]
#
# INTERNAL_NET: the hexadecimal value of your "internal ipx-network". Use
# "0x0" or "auto" to refer to your ip-addresse (it's a kind of
# automagically setup)
# NODE: use "1" if you don't know what this entry is for (optional)
# -------------------------------------------------------------------------
#
# Example:
# 3 auto 1 # 'automatic' setup, use ip-number as internal net
3 auto
# =========================================================================
# Section 4: IPX-devices (strongly recommended)
#
# This section contains information for the ipx-router built into mars_nwe
# and/or the external program "nwrouted".
# Both processes exchange the ipx-packets between your machine and the rest
# of the world (in other words: their functionallity is essential). Of
# course, to use one of both is already sufficient.
#
# Note for people with other IPX/NCP servers on the net:
# - choose the same frame-type as the other servers use
# - make sure your network-number is not already in use by another
# server (see the output of "slist" under Linux or DOS)
#
# Under Linux, it is possible to let the kernel creat all ipx-devices
# automatically for you. This is only possible (and only makes sense then)
# if there are other IPX/NCP servers on the same net which are setup
# correctly. It can be switched on in section '5'.
# -------------------------------------------------------------------------
# Syntax:
# 4 NET_NUMBER DEVICE FRAME [TICKS]
#
# NET_NUMBER: this number is determined by the router of the physical
# network you're attached to. Use "0x0" to use the entry
# for all network number match.
#
# DEVICE: the network-interface associated with the NET_NUMBER. Use
# a "*" (star) to use this entry for all devices match.
#
# FRAME: the frame-type of the data-packets on your local network.
# Possible values are:
#
# ethernet_ii :best for mixed(ipx, ip) environments
# 802.2 :Novell uses this as default since 3.12
# 802.3 :older frame typ, some boot proms use it
# snap :normally not used
# token :for token ring cards
# auto :automatic detection of the frame-type used
# in your ipx-environment
#
# TICKS: the time data-packets need to get delivered over a
# certain interface. If your connection goes through several
# routers, the shortest path can be determined by summing up
# all ticks for every route and compare the results.
# (1 tick = 1/18th second), default=1
# Note: If ticks > 6 then the internal router handles
# RIP/SAP specially. (RIP/SAP filtering)
#
# !! NOTE !!
# Automatic detection in this section means that ipx-interfaces which
# are created by other instances than the server/router,
# e.g. pppd, ipppd or ipx_interface, will be detected and inserted/removed
# in internal device/routing table at runtime.
#
# Automatic kernel creation of interfaces can be switched on in section 5.
# -------------------------------------------------------------------------
#
# Examples:
# 4 0x10 eth0 802.3 1 # setup ethernet with frame 802.3
# 4 0xa20 arc0 802.3 1 # standard arcnet (TRXNET)
#
# 4 0x0 * AUTO 1 # auto detection of all ipx-interfaces.
# 4 0x0 eth0 AUTO 1 # auto detection of eth0 frames.
# 4 0x0 eth0 802.2 1 # auto detection of eth0 frame 802.2.
#
# Note: If ticks > 6 then the internal router handles RIP/SAP specially.
# (RIP/SAP filtering)
# 4 0x0 isdn0 802.3 7 # auto isdn interface with ethernet encap.
# 4 0x0 ippp0 AUTO 7 # auto ippp0 (isdn ppp) interface.
# 4 0x0 ppp0 AUTO 7 # auto detection of ppp0 interface.
4 0x22 eth0 ethernet_ii 1
4 0x0 * AUTO 1
# Section 5: special device flags
# =========================================================================
# Flags
# 0x1 do not remove by nwserv/nwrouted added routes and ipx-devices
# beyond the lifetime of the server or router.
# If this flag is not set then all by nwserv/nwrouted added
# ipx-devices/routes will be deleted when
# nwserv/nwrouted ends and if no ipx socket is still
# open. (default).
#
# 0x2 Switch on automatic kernel creation of ipx-interfaces.
# The automatic kernel creating of ipx-devices sometimes
# make trouble (Win95). It should only be used in the
# beginning or for testing !!
#
# 0x4 do remove ALL routes and ipx-devices
# beyond the lifetime of the server or router.
# If this flag is set then all ipx-devices/routes
# will be deleted when nwserv/nwrouted ends,
# without looking for open ipx sockets.
# This was the default prior mars_nwe 0.99.pl6 !
# This also do complete ipx reinit when starting
# mars_nwe.
# This was the default prior mars_nwe 0.99.pl9 !
#
#
#
# other flags may follow.
# value will be interpreted as hex value.
5 0x0
# =========================================================================
# Section 6: version-"spoofing"
#
# Some clients work better if the server tells that it is a 3.11 Server,
# although many calls (namespace services) of a real 3.11 Server are
# missing yet.
# -------------------------------------------------------------------------
# Syntax:
# 6 SERVER_VERSION [FLAGS]
#
# SERVER_VERSION: the version-number reported to DOS-clients
# 0 Version 2.15 (was default till version 0.98.pl7)
# 1 Version 3.11 (is default now)
# 2 Version 3.12
#
# If you want to use longfilenamesupport and/or namespace routines
# you should set this section to '1' or '2'
# And you should read doc/FAQS.
#
# FLAGS: some flags
# &1 enable burst mode connections.
# If you want to test Burst mode this flag must be set.
# and in config.h you must set ENABLE_BURSTMODE to 1.
#
# other flags may follow.
# value will be interpreted as hex value.
# -------------------------------------------------------------------------
#
6 1 0x0
# =========================================================================
# Section 7: password handling of DOS-clients (required)
#
# When changing your "mars_nwe"-password from a DOS-client, this client
# (think of "LOGIN.EXE", "SYSCON.EXE" or "SETPASS.EXE") can encrypt your
# password before sending it to the "mars_nwe"-server (this improves
# security a little bit).
# In this section you can enforce encryption of user-passwords or allow
# not-encrypted sending of passwords over the net.
#
#
# On the Linux-side, passwords will only be stored in encrypted format.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 7 Value
#
# Value:
# 0 enforce encryption of _all_ passwords by the DOS-client
# (default)
# 1 as "0", but allow the non-encrypted version of the
# "change password"-routine.
# 7 allow all non-encrypted stuff but no empty nwe passwords.
# 8 allow all non-encrypted stuff and also allow empty
# nwe-passwords.
# 9 use all non-encryted calls + "get crypt key" will always fail
# so the login program will use the old unencryted calls.
# this will *not* work with all clients !! (OS2/client)
# -------------------------------------------------------------------------
7 0
# Section 8: special login/logout/security and other flags.
# =========================================================================
# Flags
# 0x1 allow changing dir/accessing other files than login/*
# when not logged in, if the client supports it.
# ( this was standard till mars_nwe-0.98.pl4 )
#
# 0x2 switch on strange compatibility mode for opening files.
# If an opencall do an open for writing but
# the file is readonly then this call will not fail
# but open the file readonly.
#
# 0x4 allow the rename file call (NCP function 0x45)
# renaming of directories.
# normally the rename file call returns an error if this
# routine is used for renaming directories.
#
# 0x8 ignore station/time restrictions for supervisor.
#
# 0x10 allows deleting a file even if the file is opened by
# other process.
# ( this was standard before mars_nwe-0.99.pl0 )
#
# 0x20 store file base entries for later use.
# Normally only directory base entries are stored.
# necessary if using ncpfs as mars_nwe client.
#
# 0x40 limit's volume's free space info to 2 GB.
# in some volume info calls.
# some DOS clients need it.
#
# 0x80 allows renaming a file even if the file is opened by
# other process.
# ( this was standard before mars_nwe-0.99.pl18 )
#
# 0x100 not used yet.
#
# 0x200 needed for direct int17 printing on NETX clients
# (patch from Przemyslaw Czerpak)
#
# other flags may follow.
# value will be interpreted as hex value.
8 0x0
# Section 9: Standard creat mode for creating directories and files.
# =========================================================================
#
# mkdir mode (creat mode directories), creat mode files
# values are always interpreted as octal values !
# if 0 is specified the standard umask will be used.
# if -1 is specified for directories the st_mode of parent directory
# will be used.
# Volumes depended values can be set in section 1.
# 9 -1 0640
#
9 0751 0640
# Section 10: UID and GID with minimal rights
# =========================================================================
#
# When loading the netware-drivers in the "autoexec.bat" of your
# DOS-client, you automatically "attach" to a netware-server.
# As a result, a new drive-letter is accessible under DOS, usally
# containing the programs "login.exe" and "slist.exe".
# Because you haven't logged in, nothing else of the netware-server
# will be visible to you. All actions requested from the DOS-client
# will be done with the following UID and GID on the Linux-side in this
# case.
# To achieve some level of security, the user/group asscociated with
# the UID and GID should only have _read_ rights on the files visible,
# _nothing_ else.
#
# On most Linux-systems, there is a user and group "nobody" defined in
# `/etc/passwd' and `/etc/group'. Use the number of that user/group
# for the following entries.
#
# -------------------------------------------------------------------------
# Syntax:
# 10 GID
# 11 UID
#
# GID numeric number of the group
# UID numeric number of the user
# -------------------------------------------------------------------------
#
# Example:
# 10 65534
# 11 65534
10 65534
11 65534
# =========================================================================
# Section 12: supervisor-login (required)
#
# The "supervisor" of a nw-server is much like "root" on the Linux-side.
#
# Specify a Linux-user that should be mapped to the supervisor of this
# mars_nwe-server.
# To improve security, don't use "root" for this purpose but create a
# seperate administrative account (under Linux) called "nw-adm" or similar.
#
# The nw-user defined in this section will have the mars_nwe internal UID
# "1" (remember even under Linux "root" must have the special UID "0"), so
# it is not possible to define a supervisor in section 13 (the users
# defined there will get random UIDs).
# You _can_ define a user with name "SUPERVISOR" in section 13, but he
# won't really be the "local god" on the "mars_nwe"-server.
# And of course you _can_ define a supervisor with name "GOD" or "ROOT"
# in _this_ section, which would only break the traditional naming-scheme
# of the netware-world.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 12 NW_LOGIN LINUX_LOGIN [PASSWORD]
#
# NW_LOGIN: the login-name for the "mars_nwe"-server (traditionally,
# this is "SUPERVISOR")
# LINUX_LOGIN: the account on the Linux-side associated with the NW_LOGIN
# PASSWORD: the password for the NW_LOGIN. It must be clear-text but
# will be encrypted and permanent stored in the
# bindery-files, so it (the password or the whole section, at
# your option) can be deleted after the first start of
# "nwserv".
#
# Make sure this file is not world-readable as long
# as the password stands here.
#
# If you leave this field blank when starting "mars_nwe" the
# first time, the supervisor-login will be completely
# disabled. In other words: there is no way to supply the
# supervisor with no password ("null-password").
# -------------------------------------------------------------------------
#
# Example:
# 12 SUPERVISOR nw-adm top-secret
12 SUPERVISOR root
# =========================================================================
# Section 13: user-logins (optional)
#
# You can provide mappings from the regular login-names of your Linux-Box
# to "mars_nwe"-logins here.
# Every "mars_nwe"-user _must_ have a login-name on the Linux side (even
# if he can't log in into the account associated with the login-name,
# because you locked it with a "*") in order to "own" files.
# If you specify a Linux-login that doesn't exist (one could think of a
# typo), the user will only have the minimal rights defined in
# sections 10/11.
#
# You may also map different mars_nwe user to the same unix user.
#
# See section 12 for a description of the syntax.
#
# Unlike in section 12, you can define users with no password.
# If you explizit want to set 'no password' here then use
# a '-' sign as password.
# -------------------------------------------------------------------------
# Syntax:
# 13 NW_LOGIN [LINUX_LOGIN] [PASSWORD] [FLAGS]
#
# FLAGS must be a hex value begin with 0x
# the only FLAG value in the moment is 0x1 for 'fixed passwords'
# which cannot be changed by user.
# Example:
# 13 MARTIN
# 13 MARTIN martin
# 13 DAREK martin
# 13 COMMON common gast 0x1 # no password change by user.
# 13 COMMON common 0x1 # syntax is allowed too.
13 GUEST nobody - 0x1
# Section 14: currently not used
# =========================================================================
# Section 15: automatic mapping of logins (decision required)
#
# If you have a large number of accounts on your Linux-machine, you may
# want to map all Linux-logins automatically to "mars_nwe"-logins.
#
# At this stage this section is only a quick hack to make life a bit
# easier for the administrator.
#
# WARNING: as there is no algorithm to convert the encrypted
# "Linux-passwords" into the encrypted format used by the DOS-clients (and
# therefore "mars_nwe"), you have to supply a common password for all
# automatically mapped users. This is a big security concern and you
# should never make this common password public (and, of course you
# should choose a sufficient "secure" (read: difficult) password).
# Type the common password to grant access to the users login and the
# command "setpass" instead of telling the password to the user.
#
# Only those Linux-logins will handled automatically that don't have a
# "x" or "*" as their encrypted password.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 15 FLAG DEFAULT_PASSWORD
#
# FLAG:
# 0 DON'T map the Linux-logins automatically to
# "mars_nwe"-logins (default)
# 1 YES, DO the automatic mapping and provide every login
# created this way with the common password given with
# "DEFAULT_PASSWORD"
# 99 re-read the logins from /etc/passwd and overwrite even the
# already existing logins from the bindery (this will also
# reset all the passwords to "DEFAULT_PASSWORD")
#
# DEFAULT_PASSWORD: the common password for all automatically created
# logins (only needed if FLAG is not "0"); everything about
# password in section 12 applies to this.
# -------------------------------------------------------------------------
15 0 top-secret
# =========================================================================
# Section 16: Tests on startup
#
# If you want some sanity checks at startup, set this flag to > 0.
# "mars_nwe" will try to create/change missing directories:
# SYS:LOGIN, SYS:MAIL, SYS:MAIL/XXX, SYS:PUBLIC, SYS:SYSTEM ...
# (with the "right" permissions, of course) if you enable this.
# should also be enabled when you use a new mars_nwe version.
# Disabling this test only spares little time when starting mars_nwe.
# some values:
# 1 few important tests.
# 2 also check/compress bindery.
16 1
# Section 17: some bindery / user related flags.
# =========================================================================
# Flags
# 0x1 give all user an empty! login script, if they do not
# already have one. Is interpreted by test routines
# which run if section 16 is set and nwserv starts
# or got a SIGHUP. ( nwserv -h )
#
# other flags may follow.
# value will be interpreted as hex value.
17 0x0
# Section 18: some queue handling related flags.
# =========================================================================
# Flags
# 0x1 always unset (disable) the print banner flag.
#
# other flags may follow.
# value will be interpreted as hex value.
18 0x0
# Section 19-20: currently not used
# =========================================================================
# Section 21: print queues (optional)
#
# Which of the printers connected to your Linux-box should be accessible
# from the DOS-clients?
# Multiple entries are allowed.
#
# -------------------------------------------------------------------------
# Syntax:
# 21 QUEUE_NAME [QUEUE_DIR] [PRINT_COMMAND]
#
# QUEUE_NAME: the name of the print queue on client-side (to make it
# perfectly clear: _not_ the Linux-queue)
# QUEUE_DIR: spooling directory for the print-jobs.
# The name is the DOS (not Unix) name of this
# directory.
# It must be placed on the first defined volume.
# (standard name is SYS volume).
# Then it will be created at starttime of mars_nwe.
# It must exist before printing.
# (_not_ the spooling-directories of the Linux-lpd)
# NOTE !
# A '-' sign as QUEUE_DIR has special meaning of
# 'standard' queuedir name. ( SYS:\SYSTEM\queueid.QDR )
#
# PRINT_COMMAND: command used for serving the print-jobs under Linux
# (see "man lpr" and "man magicfilter" for details)
# if the '!' is last parameter of command then
# the queue-packet fields 'banner_user_name'
# and 'banner_file_name' will be added to the
# command as last parameters.
# NOTE !
# If a print command is not specified the job can/must be
# printed by any print server.
# (e.g. pserver (ncpfs utils) or external printserver)
#
# Examples:
# 21 LASER - lpr -Plaser
# 21 OCTOPUSS
# 21 FAXPRINT - /usr/bin/psfaxprn /var/spool/fax/faxqueue
# -------------------------------------------------------------------------
21 LP - lpr -
#21 LP_PS
# =========================================================================
# Section 22: print server entries (optional)
# adds printserver entries into bindery
# e.g. to enable printing with ncpfs pserver
# -------------------------------------------------------------------------
# Syntax:
# 22 PSERVER_NAME QUEUE_NAME [FLAGS]
#
# FLAGS:
# 1 Let PSERVER_NAME be a 'normal' user (type 1).
# Used for simple qserver which works under 'normal' user login.
#
# Examples:
# 22 PS1 OCTOPUSS
#22 PS_NWE LP_PS 1
# =========================================================================
# Section 30: Burst mode values (optional)
#
# -------------------------------------------------------------------------
# Syntax:
# 30 MAX_BURST_READ_BUF MAX_BURST_WRITE_BUF
# default is 0x2000 0x2000
# Examples:
# 30 0x2000 0x2000
# =========================================================================
# Section 31: not used yet
# =========================================================================
# Flags not used yet
#
31 0x0
# =========================================================================
# Section 40ff: Some pathes (optional)
#
# -------------------------------------------------------------------------
# 40 = path for vol/dev/inode->path cache, needed for client-32,namespace
40 @MARS_NWE_INSTALL_FULL_SPOOLDIR@/.volcache
# 41 = path for share/lock files
41 @MARS_NWE_INSTALL_FULL_SPOOLDIR@/.locks
# 42 = path for spool dir, e.g. internal print queue handling
42 @MARS_NWE_INSTALL_FULL_SPOOLDIR@
#
#
# 45 = path for bindery file's
45 @MARS_NWE_DATA_DIR@/bindery
# 46 = path for attribute handling
46 @MARS_NWE_DATA_DIR@/attrib
# 47 = path for trustee handling
47 @MARS_NWE_DATA_DIR@/trustees
# =========================================================================
# Section 50: Conversion tables by Victor Khimenko <khim@mccme.ru>
# Tables for DOS->Unix names translation & upper/lowercase translations
# For more information see doc/README.NLS
# some examples files exist in the examples directory.
# Conversation file must include 4 tables a 256 byte.
# 0 = dos2unix
# 1 = unix2dos
# 2 = down2up 'dosname'
# 3 = up2down 'dosname'
# -------------------------------------------------------------------------
# Syntax:
# 50 Filename of conversation file.
#
# Examples:
# 50 @MARS_NWE_INSTALL_FULL_CONFDIR@/nwserv.cnv
# Changing defaults from config.h
# more information in config.h
# 60 10 # MAX_CONNECTIONS
# 61 10 # MAX_NW_VOLS
# 63 50 # MAX_DIR_BASE_ENTRIES
# 68 1 # USE_MMAP (use mmap=1, no mmap=0)
# 69 1 # HANDLE_ALL_SAP_TYPS (all sap typs=1, only typ 4=0)
# 70 0x44444444 # NETWORK_SERIAL_NMBR (4 byte)
# 71 0x2222 # NETWORK_APPL_NMBR (2 byte)
# --------------------------------------------------------
# You usally don't want to change anything below this line
# --------------------------------------------------------
# Sections 80-99: some more constants
# 80 50 # max_dir_search_handles (namspace.c)
# Sections 100-106: amount of debug-information
#
# FLAG:
# 0 no debug messages
# 1 errors and notes are reported
# 99 maximum debug levels
100 0 # debug IPX KERNEL (0 | 1)
101 1 # debug NWSERV
102 1 # debug NCPSERV
103 1 # debug NWCONN
104 0 # debug (start) NWCLIENT, should *always* be '0' !
105 1 # debug NWBIND
106 1 # debug NWROUTED
# Sections 200-202: logging of "nwserv"
#
200 1 # 0 = no logfile and dont daemonize nwserv/nwrouted
# 1 = daemonize nwserv/nwrouted and use logfile
201 @MARS_NWE_LOG_DIR@/nw.log # filename of logfile
#201 syslog # if filename == syslog then syslogd will be used for
# all messages
202 0x1 # flag in hex notation
# 0x0=append all messages to logfile.
# & 0x1=creat new logfile instead of appending.
#202 0x3 # & 0x2=use syslogd for error messages instead of logfile.
# Sections 210,211: timing
210 10 # 1 .. 600 (default 10) seconds after server
# really goes down after a down command
211 60 # 10 .. 600 (default 60) broadcasts every x seconds
# Sections 300-302: loging of routing-information
300 1 # > 0 print routing info to file every x broadcasts.
# ( normally minutes )
301 @MARS_NWE_LOG_DIR@/nw.routes # filename of logfile
302 0x1 # flags will be interpreted as hex value.
# 0 = append to this file
# & 0x1 = creat new routing info file
# & 0x2 = split info into several files
# (extensions = .1, .2, .3 ... )
# Section 310: watchdogs
310 7 # send wdog's only to device net < x ticks.
# 0 = always send wdogs. < 0 = never send wdogs
# Section 400:
# station file for special handling of stations.
400 @MARS_NWE_INSTALL_FULL_CONFDIR@/nwserv.stations # for syntax see file in the examples directory.
# Section 401: nearest server
#
# for special handling of the 'get nearest server request'.
401 0 # 0 = ignore entry 400, get nearest response always enabled.
# 1 = 400 are excludes, get nearest response normally enabled.
# 2 = 400 are includes, get nearest response normally disabled.
# Section 402: station connect restrictions
#
# for special handling of the 'creat connection' (attach) call.
402 0 # 0 = ignore entry 400, create connection always enabled.
# 1 = 400 are excludes, create connection normally enabled.
# 2 = 400 are includes, create connection normally disabled.

BIN
opt/nw.ini.cnv.437 Normal file

Binary file not shown.

BIN
opt/nw.ini.cnv.cyr Normal file

Binary file not shown.

BIN
opt/nw.ini.cnv.min Normal file

Binary file not shown.

36
opt/nwopt Normal file
View File

@@ -0,0 +1,36 @@
# example for nwopt file.
# !!!! NOT USED !!!!!
#
# last changed: 10-May-98
#
# Syntax similar like nwserv.conf file.
#
# This file can be located in
# - user home dir as '.nwopt' ( ~/.nwopt )
# - volume path as '.nwopt.vol' ( /u3/SYS/.nwopt.vol )
# - and/or '.nwoptg.gid' ( /u3/SYS/.nwoptg.50 )
# - and/or '.nwoptu.uid' ( /u3/SYS/.nwoptu.100 )
# the nwopt files are read after logins in order
# ~/.nwopt, .nwopt.vol, .nwoptg.xxx, .nwoptu.xxx
#
# Section 1: special flags.
# =========================================================================
# Flags
# 0x1 when creating dirs, change group to directory group
# if possible. ( must be in groups of user )
#
# other flags may follow.
# value will be interpreted as hex value.
#
#1 0x0
# Section 9: Standard creat mode for creating directories and files.
# =========================================================================
#9 0755 0664

15
opt/nwserv.stations Normal file
View File

@@ -0,0 +1,15 @@
# you can put station id's into this file for special handlings
# syntax: EntryNr net:node:socket (in hex notation or wildcards '?' and '*' )
# it will be only a very simple matchcoded string compare, therefore you
# must use the correct syntax.
#
#1 0.0.0.22:0.80.48.55.3f.33:50.3 # one special client socket
#1 0.0.0.22:0.80.48.55.3f.33:40.* # one special client socket >= 0x4000
#1 0.0.0.22:0.80.48.55.3f.32:* # one special client
#1 0.0.0.22:0.80.48.55.3f.2?:* # some clients 20 .. 29
#1 0.0.0.21:* # one special net
# entry 1: is for get nearest server request handling.
# look also into the examples/nw.ini file.
# entry 2: is for station connect restrictions.

70
opt/sendm.c Normal file
View File

@@ -0,0 +1,70 @@
/* sendm.c 23-Oct-96 */
/*
* simple demo for a sendmail acces under DOS
* DOS <-> UNX command handling using PIPE filesystem.
* can be used with unxsendm for UNX.
*
* Can also be used under Linux for ncpfs <-> mars_nwe.
* but do not use it directly (the opencall will destroy unxsendm)!!
*
* QUICK + DIRTY !!!
*/
#define ENV_UNXCOMM "UNXSENDM"
#ifdef LINUX
# define DEFAULT_COMM "/pipes/unxsendm"
# else
# define DEFAULT_COMM "p:/unxsendm"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#ifndef LINUX
# include <io.h>
#endif
#include <fcntl.h>
int main(int argc, char **argv)
{
char *unxcomm=getenv(ENV_UNXCOMM);
int fdout;
int fdin;
int is_pipe=isatty(0) ? 0 :1;
if (NULL == unxcomm)
unxcomm=DEFAULT_COMM;
fdout = open(unxcomm, O_RDWR);
fdin = dup(fdout);
if (fdout > -1 && fdin > -1) {
char **pp=argv+1;
unsigned char b=32;
int size;
char buf[1024];
while(--argc >0) {
write(fdout, *pp, strlen(*pp));
++pp;
write(fdout, &b, 1);
}
b=0;
write(fdout, &b, 1);
close(fdout);
fdout=dup(fdin);
if (6 == (size = read(fdin, buf, 6)) && !memcmp(buf, "+++++\n", 6)) {
/* now write stdin -> sendmail */
if (is_pipe) {
while (0 < (size = fread(buf, 1, sizeof(buf), stdin)))
write(fdout, buf, size);
}
} else if (size > 0)
write(1, buf, size); /* probably errormessage */
close(fdout);
/* now we print errors */
while (0 < (size = read(fdin, buf, sizeof(buf)))) {
write(1, buf, size);
}
close(fdin);
return(0);
} else
fprintf(stderr, "Cannot open PIPECOMMAND '%s'\n", unxcomm);
return(1);
}

135
opt/unxcomm.c Normal file
View File

@@ -0,0 +1,135 @@
/* unxcomm.c 22-Oct-98
* simple UNX program to work together with 'comm'
* to demonstrate usage of pipefilesystem
* needs mars_nwe version >= 0.99.pl13 !
* comm and unxcomm must be same version !
* 'run' directory must exist and must have
* read and write permission for every user.
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
static char **build_argv(int bufsize, char *command, int len)
/* routine returns **argv for use with execv routines */
{
int offset = ((len+4) / 4) * 4; /* aligned offset for **argv */
int components = (bufsize - offset) / 4;
if (components-- > 1) { /* minimal argv[0] + NULL */
char **argv = (char **)(command+offset);
char **pp = argv;
char *p = command;
char c;
int i=0;
*pp = p;
*(p+len) = 0;
while ((0 != (c = *p++)) && i < components) {
if (c == 10 || c == 13) {
*(p-1) = '\0';
break;
} else if (c == 32 || c == '\t') {
*(p-1) = '\0';
if (*p != 32 && *p != '\t' && *p != 10 && *p != 13) {
*(++pp)=p;
i++;
}
} else if (!i && c == '/') { /* here i must get argv[0] */
*pp=p;
}
}
if (*pp && !**pp) *pp=NULL;
else
*(++pp)=NULL;
return(argv);
}
return(NULL);
}
#define MAXARGLEN 1024
int bl_read(int fd, void *buf, int size)
{
fd_set fdin;
struct timeval t;
int result;
FD_ZERO(&fdin);
FD_SET(fd, &fdin);
t.tv_sec = 1;
t.tv_usec = 0;
result = select(fd+1, &fdin, NULL, NULL, &t);
if (result > 0)
result=read(fd, buf, size);
return(result);
}
int main(int argc, char *argv[])
{
int size=-1;
int pid=getpid();
char buf[MAXARGLEN+1024];
char fifopath[257];
char *p;
close(2);
dup2(1,2);
if (argc > 3) {
strcpy(fifopath, argv[0]);
p=strrchr(fifopath, '/');
if (p) {
++p;
sprintf(p, "run/%08x.in", pid);
if (mkfifo(fifopath, 0600)) {
perror("mkfifo");
fprintf(stderr, "unxcomm:fifo.in=`%s`\n", fifopath);
} else {
fprintf(stdout, "#%08x\n", pid);
fflush(stdout);
size=0;
}
}
}
if (!size) {
int tries=0;
int fd = open(fifopath, O_RDONLY);
if (fd > -1) {
while (tries++ < 5) {
int l;
while (0 < (l=bl_read(fd, buf+size, MAXARGLEN-size))) {
size+=l;
}
if (size && buf[size-1] == '\0') break;
}
close(fd);
} else {
perror("open fifo");
size=-1;
}
unlink(fifopath);
}
if ( 0 < size) {
char **argvv=build_argv(sizeof(buf), buf, size);
if (argvv) {
char path[300];
execv(buf, argvv);
sprintf(path, "/usr/bin/%s", *argvv);
execv(path, argvv);
sprintf(path, "/bin/%s", *argvv);
execv(path, argvv);
sprintf(path, "/usr/sbin/%s", *argvv);
execv(path, argvv);
sprintf(path, "/sbin/%s", *argvv);
execv(path, argvv);
fprintf(stderr, "%s:\tCould not find program '%s'\n", *argv, buf);
exit(1);
}
}
fprintf(stderr, "%s:\tGot no paras\n", *argv);
exit(1);
}

53
opt/unxsendm.c Normal file
View File

@@ -0,0 +1,53 @@
/* unxsendm.c 23-Oct-96 */
/* simple UNX program to work together with 'pipe-filesystem'
* and DOS sendm.exe to get sendmail functionality under DOS
* QUICK + DIRTY !!!
*/
#include <stdio.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/types.h>
#define MAXARGLEN 100
int bl_read(int fd, void *buf, int size)
{
fd_set fdin;
struct timeval t;
int result;
FD_ZERO(&fdin);
FD_SET(fd, &fdin);
t.tv_sec = 1; /* 1 sec should be enough */
t.tv_usec = 0;
result = select(fd+1, &fdin, NULL, NULL, &t);
if (result > 0)
result=read(fd, buf, size);
return(result);
}
int main(int argc, char *argv[])
{
int size;
char buf[1024];
close(2);
dup2(1,2); /* we want stdout and errout */
if (-1 < (size=bl_read(0, buf, MAXARGLEN))){
FILE *f;
char path[MAXARGLEN+200];
buf[size]='\0';
sprintf(path, "/usr/sbin/sendmail %s", buf);
f=popen(path, "w");
if (NULL != f) {
write(1, "+++++\n", 6);
while (0 < (size=bl_read(0, buf, sizeof(buf)))){
fwrite(buf, size, 1, f);
}
pclose(f);
return(0);
}
perror(path);
} else
perror("read stdin");
return(1);
}

71
opt/xsockrt.c Normal file
View File

@@ -0,0 +1,71 @@
/* (C)opyright (C) 1997 Martin Stover, Marburg, Germany
* simple program for adding/deleting ipx-routes for special sockets
* e.g. for playing doom around ipx-networks.
* needs special linux/net/ipx/af_ipx.c patch !!
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <strings.h>
#include <linux/ipx.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
static int usage(char *prog)
{
char *p=strrchr(prog, '/');
if (p==NULL)p=prog;
else p++;
fprintf(stderr, "usage:\t%s add|del [socknr] \n", p);
fprintf(stderr, "\tsocknr defaults to 0x869b (doom)\n");
fprintf(stderr, "\tother known sockets are:\n");
fprintf(stderr, "\t-0x8813 virgin games, Red Alert\n");
fprintf(stderr, "\tadd 0 activates automatic add of socknr !!\n");
fprintf(stderr, "\tdel 0 removes all socknr and deactivates automatic add !!\n");
return(1);
}
static int handle_ioctl(int mode, int socknr)
{
int fd = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
int result=0;
if (fd > -1) {
if (mode == 1 || !mode) {
result = ioctl(fd, (mode==1) ? SIOCPROTOPRIVATE+4
: SIOCPROTOPRIVATE+5,
&socknr);
} else result++;
if (result==-1) {
perror("ioctl");
result=2;
}
close(fd);
} else {
result++;
perror("open socket");
}
return(result);
}
int main(int argc, char *argv[])
{
int socknr=0x869b;
if (argc < 2)
return(usage(argv[0]));
if (argc > 2 && 1 != sscanf(argv[2],"%i", &socknr))
return(usage(argv[0]));
if (!strncasecmp(argv[1], "add", 3)) {
return(handle_ioctl(1, socknr));
} else if (!strncasecmp(argv[1], "del", 3)) {
return(handle_ioctl(0, socknr));
} else
return(usage(argv[0]));
}