Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8d830f9a3 | ||
|
|
b36a27bedb | ||
|
|
7d0e3d011b | ||
|
|
84cb1f167d |
BIN
.downloads/ncpfs-0.23.tgz
Normal file
BIN
.downloads/ncpfs-0.23.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-0.24.tgz
Normal file
BIN
.downloads/ncpfs-0.24.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.0.tgz
Normal file
BIN
.downloads/ncpfs-2.0.0.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.1.tgz
Normal file
BIN
.downloads/ncpfs-2.0.1.tgz
Normal file
Binary file not shown.
29
Changes
29
Changes
@@ -1,6 +1,35 @@
|
|||||||
I only began this file with ncpfs-0.12. If you're interested in older
|
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, you can find them on ftp.gwdg.de:/pub/linux/misc/ncpfs/old.
|
||||||
|
|
||||||
|
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
|
ncpfs-0.21 -> ncpfs-0.22
|
||||||
- removed a bad race condition in kernel-1.2/src/dir.c.
|
- removed a bad race condition in kernel-1.2/src/dir.c.
|
||||||
- handle 0x9999-responses from the ncp server correctly.
|
- handle 0x9999-responses from the ncp server correctly.
|
||||||
|
|||||||
21
FAQ
21
FAQ
@@ -4,6 +4,27 @@ 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?
|
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
|
To be honest, I do not really know. Currently my only test equipment
|
||||||
|
|||||||
16
Makefile
16
Makefile
@@ -2,7 +2,7 @@
|
|||||||
# Makefile for the linux ncp-filesystem routines.
|
# Makefile for the linux ncp-filesystem routines.
|
||||||
#
|
#
|
||||||
|
|
||||||
VERSION = 0.22
|
VERSION = 2.0.1
|
||||||
|
|
||||||
# If you are using kerneld to autoload ncp support,
|
# If you are using kerneld to autoload ncp support,
|
||||||
# uncomment this (kerneld is in linux since about 1.3.57):
|
# uncomment this (kerneld is in linux since about 1.3.57):
|
||||||
@@ -14,9 +14,9 @@ SBINDIR = /sbin
|
|||||||
INTERM_BINDIR = $(TOPDIR)/bin
|
INTERM_BINDIR = $(TOPDIR)/bin
|
||||||
SUBDIRS = util ipx-1.0 man
|
SUBDIRS = util ipx-1.0 man
|
||||||
|
|
||||||
KVERSION=$(shell uname -r | cut -b3)
|
KVERSION=$(shell uname -r | cut -b1-3)
|
||||||
|
|
||||||
ifeq ($(KVERSION),2)
|
ifeq ($(KVERSION),1.2)
|
||||||
SUBDIRS += kernel-1.2/src
|
SUBDIRS += kernel-1.2/src
|
||||||
INCLUDES = -I$(TOPDIR)/kernel-1.2
|
INCLUDES = -I$(TOPDIR)/kernel-1.2
|
||||||
endif
|
endif
|
||||||
@@ -42,7 +42,7 @@ clean:
|
|||||||
mrproper: clean
|
mrproper: clean
|
||||||
rm -fr $(INTERM_BINDIR)/* ncpfs.tgz
|
rm -fr $(INTERM_BINDIR)/* ncpfs.tgz
|
||||||
make -C util mrproper
|
make -C util mrproper
|
||||||
(cd ncpd; make clean)
|
(cd daemon; make clean)
|
||||||
|
|
||||||
modules: ncpfs.o
|
modules: ncpfs.o
|
||||||
|
|
||||||
@@ -50,7 +50,13 @@ SRCPATH=$(shell pwd)
|
|||||||
SRCDIR=$(shell basename $(SRCPATH))
|
SRCDIR=$(shell basename $(SRCPATH))
|
||||||
DISTFILE=$(SRCDIR).tgz
|
DISTFILE=$(SRCDIR).tgz
|
||||||
|
|
||||||
dist: tgz
|
dist: mrproper
|
||||||
|
mv daemon ..
|
||||||
|
(cd ..; \
|
||||||
|
tar cvf - $(SRCDIR) | \
|
||||||
|
gzip -9 > $(DISTFILE); \
|
||||||
|
mv $(DISTFILE) $(SRCDIR))
|
||||||
|
mv ../daemon .
|
||||||
make dep
|
make dep
|
||||||
make all
|
make all
|
||||||
|
|
||||||
|
|||||||
14
README
14
README
@@ -3,8 +3,22 @@ some little utilities it also contains nprint, which enables you to
|
|||||||
print on NetWare print queues. The opposite side, pserver, is also
|
print on NetWare print queues. The opposite side, pserver, is also
|
||||||
provided.
|
provided.
|
||||||
|
|
||||||
|
I'm planning major changes in the structure of ncpfs for Linux 2.1.x
|
||||||
|
which will break the binary compatibility. So I changed the numbering
|
||||||
|
scheme for ncpfs. ncpfs-2.0.x will be the version to be used with
|
||||||
|
Linux 2.0.0 and older kernels, and ncpfs-2.1.x will be the version for
|
||||||
|
the development kernels.
|
||||||
|
|
||||||
INSTALLATION
|
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'. Probably you do not need the full internal net that
|
||||||
|
you are asked for next.
|
||||||
|
|
||||||
The installation of ncpfs depends on the kernel version you are
|
The installation of ncpfs depends on the kernel version you are
|
||||||
using. For kernel 1.2, you should simply type 'make' and look at
|
using. For kernel 1.2, you should simply type 'make' and look at
|
||||||
what's in the bin/ directory after that. Please be sure that your
|
what's in the bin/ directory after that. Please be sure that your
|
||||||
|
|||||||
3
TODO
3
TODO
@@ -1,9 +1,6 @@
|
|||||||
Here's a list of things I want to do. Feel free to send suggestions,
|
Here's a list of things I want to do. Feel free to send suggestions,
|
||||||
or even help me ;-).
|
or even help me ;-).
|
||||||
|
|
||||||
- little utilities for bindery access, such as nwlsobj, nwlsprop,
|
|
||||||
nwcreateobj and so on.
|
|
||||||
|
|
||||||
- Add flags to pserver's command line, so that the print command can
|
- Add flags to pserver's command line, so that the print command can
|
||||||
find out the name of user who printed the job.
|
find out the name of user who printed the job.
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
{ "auto_primary", required_argument, NULL, 1 },
|
{ "auto_primary", required_argument, NULL, 1 },
|
||||||
@@ -66,8 +67,14 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
||||||
if (s < 0) {
|
if (s < 0) {
|
||||||
|
int old_errno = errno;
|
||||||
sprintf(errmsg, "%s: socket", progname);
|
sprintf(errmsg, "%s: socket", progname);
|
||||||
perror(errmsg);
|
perror(errmsg);
|
||||||
|
if (old_errno == -EINVAL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Probably you have no IPX support in "
|
||||||
|
"your kernel\n");
|
||||||
|
}
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
static struct ifreq id;
|
static struct ifreq id;
|
||||||
static char *progname;
|
static char *progname;
|
||||||
@@ -118,8 +119,14 @@ ipx_add_interface(int argc, char **argv)
|
|||||||
|
|
||||||
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
||||||
if (s < 0) {
|
if (s < 0) {
|
||||||
|
int old_errno = errno;
|
||||||
sprintf(errmsg, "%s: socket", progname);
|
sprintf(errmsg, "%s: socket", progname);
|
||||||
perror(errmsg);
|
perror(errmsg);
|
||||||
|
if (old_errno == -EINVAL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Probably you have no IPX support in "
|
||||||
|
"your kernel\n");
|
||||||
|
}
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
ipxdump/ipxdump
BIN
ipxdump/ipxdump
Binary file not shown.
BIN
ipxdump/ipxparse
BIN
ipxdump/ipxparse
Binary file not shown.
@@ -305,6 +305,12 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
case 01:
|
case 01:
|
||||||
printf("Get Directory Path\n");
|
printf("Get Directory Path\n");
|
||||||
break;
|
break;
|
||||||
|
case 05:
|
||||||
|
printf("Get Volume Number\n");
|
||||||
|
break;
|
||||||
|
case 06:
|
||||||
|
printf("Get Volume Name\n");
|
||||||
|
break;
|
||||||
case 18:
|
case 18:
|
||||||
printf("Allocate Permanent Dir Handle\n");
|
printf("Allocate Permanent Dir Handle\n");
|
||||||
break;
|
break;
|
||||||
@@ -314,6 +320,9 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
case 21:
|
case 21:
|
||||||
printf("Get Volume Info with handle\n");
|
printf("Get Volume Info with handle\n");
|
||||||
break;
|
break;
|
||||||
|
case 48:
|
||||||
|
printf("Get Name Space Directory Entry\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
data += 3;
|
data += 3;
|
||||||
data_length -= 3;
|
data_length -= 3;
|
||||||
@@ -326,6 +335,9 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
case 17:
|
case 17:
|
||||||
printf("Get Fileserver Information\n");
|
printf("Get Fileserver Information\n");
|
||||||
break;
|
break;
|
||||||
|
case 22:
|
||||||
|
printf("Get Station's logged Info (old)\n");
|
||||||
|
break;
|
||||||
case 23:
|
case 23:
|
||||||
printf("Get Crypt Key\n");
|
printf("Get Crypt Key\n");
|
||||||
break;
|
break;
|
||||||
@@ -359,6 +371,10 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
printf("fn: %-3d\n", rq->function);
|
printf("fn: %-3d\n", rq->function);
|
||||||
printf("End of Job\n");
|
printf("End of Job\n");
|
||||||
break;
|
break;
|
||||||
|
case 33:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Negotiate Buffer size\n");
|
||||||
|
break;
|
||||||
case 34:
|
case 34:
|
||||||
printf("fn: %-3d, subfn: %-3d\n", rq->function,
|
printf("fn: %-3d, subfn: %-3d\n", rq->function,
|
||||||
data[2]);
|
data[2]);
|
||||||
@@ -425,10 +441,21 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
case 8:
|
case 8:
|
||||||
printf("Delete a File Or Subdirectory\n");
|
printf("Delete a File Or Subdirectory\n");
|
||||||
break;
|
break;
|
||||||
|
case 12:
|
||||||
|
printf("Allocate Short Directory Handle\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
data += 1;
|
data += 1;
|
||||||
data_length -= 1;
|
data_length -= 1;
|
||||||
break;
|
break;
|
||||||
|
case 97:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Get Big Packet NCP Max Packet Size\n");
|
||||||
|
break;
|
||||||
|
case 101:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Packet Burst Connection Request\n");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("fn: %-3d\n", rq->function);
|
printf("fn: %-3d\n", rq->function);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include <linux/ncp_fs.h>
|
#include <linux/ncp_fs.h>
|
||||||
#include <asm/segment.h>
|
#include <asm/segment.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
|
#include <linux/locks.h>
|
||||||
#include "ncplib_kernel.h"
|
#include "ncplib_kernel.h"
|
||||||
|
|
||||||
struct ncp_dirent {
|
struct ncp_dirent {
|
||||||
@@ -827,7 +828,7 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
|
|
||||||
memcpy(name, __name, len);
|
memcpy(name, __name, len);
|
||||||
name[len] = 0;
|
name[len] = 0;
|
||||||
|
lock_super(dir->i_sb);
|
||||||
result_info = ncp_find_dir_inode(dir, name);
|
result_info = ncp_find_dir_inode(dir, name);
|
||||||
|
|
||||||
if (result_info != 0)
|
if (result_info != 0)
|
||||||
@@ -841,6 +842,7 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
inode number */
|
inode number */
|
||||||
|
|
||||||
*result = iget(dir->i_sb, ncp_info_ino(server, result_info));
|
*result = iget(dir->i_sb, ncp_info_ino(server, result_info));
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
|
|
||||||
if (*result == NULL)
|
if (*result == NULL)
|
||||||
@@ -903,6 +905,7 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
}
|
}
|
||||||
if (res != 0)
|
if (res != 0)
|
||||||
{
|
{
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
@@ -913,10 +916,12 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
|
|
||||||
if (!(*result = ncp_iget(dir, &finfo)))
|
if (!(*result = ncp_iget(dir, &finfo)))
|
||||||
{
|
{
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -946,6 +951,7 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
_name[len] = '\0';
|
_name[len] = '\0';
|
||||||
str_upper(_name);
|
str_upper(_name);
|
||||||
|
|
||||||
|
lock_super(dir->i_sb);
|
||||||
if (ncp_open_create_file_or_subdir(NCP_SERVER(dir),
|
if (ncp_open_create_file_or_subdir(NCP_SERVER(dir),
|
||||||
NCP_ISTRUCT(dir), _name,
|
NCP_ISTRUCT(dir), _name,
|
||||||
OC_MODE_CREATE|OC_MODE_OPEN|
|
OC_MODE_CREATE|OC_MODE_OPEN|
|
||||||
@@ -953,6 +959,7 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
0, AR_READ|AR_WRITE,
|
0, AR_READ|AR_WRITE,
|
||||||
&finfo) != 0)
|
&finfo) != 0)
|
||||||
{
|
{
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
}
|
}
|
||||||
@@ -965,10 +972,12 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
if (!(*result = ncp_iget(dir, &finfo)) < 0)
|
if (!(*result = ncp_iget(dir, &finfo)) < 0)
|
||||||
{
|
{
|
||||||
ncp_close_file(NCP_SERVER(dir), finfo.file_handle);
|
ncp_close_file(NCP_SERVER(dir), finfo.file_handle);
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -985,6 +994,7 @@ ncp_mkdir(struct inode *dir, const char *name, int len, int mode)
|
|||||||
|| ( (len == 2)
|
|| ( (len == 2)
|
||||||
&& (name[1] == '.'))))
|
&& (name[1] == '.'))))
|
||||||
{
|
{
|
||||||
|
iput(dir);
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <linux/stat.h>
|
#include <linux/stat.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/ncp_fs.h>
|
#include <linux/ncp_fs.h>
|
||||||
|
#include <linux/locks.h>
|
||||||
#include "ncplib_kernel.h"
|
#include "ncplib_kernel.h"
|
||||||
#include <linux/malloc.h>
|
#include <linux/malloc.h>
|
||||||
|
|
||||||
@@ -50,8 +51,10 @@ ncp_make_open(struct inode *i, int right)
|
|||||||
|
|
||||||
DPRINTK("ncp_make_open: dirent->opened = %d\n", finfo->opened);
|
DPRINTK("ncp_make_open: dirent->opened = %d\n", finfo->opened);
|
||||||
|
|
||||||
|
lock_super(i->i_sb);
|
||||||
if (finfo->opened == 0)
|
if (finfo->opened == 0)
|
||||||
{
|
{
|
||||||
|
finfo->access = -1;
|
||||||
/* tries max. rights */
|
/* tries max. rights */
|
||||||
if (ncp_open_create_file_or_subdir(NCP_SERVER(i),
|
if (ncp_open_create_file_or_subdir(NCP_SERVER(i),
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
@@ -69,12 +72,10 @@ ncp_make_open(struct inode *i, int right)
|
|||||||
{
|
{
|
||||||
finfo->access = O_RDONLY;
|
finfo->access = O_RDONLY;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
return -EACCES;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlock_super(i->i_sb);
|
||||||
|
|
||||||
if ( ((right == O_RDONLY) && ( (finfo->access == O_RDONLY)
|
if ( ((right == O_RDONLY) && ( (finfo->access == O_RDONLY)
|
||||||
|| (finfo->access == O_RDWR)))
|
|| (finfo->access == O_RDWR)))
|
||||||
|| ((right == O_WRONLY) && ( (finfo->access == O_WRONLY)
|
|| ((right == O_WRONLY) && ( (finfo->access == O_WRONLY)
|
||||||
|
|||||||
@@ -132,7 +132,9 @@ static void
|
|||||||
ncp_put_inode(struct inode *inode)
|
ncp_put_inode(struct inode *inode)
|
||||||
{
|
{
|
||||||
struct nw_file_info *finfo = NCP_FINFO(inode);
|
struct nw_file_info *finfo = NCP_FINFO(inode);
|
||||||
|
struct super_block *sb = inode->i_sb;
|
||||||
|
|
||||||
|
lock_super(sb);
|
||||||
if (finfo->opened != 0)
|
if (finfo->opened != 0)
|
||||||
{
|
{
|
||||||
if (ncp_close_file(NCP_SERVER(inode), finfo->file_handle)!=0)
|
if (ncp_close_file(NCP_SERVER(inode), finfo->file_handle)!=0)
|
||||||
@@ -155,6 +157,7 @@ ncp_put_inode(struct inode *inode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
clear_inode(inode);
|
clear_inode(inode);
|
||||||
|
unlock_super(sb);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct super_block *
|
struct super_block *
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
MAN1= slist nprint pqlist nsend pserver ncopy
|
MAN1= slist nprint pqlist nsend pserver ncopy npasswd
|
||||||
|
MAN1 += nwbols nwboprops nwbpvalues
|
||||||
MAN5= nwclient
|
MAN5= nwclient
|
||||||
MAN8= ncpmount ncpumount ipx_configure ipx_interface ipx_internal_net \
|
MAN8= ncpmount ncpumount ipx_configure ipx_interface ipx_internal_net \
|
||||||
ipx_route nwmsg
|
ipx_route nwmsg
|
||||||
|
MAN8 += nwbocreate nwborm nwbpadd nwbpcreate nwbprm
|
||||||
|
MAN8 += nwgrant nwrevoke
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
55
man/npasswd.1
Normal file
55
man/npasswd.1
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
.TH NPASSWD 1 06/22/1996 npasswd npasswd
|
||||||
|
.SH NAME
|
||||||
|
npasswd \- Change a user's password
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B npasswd
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
]
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
With
|
||||||
|
.B npasswd,
|
||||||
|
you can change your password on a NetWare server.
|
||||||
|
.B npasswd
|
||||||
|
asks for the old password and twice for the new password. Then it
|
||||||
|
changes the password on the server.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
With -h npasswd prints a little help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
.RS 3
|
||||||
|
is the name of the bindery object whose password is to be changed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
is the bindery object type of the object whose password is to be
|
||||||
|
changed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH CREDITS
|
||||||
|
npasswd would not have been possible without the work of Guntram
|
||||||
|
Blom. Look at nwcrypt.c for his work.
|
||||||
133
man/nwbocreate.8
Normal file
133
man/nwbocreate.8
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
.TH NWBOCREATE 8 7/9/1996 nwbocreate nwbocreate
|
||||||
|
.SH NAME
|
||||||
|
nwbocreate \- Create a NetWare Bindery Object
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbocreate
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
] [
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbocreate
|
||||||
|
creates the specified NetWare Bindery Object.
|
||||||
|
|
||||||
|
.B nwbocreate
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbocreate
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be created.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
.RS 3
|
||||||
|
|
||||||
|
Read security and write security may each have one of the following values:
|
||||||
|
|
||||||
|
ANYONE: Anyone may access the object
|
||||||
|
LOGGED: Anyone who is logged in may access the
|
||||||
|
object
|
||||||
|
OBJECT: Anyone who is logged in as the object or
|
||||||
|
SUPERVISOR equivalent may access the
|
||||||
|
object
|
||||||
|
SUPERVISOR: Anyone who is logged in as SUPERVISOR
|
||||||
|
equivalent may access the object
|
||||||
|
NETWARE: Only the Bindery may access the object
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbocreate was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
117
man/nwbols.1
Normal file
117
man/nwbols.1
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
.TH NWBOLS 1 7/9/1996 nwbols nwbols
|
||||||
|
.SH NAME
|
||||||
|
nwbols \- List NetWare Bindery Objects
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbols
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
|
] [
|
||||||
|
.B pattern
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbols
|
||||||
|
lists the specified NetWare Bindery Objects visible for the user.
|
||||||
|
|
||||||
|
.B nwbols
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbols
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
.RS 3
|
||||||
|
You can restrict the objects listed by specifying the type of the
|
||||||
|
objects to be listed.
|
||||||
|
.I type
|
||||||
|
must be given as a decimal number.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B pattern
|
||||||
|
.RS 3
|
||||||
|
Specifying a pattern is another way to restrict the objects
|
||||||
|
listed. Please note that this pattern is evaluated by the NetWare
|
||||||
|
server. grep would be a better candidate for complex patterns.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
By default, the object's name, its ID and its type are listed by
|
||||||
|
.B nwbols.
|
||||||
|
In the verbose mode, activated by
|
||||||
|
.B -v,
|
||||||
|
the object flags, its security byte and the properties flag is also
|
||||||
|
listed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbols was written by Volker Lendecke. See the Changes file of ncpfs
|
||||||
|
for other contributors.
|
||||||
118
man/nwboprops.1
Normal file
118
man/nwboprops.1
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
.TH NWBOPROPS 1 7/9/1996 nwboprops nwboprops
|
||||||
|
.SH NAME
|
||||||
|
nwboprops \- List properies of a NetWare Bindery Object
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwboprops
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwboprops
|
||||||
|
lists all the properties of the specified NetWare Bindery Objects.
|
||||||
|
|
||||||
|
.B nwboprops
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwboprops
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be inspected.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
By default, only the property name is listed. In verbose mode,
|
||||||
|
activated by
|
||||||
|
.B -v,
|
||||||
|
the property flag, the property security byte and the value flag are
|
||||||
|
also listed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwboprops was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
106
man/nwborm.8
Normal file
106
man/nwborm.8
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
.TH NWBORM 8 7/9/1996 nwborm nwborm
|
||||||
|
.SH NAME
|
||||||
|
nwborm \- Remove a NetWare Bindery Object
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwborm
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwborm
|
||||||
|
removes the specified NetWare Bindery Objects.
|
||||||
|
|
||||||
|
.B nwborm
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwborm
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be deleted.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwborm was written by Volker Lendecke with the corresponding Caldera
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
145
man/nwbpadd.8
Normal file
145
man/nwbpadd.8
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
.TH NWBPADD 8 7/9/1996 nwbpadd nwbpadd
|
||||||
|
.SH NAME
|
||||||
|
nwbpadd \- Set the value of a NetWare Bindery Property
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbpadd
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
]
|
||||||
|
.B value
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbpadd
|
||||||
|
sets the value of a ITEM type property, and adds bindery objects to a
|
||||||
|
SET type property.
|
||||||
|
|
||||||
|
.B nwbpadd
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbpadd
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be touched.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be set.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B value
|
||||||
|
.RS 3
|
||||||
|
If property is of type SET, value is an object id in hexadecimal
|
||||||
|
notation. Otherwise, value is either a string value to be written, or
|
||||||
|
a count of bytes to be written. The latter is assumed if more than one
|
||||||
|
value argument is given. The count is decimal, and the following
|
||||||
|
arguments are interpreted as bytes in hexadecimal notation.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
All these examples assume the existence of the file
|
||||||
|
$HOME/.nwclient. Otherwise, the server and user would have to be
|
||||||
|
specified.
|
||||||
|
|
||||||
|
nwbpadd -o linus -t 1 -p groups_i\\'m_in os_hackers
|
||||||
|
|
||||||
|
In this example, user linus is added to the group os_hackers. Please
|
||||||
|
note that the ' has to be quoted.
|
||||||
|
|
||||||
|
nwbpadd -o linus -t 1 -p identification "Linus Torvalds"
|
||||||
|
|
||||||
|
User linus is given his real name :-).
|
||||||
|
|
||||||
|
nwbpadd -o linus -t 1 -p revision -v 04 00 00 01 0b
|
||||||
|
|
||||||
|
A new 4-byte binary value 0x0000010b (hi-lo order, no byte-swapping) is added
|
||||||
|
to the "REVISION" property of the user "linus".
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbpadd was written by Volker Lendecke with the corresponding Caldera
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
154
man/nwbpcreate.8
Normal file
154
man/nwbpcreate.8
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
.TH NWBPCREATE 8 7/9/1996 nwbpcreate nwbpcreate
|
||||||
|
.SH NAME
|
||||||
|
nwbpcreate \- Create a NetWare Bindery Propery
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbpcreate
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
] [
|
||||||
|
.B -s
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
] [
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbpcreate
|
||||||
|
creates the specified NetWare Bindery Propery.
|
||||||
|
|
||||||
|
.B nwbpcreate
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbpcreate
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be touched.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be created.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -s
|
||||||
|
.RS 3
|
||||||
|
By default,
|
||||||
|
.B nwbpcreate
|
||||||
|
creates properties of type ITEM. If you want to create a property of
|
||||||
|
type SET, such as groups_i\\'m_in, you must use the
|
||||||
|
.B -s
|
||||||
|
option.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
.RS 3
|
||||||
|
|
||||||
|
Read security and write security may each have one of the following values:
|
||||||
|
|
||||||
|
ANYONE: Anyone may access the property
|
||||||
|
LOGGED: Anyone who is logged in may access the
|
||||||
|
property
|
||||||
|
OBJECT: Anyone who is logged in as the object or
|
||||||
|
SUPERVISOR equivalent may access the
|
||||||
|
property
|
||||||
|
SUPERVISOR: Anyone who is logged in as SUPERVISOR
|
||||||
|
equivalent may access the property
|
||||||
|
NETWARE: Only the Bindery may access the property
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbpcreate was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
116
man/nwbprm.8
Normal file
116
man/nwbprm.8
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
.TH NWBPRM 8 7/9/1996 nwbprm nwbprm
|
||||||
|
.SH NAME
|
||||||
|
nwbprm \- Remove a NetWare Bindery Propery
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbprm
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbprm
|
||||||
|
removes the specified NetWare Bindery Propery.
|
||||||
|
|
||||||
|
.B nwbprm
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbprm
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be touched.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be removed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbprm was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
132
man/nwbpvalues.1
Normal file
132
man/nwbpvalues.1
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
.TH NWBPVALUES 8 7/9/1996 nwbpvalues nwbpvalues
|
||||||
|
.SH NAME
|
||||||
|
nwbpvalues \- Print a NetWare Bindery Propery's contents
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbpvalues
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbpvalues
|
||||||
|
prints the contents of a SET property.
|
||||||
|
|
||||||
|
.B nwbpvalues
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbpvalues
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be looked up.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be printed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
By default, the object's name, its ID and its type are listed by
|
||||||
|
.B nwbols.
|
||||||
|
In the verbose mode, activated by
|
||||||
|
.B -v,
|
||||||
|
the object flags, its security byte and the properties flag is also
|
||||||
|
listed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH BUGS
|
||||||
|
Only SET properties can be printed. This will hopefully be fixed in
|
||||||
|
the future. (Feel free to fix this and send me a patch ;-)).
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbpvalues was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
148
man/nwgrant.8
Normal file
148
man/nwgrant.8
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
.TH NWGRANT 8 7/9/1996 nwgrant nwgrant
|
||||||
|
.SH NAME
|
||||||
|
nwgrant \- Add Trustee Rights to a directory
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwgrant
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I rights
|
||||||
|
]
|
||||||
|
.B directory
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwgrant
|
||||||
|
adds the specified bindery object with the corresponding trustee
|
||||||
|
rights to the directory.
|
||||||
|
|
||||||
|
.B nwgrant
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwgrant
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be added as trustee.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -r
|
||||||
|
.I rights
|
||||||
|
.RS 3
|
||||||
|
You must tell
|
||||||
|
.B nwgrant
|
||||||
|
which rights it should grant to the bindery object.
|
||||||
|
The new rights for the object is specified by
|
||||||
|
.I rights,
|
||||||
|
which is the sum of the following hexadecimal individual rights values:
|
||||||
|
|
||||||
|
00 = no access
|
||||||
|
01 = read access
|
||||||
|
02 = write access
|
||||||
|
04 = open access
|
||||||
|
08 = create access
|
||||||
|
10 = delete access
|
||||||
|
20 = ownership access
|
||||||
|
40 = search access
|
||||||
|
80 = modify access
|
||||||
|
|
||||||
|
for a possible total of "ff" for all rights.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B directory
|
||||||
|
.RS 3
|
||||||
|
You must specify the directory to which to add the object as
|
||||||
|
trustee. This has to be done in fully qualified NetWare notation.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
nwgrant -o linus -t 1 -r ff 'data:home\\linus'
|
||||||
|
|
||||||
|
With this example, user linus is given all rights to his home
|
||||||
|
directory on the data volume. This example assumes the existence of
|
||||||
|
the file $HOME/.nwclient.
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwgrant was written by Volker Lendecke with the corresponding NetWare
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
|
|
||||||
124
man/nwrevoke.8
Normal file
124
man/nwrevoke.8
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
.TH NWREVOKE 8 7/9/1996 nwrevoke nwrevoke
|
||||||
|
.SH NAME
|
||||||
|
nwrevoke \- Revoke a Trustee Right from a directory
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwrevoke
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I rights
|
||||||
|
]
|
||||||
|
.B directory
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwrevoke
|
||||||
|
revokes the specified bindery object with the corresponding trustee
|
||||||
|
rights from the directory.
|
||||||
|
|
||||||
|
.B nwrevoke
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwrevoke
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be added as trustee.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B directory
|
||||||
|
.RS 3
|
||||||
|
You must specify the directory from which to remove the object as
|
||||||
|
trustee. This has to be done in fully qualified NetWare notation.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
nwrevoke -o linus -t 1 'src:bsd_src'
|
||||||
|
|
||||||
|
With this example, user linus is removed as trustee from the bsd_src
|
||||||
|
directory on the src volume.
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwrevoke was written by Volker Lendecke with the corresponding NetWare
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Begin3
|
Begin3
|
||||||
Title: ncpfs
|
Title: ncpfs
|
||||||
Version: 0.22
|
Version: 2.0.1
|
||||||
Entered-date: 17. April 1996
|
Entered-date: 10. July 1996
|
||||||
Description: With ncpfs you can mount volumes of your netware
|
Description: With ncpfs you can mount volumes of your netware
|
||||||
server under Linux. You can also print to netware
|
server under Linux. You can also print to netware
|
||||||
print queues and spool netware print queues to the
|
print queues and spool netware print queues to the
|
||||||
@@ -9,11 +9,11 @@ Description: With ncpfs you can mount volumes of your netware
|
|||||||
1.3.71 and above. ncpfs does NOT work with any 1.3.x
|
1.3.71 and above. ncpfs does NOT work with any 1.3.x
|
||||||
kernel below 1.3.71.
|
kernel below 1.3.71.
|
||||||
Keywords: filesystem ncp novell netware printing
|
Keywords: filesystem ncp novell netware printing
|
||||||
Author: lendecke@namu01.gwdg.de (Volker Lendecke)
|
Author: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke)
|
||||||
Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke)
|
Maintained-by: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke)
|
||||||
Primary-site: ftp.gwdg.de:/pub/linux/misc/ncpfs
|
Primary-site: ftp.gwdg.de:/pub/linux/misc/ncpfs
|
||||||
Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/
|
Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ncpfs
|
||||||
~120k ncpfs-0.22.tgz
|
~124k ncpfs-2.0.1.tgz
|
||||||
~ 1k ncpfs-0.22.lsm
|
~ 1k ncpfs-2.0.1.lsm
|
||||||
Copying-policy: GPL
|
Copying-policy: GPL
|
||||||
End
|
End
|
||||||
@@ -2,14 +2,17 @@
|
|||||||
# Makefile for the linux ncp-filesystem routines.
|
# Makefile for the linux ncp-filesystem routines.
|
||||||
#
|
#
|
||||||
|
|
||||||
USERUTILS = slist pqlist nwfsinfo pserver nprint nsend ncopy
|
USERUTILS = slist pqlist nwfsinfo pserver nprint nsend ncopy npasswd
|
||||||
|
USERUTILS += nwbols nwbocreate nwborm nwboprops
|
||||||
|
USERUTILS += nwbpcreate nwbprm nwbpvalues nwbpadd
|
||||||
|
USERUTILS += nwgrant nwrevoke
|
||||||
UIDUTILS = ncpmount ncpumount
|
UIDUTILS = ncpmount ncpumount
|
||||||
SBINUTILS = nwmsg
|
SBINUTILS = nwmsg
|
||||||
|
|
||||||
UTIL_EXECS = $(USERUTILS) $(UIDUTILS) $(SBINUTILS)
|
UTIL_EXECS = $(USERUTILS) $(UIDUTILS) $(SBINUTILS)
|
||||||
UTILS = $(addprefix $(INTERM_BINDIR)/,$(UTIL_EXECS))
|
UTILS = $(addprefix $(INTERM_BINDIR)/,$(UTIL_EXECS))
|
||||||
|
|
||||||
#CFLAGS = -Wall $(INCLUDES) $(KERNELD) -g -DNCPFS_VERSION=\"$(VERSION)\"
|
#CFLAGS = -Wall $(INCLUDES) $(KERNELD) -g -DNCPFS_VERSION=\"$(VERSION)\"
|
||||||
CFLAGS = -Wall $(INCLUDES) $(KERNELD) -O2 -DNCPFS_VERSION=\"$(VERSION)\"
|
CFLAGS = -Wall $(INCLUDES) $(KERNELD) -O2 -DNCPFS_VERSION=\"$(VERSION)\"
|
||||||
CC = gcc
|
CC = gcc
|
||||||
|
|
||||||
|
|||||||
217
util/ncplib.c
217
util/ncplib.c
@@ -237,6 +237,10 @@ ipx_sap_find_nearest(int server_type, struct sockaddr_ipx *result,
|
|||||||
|
|
||||||
if ((sock = socket(AF_IPX,SOCK_DGRAM,PF_IPX)) < 0)
|
if ((sock = socket(AF_IPX,SOCK_DGRAM,PF_IPX)) < 0)
|
||||||
{
|
{
|
||||||
|
if (errno == EINVAL)
|
||||||
|
{
|
||||||
|
return NCPL_ET_NO_IPX;
|
||||||
|
}
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,6 +259,10 @@ ipx_sap_find_nearest(int server_type, struct sockaddr_ipx *result,
|
|||||||
|
|
||||||
if(bind(sock,(struct sockaddr*)&addr,sizeof(addr))==-1)
|
if(bind(sock,(struct sockaddr*)&addr,sizeof(addr))==-1)
|
||||||
{
|
{
|
||||||
|
if (errno == EADDRNOTAVAIL)
|
||||||
|
{
|
||||||
|
errno = NCPL_ET_NO_INTERFACE;
|
||||||
|
}
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,7 +348,11 @@ ipx_make_reachable(IPXNet network)
|
|||||||
|
|
||||||
if (sock == -1)
|
if (sock == -1)
|
||||||
{
|
{
|
||||||
return -1;
|
if (errno == EINVAL)
|
||||||
|
{
|
||||||
|
return NCPL_ET_NO_IPX;
|
||||||
|
}
|
||||||
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
opt=1;
|
opt=1;
|
||||||
@@ -516,14 +528,16 @@ do_ncp_call(struct ncp_conn *conn, int request_size)
|
|||||||
*((struct ncp_request_header *)(&(conn->packet)));
|
*((struct ncp_request_header *)(&(conn->packet)));
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
int retries = 3;
|
int retries = 20;
|
||||||
int len;
|
int len;
|
||||||
long err;
|
long err;
|
||||||
struct ncp_reply_header *r =
|
|
||||||
(struct ncp_reply_header *)&(conn->packet);
|
|
||||||
|
|
||||||
while (retries > 0)
|
while (retries > 0)
|
||||||
{
|
{
|
||||||
|
struct ncp_reply_header reply;
|
||||||
|
struct sockaddr_ipx sender;
|
||||||
|
int sizeofaddr = sizeof(sender);
|
||||||
|
|
||||||
retries -= 1;
|
retries -= 1;
|
||||||
|
|
||||||
result = sendto(conn->ncp_sock, conn->packet,
|
result = sendto(conn->ncp_sock, conn->packet,
|
||||||
@@ -537,30 +551,48 @@ do_ncp_call(struct ncp_conn *conn, int request_size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
re_select:
|
re_select:
|
||||||
len = ipx_recv(conn->ncp_sock,
|
len = ipx_recvfrom(conn->ncp_sock,
|
||||||
conn->packet, NCP_PACKET_SIZE, 0, 1, &err);
|
(char *)&reply, sizeof(reply),
|
||||||
|
MSG_PEEK, &sender, &sizeofaddr, 3, &err);
|
||||||
|
|
||||||
if ( (len == sizeof(*r))
|
if ((len < 0) && (err == ETIMEDOUT))
|
||||||
&& (r->type == NCP_POSITIVE_ACK))
|
|
||||||
{
|
{
|
||||||
goto re_select;
|
continue;
|
||||||
}
|
|
||||||
if ( (len >= sizeof(*r))
|
|
||||||
&& (r->type == NCP_REPLY)
|
|
||||||
&& ( (request.type == NCP_ALLOC_SLOT_REQUEST)
|
|
||||||
|| ( (r->sequence == request.sequence)
|
|
||||||
&& (r->conn_low == request.conn_low)
|
|
||||||
&& (r->conn_high == request.conn_high))))
|
|
||||||
{
|
|
||||||
conn->reply_size = len;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
{
|
{
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( /* Is the sender wrong? */
|
||||||
|
(memcmp(&sender.sipx_node,
|
||||||
|
&(conn->i.addr.sipx_node), 6) != 0)
|
||||||
|
|| (sender.sipx_port != conn->i.addr.sipx_port)
|
||||||
|
|
||||||
|
/* Did the sender send a positive acknowledge? */
|
||||||
|
|| ( (len == sizeof(reply))
|
||||||
|
&& (reply.type == NCP_POSITIVE_ACK))
|
||||||
|
|
||||||
|
/* Did we get a bogus answer? */
|
||||||
|
|| ( (len < sizeof(reply))
|
||||||
|
|| (reply.type != NCP_REPLY)
|
||||||
|
|| ( (request.type != NCP_ALLOC_SLOT_REQUEST)
|
||||||
|
&& ( (reply.sequence != request.sequence)
|
||||||
|
|| (reply.conn_low != request.conn_low)
|
||||||
|
|| (reply.conn_high != request.conn_high)))))
|
||||||
|
{
|
||||||
|
/* Then throw away the packet */
|
||||||
|
ipx_recv(conn->ncp_sock, (char *)&reply, sizeof(reply),
|
||||||
|
0, 1, &err);
|
||||||
|
goto re_select;
|
||||||
|
}
|
||||||
|
|
||||||
|
ipx_recv(conn->ncp_sock, conn->packet, NCP_PACKET_SIZE,
|
||||||
|
0, 1, &err);
|
||||||
|
conn->reply_size = len;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -578,8 +610,9 @@ ncp_mount_request(struct ncp_conn *conn, int function)
|
|||||||
|
|
||||||
if (conn->has_subfunction != 0)
|
if (conn->has_subfunction != 0)
|
||||||
{
|
{
|
||||||
*(__u16 *)&(h->data[0]) = conn->current_size
|
*(__u16 *)&(h->data[0])
|
||||||
- sizeof(struct ncp_request_header)- 2;
|
= htons(conn->current_size
|
||||||
|
- sizeof(struct ncp_request_header) - 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
request.function = function;
|
request.function = function;
|
||||||
@@ -616,8 +649,9 @@ ncp_temp_request(struct ncp_conn *conn, int function)
|
|||||||
|
|
||||||
if (conn->has_subfunction != 0)
|
if (conn->has_subfunction != 0)
|
||||||
{
|
{
|
||||||
*(__u16 *)&(h->data[0]) = conn->current_size
|
*(__u16 *)&(h->data[0])
|
||||||
- sizeof(struct ncp_request_header) - 2;
|
= htons(conn->current_size
|
||||||
|
- sizeof(struct ncp_request_header) - 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
h->type = NCP_REQUEST;
|
h->type = NCP_REQUEST;
|
||||||
@@ -753,9 +787,10 @@ ncp_connect_any(struct ncp_conn *conn, int wdog_needed)
|
|||||||
char name[NCP_BINDERY_NAME_LEN];
|
char name[NCP_BINDERY_NAME_LEN];
|
||||||
long result;
|
long result;
|
||||||
|
|
||||||
if (ipx_sap_find_nearest(IPX_SAP_FILE_SERVER, &addr, name) != 0)
|
if ((result = ipx_sap_find_nearest(IPX_SAP_FILE_SERVER,
|
||||||
|
&addr, name)) != 0)
|
||||||
{
|
{
|
||||||
return -1;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((result = ncp_connect_addr(conn, &addr, wdog_needed)) != 0)
|
if ((result = ncp_connect_addr(conn, &addr, wdog_needed)) != 0)
|
||||||
@@ -1310,7 +1345,7 @@ ncp_fopen_nwc(const char *user, const char *mode)
|
|||||||
|
|
||||||
struct ncp_conn_spec *
|
struct ncp_conn_spec *
|
||||||
ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
||||||
uid_t uid, long *err)
|
int login_necessary, uid_t uid, long *err)
|
||||||
{
|
{
|
||||||
static struct ncp_conn_spec spec;
|
static struct ncp_conn_spec spec;
|
||||||
|
|
||||||
@@ -1407,6 +1442,12 @@ ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (login_necessary == 0)
|
||||||
|
{
|
||||||
|
memset(spec.user, 0, sizeof(spec.user));
|
||||||
|
memset(spec.password, 0, sizeof(spec.password));
|
||||||
|
}
|
||||||
|
|
||||||
if (strlen(spec.user) == 0)
|
if (strlen(spec.user) == 0)
|
||||||
{
|
{
|
||||||
return &spec;
|
return &spec;
|
||||||
@@ -1524,7 +1565,8 @@ ncp_initialize_as(int *argc, char **argv,
|
|||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
spec = ncp_find_conn_spec(server, user, password, getuid(), err);
|
spec = ncp_find_conn_spec(server, user, password, login_necessary,
|
||||||
|
getuid(), err);
|
||||||
|
|
||||||
if (spec == NULL)
|
if (spec == NULL)
|
||||||
{
|
{
|
||||||
@@ -1821,7 +1863,7 @@ ncp_send_broadcast(struct ncp_conn *conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* result is a 8-byte buffer
|
* target is a 8-byte buffer
|
||||||
*/
|
*/
|
||||||
long
|
long
|
||||||
ncp_get_encryption_key(struct ncp_conn *conn,
|
ncp_get_encryption_key(struct ncp_conn *conn,
|
||||||
@@ -1929,14 +1971,17 @@ ncp_scan_bindery_object(struct ncp_conn *conn,
|
|||||||
|
|
||||||
long
|
long
|
||||||
ncp_create_bindery_object(struct ncp_conn *conn,
|
ncp_create_bindery_object(struct ncp_conn *conn,
|
||||||
struct ncp_bindery_object *source)
|
__u16 object_type,
|
||||||
|
const char *object_name,
|
||||||
|
__u8 object_security,
|
||||||
|
__u8 object_status)
|
||||||
{
|
{
|
||||||
long result;
|
long result;
|
||||||
ncp_init_request_s(conn, 50);
|
ncp_init_request_s(conn, 50);
|
||||||
ncp_add_byte(conn, source->object_flags);
|
ncp_add_byte(conn, object_status);
|
||||||
ncp_add_byte(conn, source->object_security);
|
ncp_add_byte(conn, object_security);
|
||||||
ncp_add_word(conn, htons(source->object_type));
|
ncp_add_word(conn, htons(object_type));
|
||||||
ncp_add_pstring(conn, source->object_name);
|
ncp_add_pstring(conn, object_name);
|
||||||
|
|
||||||
result = ncp_request(conn, 23);
|
result = ncp_request(conn, 23);
|
||||||
ncp_unlock_conn(conn);
|
ncp_unlock_conn(conn);
|
||||||
@@ -2151,6 +2196,43 @@ ncp_login_encrypted(struct ncp_conn *conn,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_change_login_passwd(struct ncp_conn *conn,
|
||||||
|
const struct ncp_bindery_object *object,
|
||||||
|
const unsigned char *key,
|
||||||
|
const unsigned char *oldpasswd,
|
||||||
|
const unsigned char *newpasswd)
|
||||||
|
{
|
||||||
|
long id = htonl(object->object_id);
|
||||||
|
unsigned char cryptkey[8];
|
||||||
|
unsigned char newpwd[16]; /* new passwd as stored by server */
|
||||||
|
unsigned char oldpwd[16]; /* old passwd as stored by server */
|
||||||
|
unsigned char len;
|
||||||
|
long result;
|
||||||
|
|
||||||
|
memcpy(cryptkey, key, 8);
|
||||||
|
shuffle((byte *)&id, oldpasswd, strlen(oldpasswd), oldpwd);
|
||||||
|
shuffle((byte *)&id, newpasswd, strlen(newpasswd), newpwd);
|
||||||
|
nw_encrypt(cryptkey, oldpwd, cryptkey);
|
||||||
|
newpassencrypt(oldpwd, newpwd, newpwd);
|
||||||
|
newpassencrypt(oldpwd+8, newpwd+8, newpwd+8);
|
||||||
|
if ((len = strlen(newpasswd)) > 63)
|
||||||
|
{
|
||||||
|
len = 63;
|
||||||
|
}
|
||||||
|
len = ((len ^ oldpwd[0] ^ oldpwd[1]) & 0x7f) | 0x40;
|
||||||
|
|
||||||
|
ncp_init_request_s(conn, 75);
|
||||||
|
ncp_add_mem(conn, cryptkey, 8);
|
||||||
|
ncp_add_word(conn, htons(object->object_type));
|
||||||
|
ncp_add_pstring(conn, object->object_name);
|
||||||
|
ncp_add_byte(conn, len);
|
||||||
|
ncp_add_mem(conn, newpwd, 16);
|
||||||
|
result = ncp_request(conn, 23);
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
long
|
long
|
||||||
ncp_login_user(struct ncp_conn *conn,
|
ncp_login_user(struct ncp_conn *conn,
|
||||||
const unsigned char *username,
|
const unsigned char *username,
|
||||||
@@ -2533,7 +2615,42 @@ ncp_delete_directory(struct ncp_conn *conn,
|
|||||||
ncp_unlock_conn(conn);
|
ncp_unlock_conn(conn);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_add_trustee(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
__u32 object_id, __u8 rights)
|
||||||
|
{
|
||||||
|
long result;
|
||||||
|
|
||||||
|
ncp_init_request_s(conn, 13);
|
||||||
|
ncp_add_byte(conn, dir_handle);
|
||||||
|
ncp_add_dword(conn, htonl(object_id));
|
||||||
|
ncp_add_byte(conn, rights);
|
||||||
|
ncp_add_pstring(conn, path);
|
||||||
|
|
||||||
|
result = ncp_request(conn, 22);
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_delete_trustee(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,__u32 object_id)
|
||||||
|
{
|
||||||
|
long result;
|
||||||
|
|
||||||
|
ncp_init_request_s(conn, 14);
|
||||||
|
ncp_add_byte(conn, dir_handle);
|
||||||
|
ncp_add_dword(conn, htonl(object_id));
|
||||||
|
ncp_add_byte(conn, 0);
|
||||||
|
ncp_add_pstring(conn, path);
|
||||||
|
|
||||||
|
result = ncp_request(conn, 22);
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
long
|
long
|
||||||
ncp_rename_directory(struct ncp_conn *conn,
|
ncp_rename_directory(struct ncp_conn *conn,
|
||||||
int dir_handle,
|
int dir_handle,
|
||||||
@@ -3179,3 +3296,33 @@ ncp_alloc_short_dir_handle(struct ncp_conn *conn,
|
|||||||
ncp_unlock_conn(conn);
|
ncp_unlock_conn(conn);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_add_trustee_set(struct ncp_conn *conn,
|
||||||
|
__u8 volume_number, __u32 dir_entry,
|
||||||
|
__u16 rights_mask,
|
||||||
|
int object_count, struct ncp_trustee_struct *rights)
|
||||||
|
{
|
||||||
|
long result = 0;
|
||||||
|
|
||||||
|
ncp_init_request(conn);
|
||||||
|
ncp_add_byte(conn, 10); /* subfunction */
|
||||||
|
ncp_add_byte(conn, 0); /* dos name space */
|
||||||
|
ncp_add_byte(conn, 0); /* reserved */
|
||||||
|
ncp_add_word(conn, 0x8006);
|
||||||
|
ncp_add_word(conn, rights_mask);
|
||||||
|
ncp_add_word(conn, object_count);
|
||||||
|
ncp_add_handle_path(conn, volume_number, dir_entry, 1, NULL);
|
||||||
|
|
||||||
|
while (object_count > 0)
|
||||||
|
{
|
||||||
|
ncp_add_dword(conn, htonl(rights->object_id));
|
||||||
|
ncp_add_word(conn, rights->rights);
|
||||||
|
object_count -= 1;
|
||||||
|
rights += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = ncp_request(conn, 87);
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ ncp_initialize_as(int *argc, char **argv,
|
|||||||
int login_necessary, int login_type, long *err);
|
int login_necessary, int login_type, long *err);
|
||||||
|
|
||||||
|
|
||||||
/* Open an existing permanent connection */
|
/* Open a connection */
|
||||||
struct ncp_conn *
|
struct ncp_conn *
|
||||||
ncp_open(const struct ncp_conn_spec *spec, long *err);
|
ncp_open(const struct ncp_conn_spec *spec, long *err);
|
||||||
|
|
||||||
@@ -146,7 +146,7 @@ ncp_get_conn_ent(FILE *filep);
|
|||||||
|
|
||||||
struct ncp_conn_spec *
|
struct ncp_conn_spec *
|
||||||
ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
||||||
uid_t uid, long *err);
|
int login_necessary, uid_t uid, long *err);
|
||||||
|
|
||||||
long
|
long
|
||||||
ncp_get_file_server_description_strings(struct ncp_conn *conn,
|
ncp_get_file_server_description_strings(struct ncp_conn *conn,
|
||||||
@@ -183,12 +183,21 @@ ncp_scan_bindery_object(struct ncp_conn *conn,
|
|||||||
struct ncp_bindery_object *target);
|
struct ncp_bindery_object *target);
|
||||||
long
|
long
|
||||||
ncp_create_bindery_object(struct ncp_conn *conn,
|
ncp_create_bindery_object(struct ncp_conn *conn,
|
||||||
struct ncp_bindery_object *source);
|
__u16 object_type,
|
||||||
|
const char *object_name,
|
||||||
|
__u8 object_security,
|
||||||
|
__u8 object_status);
|
||||||
long
|
long
|
||||||
ncp_delete_bindery_object(struct ncp_conn *conn,
|
ncp_delete_bindery_object(struct ncp_conn *conn,
|
||||||
__u16 object_type,
|
__u16 object_type,
|
||||||
const char *object_name);
|
const char *object_name);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_change_object_security(struct ncp_conn *conn,
|
||||||
|
__u16 object_type,
|
||||||
|
const char *object_name,
|
||||||
|
__u8 security);
|
||||||
|
|
||||||
struct ncp_prop_login_control {
|
struct ncp_prop_login_control {
|
||||||
__u8 AccountExpireDate[3] __attribute__ ((packed));
|
__u8 AccountExpireDate[3] __attribute__ ((packed));
|
||||||
__u8 Disabled __attribute__ ((packed));
|
__u8 Disabled __attribute__ ((packed));
|
||||||
@@ -256,6 +265,13 @@ ncp_login_encrypted(struct ncp_conn *conn,
|
|||||||
const unsigned char *key,
|
const unsigned char *key,
|
||||||
const unsigned char *passwd);
|
const unsigned char *passwd);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_change_login_passwd(struct ncp_conn *conn,
|
||||||
|
const struct ncp_bindery_object *object,
|
||||||
|
const unsigned char *key,
|
||||||
|
const unsigned char *oldpasswd,
|
||||||
|
const unsigned char *newpasswd);
|
||||||
|
|
||||||
#define NCP_GRACE_PERIOD (0xdf)
|
#define NCP_GRACE_PERIOD (0xdf)
|
||||||
|
|
||||||
long
|
long
|
||||||
@@ -331,6 +347,15 @@ ncp_rename_directory(struct ncp_conn *conn,
|
|||||||
int dir_handle,
|
int dir_handle,
|
||||||
const char *old_path, const char *new_path);
|
const char *old_path, const char *new_path);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_add_trustee(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
__u32 object_id, __u8 rights);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_delete_trustee(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path, __u32 object_id);
|
||||||
|
|
||||||
long
|
long
|
||||||
ncp_read(struct ncp_conn *conn, const char *file_id,
|
ncp_read(struct ncp_conn *conn, const char *file_id,
|
||||||
off_t offset, size_t count, char *target);
|
off_t offset, size_t count, char *target);
|
||||||
@@ -435,4 +460,22 @@ ncp_alloc_short_dir_handle(struct ncp_conn *conn,
|
|||||||
__u16 alloc_mode,
|
__u16 alloc_mode,
|
||||||
__u8 *target);
|
__u8 *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_effective_dir_rights(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *file,
|
||||||
|
__u16 *target);
|
||||||
|
|
||||||
|
struct ncp_trustee_struct
|
||||||
|
{
|
||||||
|
__u32 object_id;
|
||||||
|
__u16 rights;
|
||||||
|
};
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_add_trustee_set(struct ncp_conn *conn,
|
||||||
|
__u8 volume_number, __u32 dir_entry,
|
||||||
|
__u16 rights_mask,
|
||||||
|
int object_count, struct ncp_trustee_struct *rights);
|
||||||
|
|
||||||
|
|
||||||
#endif /* _NCPLIB_H */
|
#endif /* _NCPLIB_H */
|
||||||
|
|||||||
@@ -21,7 +21,19 @@ ec NCPL_ET_NO_SPEC,
|
|||||||
ec NCPL_ET_INVALID_MODE,
|
ec NCPL_ET_INVALID_MODE,
|
||||||
"$HOME/.nwclient has invalid mode"
|
"$HOME/.nwclient has invalid mode"
|
||||||
|
|
||||||
ec NCPL_ET_LOGIN_FAILED,
|
ec NCPL_ET_LOGIN_DENIED,
|
||||||
"Login failed"
|
"Login denied"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_INTERFACE,
|
||||||
|
"No primary IPX interface found"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_PASSWORD,
|
||||||
|
"Could not get password"
|
||||||
|
|
||||||
|
ec NCPL_ET_PWD_TOO_LONG,
|
||||||
|
"Password too long"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_IPX,
|
||||||
|
"Could not alloc IPX socket. Probably no IPX support in kernel."
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
* a conditional which leaves out the test and load code.
|
* a conditional which leaves out the test and load code.
|
||||||
*
|
*
|
||||||
* Even if we _do_ want ncpmount to load the module, passing a
|
* Even if we _do_ want ncpmount to load the module, passing a
|
||||||
* fully-qualified pathname to insmod causes it to bypass a
|
* fully-qualified pathname to modprobe causes it to bypass a
|
||||||
* path search. This may lead to ncpfs.o not being found on
|
* path search. This may lead to ncpfs.o not being found on
|
||||||
* some systems.
|
* some systems.
|
||||||
*/
|
*/
|
||||||
@@ -102,7 +102,7 @@ load_ncpfs(void)
|
|||||||
else if (pid == 0)
|
else if (pid == 0)
|
||||||
{
|
{
|
||||||
/* child */
|
/* child */
|
||||||
execl("/sbin/insmod", "insmod", "ncpfs", NULL);
|
execl("/sbin/modprobe", "modprobe", "ncpfs", NULL);
|
||||||
_exit(127); /* execl error */
|
_exit(127); /* execl error */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -321,7 +321,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((spec = ncp_find_conn_spec(server, user, password, data.uid, &err))
|
if ((spec = ncp_find_conn_spec(server,user,password,1, data.uid, &err))
|
||||||
== NULL)
|
== NULL)
|
||||||
{
|
{
|
||||||
com_err(progname, err, "in find_conn_spec");
|
com_err(progname, err, "in find_conn_spec");
|
||||||
|
|||||||
@@ -106,7 +106,30 @@ test_create(struct ncp_conn *conn)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
test_change(struct ncp_conn *conn)
|
||||||
|
{
|
||||||
|
long result;
|
||||||
|
unsigned char ncp_key[8];
|
||||||
|
struct ncp_bindery_object user;
|
||||||
|
|
||||||
|
if ((result = ncp_get_encryption_key(conn, ncp_key)) != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((result = ncp_get_bindery_object_id(conn, 1,
|
||||||
|
"ME", &user)) != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((result = ncp_change_login_passwd(conn, &user, ncp_key,
|
||||||
|
"MEE", "ME")) != 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
@@ -120,7 +143,7 @@ main(int argc, char *argv[])
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
test_send(conn);
|
test_change(conn);
|
||||||
ncp_close(conn);
|
ncp_close(conn);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
144
util/npasswd.c
Normal file
144
util/npasswd.c
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* npasswd.c
|
||||||
|
*
|
||||||
|
* Change a bindery object's password
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn_spec *spec;
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *server = NULL;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = NCP_BINDERY_USER;
|
||||||
|
unsigned char ncp_key[8];
|
||||||
|
struct ncp_bindery_object user;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
char oldpass[200], newpass1[200], newpass2[200];
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "hS:U:t:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'S':
|
||||||
|
server = optarg;
|
||||||
|
break;
|
||||||
|
case 'U':
|
||||||
|
object_name = optarg;
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
exit(1);
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spec = ncp_find_conn_spec(server, object_name, "",
|
||||||
|
1, getuid(), &err);
|
||||||
|
|
||||||
|
if (spec == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "trying to find server");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
spec->login_type = object_type;
|
||||||
|
|
||||||
|
printf("Changing password for user %s on server %s\n",
|
||||||
|
spec->user, spec->server);
|
||||||
|
|
||||||
|
str = getpass("Enter old password: ");
|
||||||
|
if (strlen(str) >= sizeof(oldpass))
|
||||||
|
{
|
||||||
|
printf("Password too long\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
strcpy(oldpass, str);
|
||||||
|
|
||||||
|
str = getpass("Enter new password: ");
|
||||||
|
if (strlen(str) >= sizeof(newpass1))
|
||||||
|
{
|
||||||
|
printf("Password too long\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
strcpy(newpass1, str);
|
||||||
|
|
||||||
|
str = getpass("Re-Enter new password: ");
|
||||||
|
if (strlen(str) >= sizeof(newpass2))
|
||||||
|
{
|
||||||
|
printf("Password too long\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
strcpy(newpass2, str);
|
||||||
|
|
||||||
|
str_upper(oldpass);
|
||||||
|
str_upper(newpass1);
|
||||||
|
str_upper(newpass2);
|
||||||
|
|
||||||
|
if (strcmp(newpass1, newpass2) != 0)
|
||||||
|
{
|
||||||
|
printf("You mistype the new password, try again\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(spec->password, oldpass);
|
||||||
|
|
||||||
|
if ((conn = ncp_open(spec, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "when trying to open connection");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ((err = ncp_get_encryption_key(conn, ncp_key)) != 0)
|
||||||
|
|| ((err = ncp_get_bindery_object_id(conn, 1, spec->user,
|
||||||
|
&user)) != 0)
|
||||||
|
|| ((err = ncp_change_login_passwd(conn, &user, ncp_key,
|
||||||
|
oldpass, newpass1)) != 0))
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "trying to change password");
|
||||||
|
}
|
||||||
|
|
||||||
|
ncp_close(conn);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
160
util/nwbocreate.c
Normal file
160
util/nwbocreate.c
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
* nwbocreate.c
|
||||||
|
*
|
||||||
|
* Create a bindery object on a NetWare server
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of created object\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"-r read-flag Read security\n"
|
||||||
|
"-w write-flag Write security\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
parse_security(const char *security)
|
||||||
|
{
|
||||||
|
if (strcasecmp(security, "anyone") == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "logged") == 0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "object") == 0)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "supervisor") == 0)
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "netware") == 0)
|
||||||
|
{
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
int read_sec = 1; /* logged read */
|
||||||
|
int write_sec = 3; /* supervisor write */
|
||||||
|
int result = 1;
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:r:w:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
read_sec = parse_security(optarg);
|
||||||
|
if (read_sec < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: Wrong read security\n"
|
||||||
|
"Must be one of anyone, logged, "
|
||||||
|
"object, supervisor or netware\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
write_sec = parse_security(optarg);
|
||||||
|
if (write_sec < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: Wrong write security\n"
|
||||||
|
"Must be one of anyone, logged, "
|
||||||
|
"object, supervisor or netware\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_create_bindery_object(conn, object_type, object_name,
|
||||||
|
(write_sec << 4) + read_sec, 0) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not create the object\n", argv[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
124
util/nwbols.c
Normal file
124
util/nwbols.c
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* nwlsobj.c
|
||||||
|
*
|
||||||
|
* List bindery objects
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ncplib.h"
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options] pattern\n", progname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-t type Object type to be listed (decimal)\n"
|
||||||
|
"-v Verbose listing\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
struct ncp_bindery_object o;
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
|
char default_pattern[] = "*";
|
||||||
|
char *pattern = default_pattern;
|
||||||
|
char *p;
|
||||||
|
long err;
|
||||||
|
int opt;
|
||||||
|
int verbose = 0;
|
||||||
|
__u16 type = 0xffff;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "hvt:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
exit(1);
|
||||||
|
case 't':
|
||||||
|
type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind < argc-1)
|
||||||
|
{
|
||||||
|
usage();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind == argc-1)
|
||||||
|
{
|
||||||
|
pattern = argv[optind];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (p = pattern; *p != '\0'; p++)
|
||||||
|
{
|
||||||
|
*p = toupper(*p);
|
||||||
|
}
|
||||||
|
|
||||||
|
o.object_id = 0xffffffff;
|
||||||
|
|
||||||
|
while (ncp_scan_bindery_object(conn, o.object_id,
|
||||||
|
type, pattern, &o) == 0)
|
||||||
|
{
|
||||||
|
found = 1;
|
||||||
|
if (verbose != 0)
|
||||||
|
{
|
||||||
|
printf("%s %08X %04X %d %02X %d\n",
|
||||||
|
o.object_name, (unsigned int)o.object_id,
|
||||||
|
(unsigned int)o.object_type,
|
||||||
|
o.object_flags, o.object_security,
|
||||||
|
o.object_has_prop);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%s %08X %04X\n",
|
||||||
|
o.object_name, (unsigned int)o.object_id,
|
||||||
|
(unsigned int)o.object_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ncp_close(conn);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
120
util/nwboprops.c
Normal file
120
util/nwboprops.c
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
* nwboprops.c
|
||||||
|
*
|
||||||
|
* List properties of a bindery object
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of object inspected\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"-v Verbose listing\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
struct ncp_property_info info;
|
||||||
|
|
||||||
|
int result = 1;
|
||||||
|
int verbose = 0;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:v")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
info.search_instance = 0xffffffff;
|
||||||
|
|
||||||
|
while (ncp_scan_property(conn, object_type, object_name,
|
||||||
|
info.search_instance, "*", &info) == 0)
|
||||||
|
{
|
||||||
|
if (verbose != 0)
|
||||||
|
{
|
||||||
|
printf("%s %d %02x %d\n",
|
||||||
|
info.property_name, info.property_flags,
|
||||||
|
info.property_security,
|
||||||
|
info.value_available_flag);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%s\n", info.property_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
105
util/nwborm.c
Normal file
105
util/nwborm.c
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* nwborm.c
|
||||||
|
*
|
||||||
|
* Destroy a bindery object on a NetWare server
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of object to be removed\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
int result = 1;
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_delete_bindery_object(conn, object_type, object_name) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not delete the object\n", argv[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
246
util/nwbpadd.c
Normal file
246
util/nwbpadd.c
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
/*
|
||||||
|
* nwbpadd.c
|
||||||
|
*
|
||||||
|
* Set the contents of a SET property of a bindery object on a NetWare server
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options] [values]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of accessed object\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"-p property Name of property to be touched\n"
|
||||||
|
"value value to be added\n"
|
||||||
|
"\n"
|
||||||
|
"If property is of type SET, value is an object id (hex)\n"
|
||||||
|
"Otherwise, value is either a string value to be written, or\n"
|
||||||
|
"a count of bytes to be written. The latter is assumed if\n"
|
||||||
|
"more than one value argument is given. The count is decimal,\n"
|
||||||
|
"and the following arguments are interpreted as bytes in\n"
|
||||||
|
"hexadecimal notation.\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
char *property_name = NULL;
|
||||||
|
char *value = NULL;
|
||||||
|
struct ncp_property_info info;
|
||||||
|
long err;
|
||||||
|
int result = 1;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:p:v:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
property_name = optarg;
|
||||||
|
if (strlen(property_name) > 15)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Property Name too long\n",
|
||||||
|
argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
str_upper(property_name);
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
value = optarg;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a property name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind > argc-1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a property value\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = argv[optind];
|
||||||
|
optind += 1;
|
||||||
|
|
||||||
|
if (ncp_scan_property(conn, object_type, object_name,
|
||||||
|
0xffffffff, property_name, &info) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not find property\n", argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((info.property_flags & 2) != 0)
|
||||||
|
{
|
||||||
|
/* Property is of type SET */
|
||||||
|
struct ncp_bindery_object o;
|
||||||
|
|
||||||
|
if (optind != argc)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: For the SET property %s, you must"
|
||||||
|
" specify an object id as value\n",
|
||||||
|
progname, property_name);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_get_bindery_object_name(conn,
|
||||||
|
ntohl(strtol(value, NULL, 16)),
|
||||||
|
&o) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: %s is not a valid object id\n",
|
||||||
|
progname, value);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_add_object_to_set(conn, object_type, object_name,
|
||||||
|
property_name,
|
||||||
|
o.object_type, o.object_name) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: could not add object %s\n",
|
||||||
|
progname, o.object_name);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Property is of type ITEM */
|
||||||
|
char contents[255*128];
|
||||||
|
int segno = 1;
|
||||||
|
int length;
|
||||||
|
|
||||||
|
memset(contents, 0, sizeof(contents));
|
||||||
|
|
||||||
|
if (optind == argc)
|
||||||
|
{
|
||||||
|
/* value is the string to add */
|
||||||
|
length = strlen(value);
|
||||||
|
if (length >= sizeof(contents))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Value too long\n",
|
||||||
|
progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
strcpy(contents, value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* value is the byte count */
|
||||||
|
int i;
|
||||||
|
length = atoi(value);
|
||||||
|
if (length >= sizeof(contents))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Value too long\n",
|
||||||
|
progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
if (optind != argc - length)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Byte count does not match"
|
||||||
|
" number of bytes\n", progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
while (optind < argc)
|
||||||
|
{
|
||||||
|
contents[i] = strtol(argv[optind], NULL, 16);
|
||||||
|
i += 1;
|
||||||
|
optind += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (segno = 1; segno <= 255; segno++)
|
||||||
|
{
|
||||||
|
struct nw_property segment;
|
||||||
|
int offset = (segno-1)*128;
|
||||||
|
|
||||||
|
if ( offset > length )
|
||||||
|
{
|
||||||
|
/* everything written */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
memcpy(segment.value, &(contents[offset]), 128);
|
||||||
|
segment.more_flag = segno*128 < length;
|
||||||
|
if (ncp_write_property_value(conn, object_type,
|
||||||
|
object_name,
|
||||||
|
property_name,
|
||||||
|
segno, &segment) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not write "
|
||||||
|
"property\n", progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
186
util/nwbpcreate.c
Normal file
186
util/nwbpcreate.c
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
* nwbpcreate.c
|
||||||
|
*
|
||||||
|
* Create a property for a bindery object on a NetWare server
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of object\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"-p property Name of property to be created\n"
|
||||||
|
"-s Property is SET, default: ITEM\n"
|
||||||
|
"-r read-flag Read security\n"
|
||||||
|
"-w write-flag Write security\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
parse_security(const char *security)
|
||||||
|
{
|
||||||
|
if (strcasecmp(security, "anyone") == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "logged") == 0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "object") == 0)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "supervisor") == 0)
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if (strcasecmp(security, "netware") == 0)
|
||||||
|
{
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
char *property_name = NULL;
|
||||||
|
int property_is_set = 0;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
int read_sec = 1; /* logged read */
|
||||||
|
int write_sec = 3; /* supervisor write */
|
||||||
|
int result = 1;
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:p:sr:w:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
property_name = optarg;
|
||||||
|
if (strlen(property_name) > 15)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Property Name too long\n",
|
||||||
|
argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
str_upper(property_name);
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
property_is_set = 1;
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
read_sec = parse_security(optarg);
|
||||||
|
if (read_sec < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: Wrong read security\n"
|
||||||
|
"Must be one of anyone, logged, "
|
||||||
|
"object, supervisor or netware\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
write_sec = parse_security(optarg);
|
||||||
|
if (write_sec < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: Wrong write security\n"
|
||||||
|
"Must be one of anyone, logged, "
|
||||||
|
"object, supervisor or netware\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a property name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_create_property(conn, object_type, object_name,
|
||||||
|
property_name,
|
||||||
|
property_is_set ? 2 : 0,
|
||||||
|
(write_sec << 4) + read_sec) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not create the property\n",argv[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
125
util/nwbprm.c
Normal file
125
util/nwbprm.c
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* nwbprm.c
|
||||||
|
*
|
||||||
|
* Delete a property of a bindery object on a NetWare server
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ncplib.h"
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options] [pattern]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of object\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"-p property Name of property to be deleted\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
char *property_name = NULL;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
int result = 1;
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:p:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
property_name = optarg;
|
||||||
|
if (strlen(property_name) > 15)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Property Name too long\n",
|
||||||
|
argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
str_upper(property_name);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a property name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_delete_property(conn, object_type, object_name,
|
||||||
|
property_name) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not delete the property\n",argv[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
178
util/nwbpvalues.c
Normal file
178
util/nwbpvalues.c
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
/*
|
||||||
|
* nwbpvalues.c
|
||||||
|
*
|
||||||
|
* List the contents of a SET property of a bindery object on a NetWare server
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of object\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"-p property Name of property to be listed\n"
|
||||||
|
"-v Verbose object listing\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
char *property_name = NULL;
|
||||||
|
int segno;
|
||||||
|
int verbose = 0;
|
||||||
|
struct nw_property segment;
|
||||||
|
struct ncp_property_info info;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
int result = 1;
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:p:v")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
property_name = optarg;
|
||||||
|
if (strlen(property_name) > 15)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Property Name too long\n",
|
||||||
|
argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
str_upper(property_name);
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a property name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_scan_property(conn, object_type, object_name,
|
||||||
|
0xffffffff, property_name, &info) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not find property\n", argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((info.property_flags & 2) == 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Property %s is not of type SET\n",
|
||||||
|
argv[0], property_name);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
segno = 1;
|
||||||
|
while (ncp_read_property_value(conn, object_type, object_name,
|
||||||
|
segno, property_name, &segment) == 0)
|
||||||
|
{
|
||||||
|
__u32 *value = (__u32 *)(segment.value);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
struct ncp_bindery_object o;
|
||||||
|
|
||||||
|
if ((*value == 0) || (*value == 0xffffffff))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ncp_get_bindery_object_name(conn, ntohl(*value),
|
||||||
|
&o) == 0)
|
||||||
|
{
|
||||||
|
if (verbose != 0)
|
||||||
|
{
|
||||||
|
printf("%s %08X %04X\n",
|
||||||
|
o.object_name,
|
||||||
|
(unsigned int)o.object_id,
|
||||||
|
(unsigned int)o.object_type);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%s\n", o.object_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
value += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (segment.more_flag == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
segno += 1;
|
||||||
|
}
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
128
util/nwcrypt.c
128
util/nwcrypt.c
@@ -209,3 +209,131 @@ nw_encrypt(const unsigned char *fra,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* The following code was contributed by */
|
||||||
|
/* Guntram Blohm <gbl%th7csun1@str.daimler-benz.com> */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/* server side (mars etc.) should:
|
||||||
|
* store the *encrypted* password internally (output from shuffle)
|
||||||
|
* verify if nw_encrypt(cryptkey from GetCryptKey, old stored password)
|
||||||
|
== cryptkey in EncryptedChangePassword request buffer (this means
|
||||||
|
old password was correct)
|
||||||
|
* decrypt new password in request buffer using (yet to write) inverse of
|
||||||
|
newpassencrypt with old stored password as parameter
|
||||||
|
* compute the length of the unencrypted new password as len ^ (first byte of
|
||||||
|
old internal password) ^ (second byte of old internal password)
|
||||||
|
*/
|
||||||
|
|
||||||
|
static char
|
||||||
|
newshuffle[256+16] = {
|
||||||
|
0x0f, 0x08, 0x05, 0x07, 0x0c, 0x02, 0x0e, 0x09,
|
||||||
|
0x00, 0x01, 0x06, 0x0d, 0x03, 0x04, 0x0b, 0x0a,
|
||||||
|
0x02, 0x0c, 0x0e, 0x06, 0x0f, 0x00, 0x01, 0x08,
|
||||||
|
0x0d, 0x03, 0x0a, 0x04, 0x09, 0x0b, 0x05, 0x07,
|
||||||
|
|
||||||
|
0x05, 0x02, 0x09, 0x0f, 0x0c, 0x04, 0x0d, 0x00,
|
||||||
|
0x0e, 0x0a, 0x06, 0x08, 0x0b, 0x01, 0x03, 0x07,
|
||||||
|
0x0f, 0x0d, 0x02, 0x06, 0x07, 0x08, 0x05, 0x09,
|
||||||
|
0x00, 0x04, 0x0c, 0x03, 0x01, 0x0a, 0x0b, 0x0e,
|
||||||
|
|
||||||
|
0x05, 0x0e, 0x02, 0x0b, 0x0d, 0x0a, 0x07, 0x00,
|
||||||
|
0x08, 0x06, 0x04, 0x01, 0x0f, 0x0c, 0x03, 0x09,
|
||||||
|
0x08, 0x02, 0x0f, 0x0a, 0x05, 0x09, 0x06, 0x0c,
|
||||||
|
0x00, 0x0b, 0x01, 0x0d, 0x07, 0x03, 0x04, 0x0e,
|
||||||
|
|
||||||
|
0x0e, 0x08, 0x00, 0x09, 0x04, 0x0b, 0x02, 0x07,
|
||||||
|
0x0c, 0x03, 0x0a, 0x05, 0x0d, 0x01, 0x06, 0x0f,
|
||||||
|
0x01, 0x04, 0x08, 0x0a, 0x0d, 0x0b, 0x07, 0x0e,
|
||||||
|
0x05, 0x0f, 0x03, 0x09, 0x00, 0x02, 0x06, 0x0c,
|
||||||
|
|
||||||
|
0x05, 0x03, 0x0c, 0x08, 0x0b, 0x02, 0x0e, 0x0a,
|
||||||
|
0x04, 0x01, 0x0d, 0x00, 0x06, 0x07, 0x0f, 0x09,
|
||||||
|
0x06, 0x00, 0x0b, 0x0e, 0x0d, 0x04, 0x0c, 0x0f,
|
||||||
|
0x07, 0x02, 0x08, 0x0a, 0x01, 0x05, 0x03, 0x09,
|
||||||
|
|
||||||
|
0x0b, 0x05, 0x0a, 0x0e, 0x0f, 0x01, 0x0c, 0x00,
|
||||||
|
0x06, 0x04, 0x02, 0x09, 0x03, 0x0d, 0x07, 0x08,
|
||||||
|
0x07, 0x02, 0x0a, 0x00, 0x0e, 0x08, 0x0f, 0x04,
|
||||||
|
0x0c, 0x0b, 0x09, 0x01, 0x05, 0x0d, 0x03, 0x06,
|
||||||
|
|
||||||
|
0x07, 0x04, 0x0f, 0x09, 0x05, 0x01, 0x0c, 0x0b,
|
||||||
|
0x00, 0x03, 0x08, 0x0e, 0x02, 0x0a, 0x06, 0x0d,
|
||||||
|
0x09, 0x04, 0x08, 0x00, 0x0a, 0x03, 0x01, 0x0c,
|
||||||
|
0x05, 0x0f, 0x07, 0x02, 0x0b, 0x0e, 0x06, 0x0d,
|
||||||
|
|
||||||
|
0x09, 0x05, 0x04, 0x07, 0x0e, 0x08, 0x03, 0x01,
|
||||||
|
0x0d, 0x0b, 0x0c, 0x02, 0x00, 0x0f, 0x06, 0x0a,
|
||||||
|
0x09, 0x0a, 0x0b, 0x0d, 0x05, 0x03, 0x0f, 0x00,
|
||||||
|
0x01, 0x0c, 0x08, 0x07, 0x06, 0x04, 0x0e, 0x02,
|
||||||
|
|
||||||
|
0x03, 0x0e, 0x0f, 0x02, 0x0d, 0x0c, 0x04, 0x05,
|
||||||
|
0x09, 0x06, 0x00, 0x01, 0x0b, 0x07, 0x0a, 0x08,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verschluesseln des neuen Passworts fuer keyed change password
|
||||||
|
* Verwendung:
|
||||||
|
* - Shuffle (aus nwcrypt.c) altes passwort nach old (16 bytes)
|
||||||
|
* - shuffle neues passwort nach new (16 bytes)
|
||||||
|
* - nwpassencrypt (diese Funktion) zweimal aufrufen fuer je 8 bytes:
|
||||||
|
* nwpassencrypt(old+0, new+0, out+0)
|
||||||
|
* nwpassencrypt(old+8, new+8, out+8)
|
||||||
|
* - NCP-Buffer aufbauen:
|
||||||
|
* 2 byte Laenge im Hi-Lo-Format
|
||||||
|
* 1 byte Funktion (0x4b)
|
||||||
|
* 8 byte (nwcrypt Ergebnis analog login/verify password)
|
||||||
|
* 2 byte Objecttype
|
||||||
|
* 1 byte Objectname-Laenge
|
||||||
|
* n byte Objectname
|
||||||
|
* 1 byte (Laenge des eingegebenen neuen Passworts ^ old[0] ^ old[1])&0x7f|0x40
|
||||||
|
* 16 byte (Ergebnis dieser Funktion doppelt aufgerufen, s.o.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encrypt the new password for keyed change password
|
||||||
|
* For info on how to use this function, look at ncp_change_login_passwd
|
||||||
|
* in ncplib.c.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
newpassencrypt(char *old, char *new, char *out)
|
||||||
|
{
|
||||||
|
char *p, *bx;
|
||||||
|
char copy[8];
|
||||||
|
int i, di, ax;
|
||||||
|
char cl, dl, ch;
|
||||||
|
|
||||||
|
memcpy(copy, new, 8);
|
||||||
|
|
||||||
|
for (i=0; i<16; i++)
|
||||||
|
{
|
||||||
|
for (di=0, ax=0, p=old; di<8; di++, ax+=0x20, p++)
|
||||||
|
{
|
||||||
|
cl=newshuffle[(((copy[di]^*p)>>4)&0x0f)+ax+0x10]<<4;
|
||||||
|
dl=newshuffle[((copy[di]^*p)&0xf)+ax];
|
||||||
|
copy[di]=cl|dl;
|
||||||
|
}
|
||||||
|
|
||||||
|
ch=old[7];
|
||||||
|
for (bx=old+7; bx>old; bx--)
|
||||||
|
{
|
||||||
|
*bx=((bx[-1]>>4)&0x0f)|((*bx)<<4);
|
||||||
|
}
|
||||||
|
*old=((ch>>4)&0x0f)|(*old)<<4;
|
||||||
|
|
||||||
|
memset(out, '\0', 8);
|
||||||
|
|
||||||
|
for (di=0; di<16; di++)
|
||||||
|
{
|
||||||
|
if (newshuffle[di+0x100]&1)
|
||||||
|
ch=((copy[newshuffle[di+0x100]/2]>>4)&0x0f);
|
||||||
|
else
|
||||||
|
ch=copy[newshuffle[di+0x100]/2]&0x0f;
|
||||||
|
out[di/2]|=((di&1) ? ch<<4 : ch);
|
||||||
|
}
|
||||||
|
memcpy(copy, out, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
133
util/nwgrant.c
Normal file
133
util/nwgrant.c
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* nwgrant.c
|
||||||
|
*
|
||||||
|
* Add trustee rights to file or directory
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options] file/directory\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of object added as trustee\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"-r rights Rights mask (see manual page)\n"
|
||||||
|
"\n"
|
||||||
|
"directory\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
struct ncp_bindery_object o;
|
||||||
|
int rights = -1;
|
||||||
|
char *path = NULL;
|
||||||
|
long err;
|
||||||
|
int result = 1;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:r:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
rights = strtol(optarg, NULL, 16);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rights < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a rights mask\n",
|
||||||
|
progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind != argc-1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a directory\n",
|
||||||
|
progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
path = argv[optind];
|
||||||
|
|
||||||
|
if (ncp_get_bindery_object_id(conn, object_type, object_name, &o) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not find object %s\n",
|
||||||
|
progname, object_name);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_add_trustee(conn, 0, path, o.object_id, rights) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not add trustee rights\n",progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* nwlsobj.c
|
|
||||||
*
|
|
||||||
* List bindery objects
|
|
||||||
*
|
|
||||||
* Copyright (C) 1996 by Volker Lendecke
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include "ncplib.h"
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
struct ncp_conn *conn;
|
|
||||||
struct ncp_bindery_object o;
|
|
||||||
int found = 0;
|
|
||||||
|
|
||||||
char default_pattern[] = "*";
|
|
||||||
char *pattern = default_pattern;
|
|
||||||
char *p;
|
|
||||||
long err;
|
|
||||||
|
|
||||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
|
||||||
{
|
|
||||||
com_err(argv[0], err, "in ncp_initialize");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc > 2)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "usage: %s [options]\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc == 2)
|
|
||||||
{
|
|
||||||
pattern = argv[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (p = pattern; *p != '\0'; p++)
|
|
||||||
{
|
|
||||||
*p = toupper(*p);
|
|
||||||
}
|
|
||||||
|
|
||||||
o.object_id = 0xffffffff;
|
|
||||||
|
|
||||||
while (ncp_scan_bindery_object(conn, o.object_id,
|
|
||||||
0xffff, pattern, &o) == 0)
|
|
||||||
{
|
|
||||||
found = 1;
|
|
||||||
printf("%s %08X %04X\n",
|
|
||||||
o.object_name, (unsigned int)o.object_id,
|
|
||||||
(unsigned int)o.object_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
ncp_close(conn);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -32,6 +32,7 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
struct ncp_conn *conn;
|
struct ncp_conn *conn;
|
||||||
char message[256];
|
char message[256];
|
||||||
|
char *mount_point;
|
||||||
struct ncp_fs_info info;
|
struct ncp_fs_info info;
|
||||||
struct passwd *pwd;
|
struct passwd *pwd;
|
||||||
char tty[256];
|
char tty[256];
|
||||||
@@ -53,7 +54,8 @@ main(int argc, char *argv[])
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((conn = ncp_open_mount(argv[1], &err)) == NULL)
|
mount_point = argv[1];
|
||||||
|
if ((conn = ncp_open_mount(mount_point, &err)) == NULL)
|
||||||
{
|
{
|
||||||
com_err(progname, err, "in ncp_open_mount");
|
com_err(progname, err, "in ncp_open_mount");
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -104,7 +106,7 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
while ((mnt = getmntent(mtab)) != NULL)
|
while ((mnt = getmntent(mtab)) != NULL)
|
||||||
{
|
{
|
||||||
if (strcmp(mnt->mnt_dir, conn->mount_point) == 0)
|
if (strcmp(mnt->mnt_dir, mount_point) == 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
122
util/nwrevoke.c
Normal file
122
util/nwrevoke.c
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* nwrevoke.c
|
||||||
|
*
|
||||||
|
* Remove trustee rights from file or directory
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ncplib.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options] file/directory\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-h Print this help text\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Username sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"\n"
|
||||||
|
"-o object_name Name of object removed as trustee\n"
|
||||||
|
"-t type Object type (decimal value)\n"
|
||||||
|
"\n"
|
||||||
|
"file/directory\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char *object_name = NULL;
|
||||||
|
int object_type = -1;
|
||||||
|
struct ncp_bindery_object o;
|
||||||
|
char *path = NULL;
|
||||||
|
long err;
|
||||||
|
int result = 1;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(argv[0], err, "in ncp_initialize");
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "ho:t:")) != EOF)
|
||||||
|
{
|
||||||
|
switch(opt) {
|
||||||
|
case 'o':
|
||||||
|
object_name = optarg;
|
||||||
|
str_upper(object_name);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
object_type = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
help();
|
||||||
|
goto finished;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_type < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object type\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object_name == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify an object name\n",
|
||||||
|
argv[0]);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind != argc-1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: You must specify a directory\n",
|
||||||
|
progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
path = argv[optind];
|
||||||
|
|
||||||
|
if (ncp_get_bindery_object_id(conn, object_type, object_name, &o) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not find object %s\n",
|
||||||
|
progname, object_name);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_delete_trustee(conn, 0, path, o.object_id) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Could not remove trustee rights\n",
|
||||||
|
progname);
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
finished:
|
||||||
|
ncp_close(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -41,9 +41,9 @@ main(int argc, char *argv[])
|
|||||||
*p = toupper(*p);
|
*p = toupper(*p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((conn = ncp_initialize(&argc, argv, 0, &err)) == NULL)
|
if ((conn = ncp_open(NULL, &err)) == NULL)
|
||||||
{
|
{
|
||||||
com_err(argv[0], err, "in ncp_initialize");
|
com_err(argv[0], err, "in ncp_open");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user