From b8d830f9a3fd23a28a3e6d2eeb5cd41bd056bb16 Mon Sep 17 00:00:00 2001 From: ncpfs archive import Date: Tue, 28 Apr 2026 20:39:58 +0200 Subject: [PATCH] Import ncpfs 2.0.1 --- .downloads/ncpfs-2.0.1.tgz | Bin 0 -> 124411 bytes Changes | 10 ++ Makefile | 6 +- TODO | 3 - ipxdump/ipxparse.c | 27 ++++ man/Makefile | 3 + man/nwbocreate.8 | 133 ++++++++++++++++ man/nwbols.1 | 117 ++++++++++++++ man/nwboprops.1 | 118 ++++++++++++++ man/nwborm.8 | 106 +++++++++++++ man/nwbpadd.8 | 145 +++++++++++++++++ man/nwbpcreate.8 | 154 ++++++++++++++++++ man/nwbprm.8 | 116 ++++++++++++++ man/nwbpvalues.1 | 132 ++++++++++++++++ man/nwgrant.8 | 148 +++++++++++++++++ man/nwrevoke.8 | 124 +++++++++++++++ ncpfs-2.0.0.lsm => ncpfs-2.0.1.lsm | 8 +- util/Makefile | 5 +- util/ncplib.c | 133 +++++++++++++--- util/ncplib.h | 27 ++++ util/nwbocreate.c | 160 +++++++++++++++++++ util/nwbols.c | 124 +++++++++++++++ util/nwboprops.c | 120 ++++++++++++++ util/nwborm.c | 105 ++++++++++++ util/nwbpadd.c | 246 +++++++++++++++++++++++++++++ util/nwbpcreate.c | 186 ++++++++++++++++++++++ util/nwbprm.c | 125 +++++++++++++++ util/nwbpvalues.c | 178 +++++++++++++++++++++ util/nwgrant.c | 133 ++++++++++++++++ util/nwlsobj.c | 62 -------- util/nwrevoke.c | 122 ++++++++++++++ 31 files changed, 2980 insertions(+), 96 deletions(-) create mode 100644 .downloads/ncpfs-2.0.1.tgz create mode 100644 man/nwbocreate.8 create mode 100644 man/nwbols.1 create mode 100644 man/nwboprops.1 create mode 100644 man/nwborm.8 create mode 100644 man/nwbpadd.8 create mode 100644 man/nwbpcreate.8 create mode 100644 man/nwbprm.8 create mode 100644 man/nwbpvalues.1 create mode 100644 man/nwgrant.8 create mode 100644 man/nwrevoke.8 rename ncpfs-2.0.0.lsm => ncpfs-2.0.1.lsm (84%) create mode 100644 util/nwbocreate.c create mode 100644 util/nwbols.c create mode 100644 util/nwboprops.c create mode 100644 util/nwborm.c create mode 100644 util/nwbpadd.c create mode 100644 util/nwbpcreate.c create mode 100644 util/nwbprm.c create mode 100644 util/nwbpvalues.c create mode 100644 util/nwgrant.c delete mode 100644 util/nwlsobj.c create mode 100644 util/nwrevoke.c diff --git a/.downloads/ncpfs-2.0.1.tgz b/.downloads/ncpfs-2.0.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b75c6ca7a7260939ccc8b114410a0aa19ca09527 GIT binary patch literal 124411 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 U?mzdRzx?O_4{OZ~W&jWg0Ha*iAOHXW literal 0 HcmV?d00001 diff --git a/Changes b/Changes index 8818fd0..52f7ee7 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,16 @@ 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. +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 + for this one. + ncpfs-0.24 -> ncpfs-2.0.0 - Changed the numbering scheme :-). - Added npasswd. Many thanks to Guntram Blom for his work! diff --git a/Makefile b/Makefile index 02a1d3d..3080993 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # Makefile for the linux ncp-filesystem routines. # -VERSION = 2.0.0 +VERSION = 2.0.1 # If you are using kerneld to autoload ncp support, # uncomment this (kerneld is in linux since about 1.3.57): @@ -14,9 +14,9 @@ SBINDIR = /sbin INTERM_BINDIR = $(TOPDIR)/bin 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 INCLUDES = -I$(TOPDIR)/kernel-1.2 endif diff --git a/TODO b/TODO index 56c8903..c58ea44 100644 --- a/TODO +++ b/TODO @@ -1,9 +1,6 @@ Here's a list of things I want to do. Feel free to send suggestions, 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 find out the name of user who printed the job. diff --git a/ipxdump/ipxparse.c b/ipxdump/ipxparse.c index 7d3dd5c..8ac94cf 100644 --- a/ipxdump/ipxparse.c +++ b/ipxdump/ipxparse.c @@ -305,6 +305,12 @@ void handle_ncp (struct sockaddr_ipx *source, case 01: printf("Get Directory Path\n"); break; + case 05: + printf("Get Volume Number\n"); + break; + case 06: + printf("Get Volume Name\n"); + break; case 18: printf("Allocate Permanent Dir Handle\n"); break; @@ -314,6 +320,9 @@ void handle_ncp (struct sockaddr_ipx *source, case 21: printf("Get Volume Info with handle\n"); break; + case 48: + printf("Get Name Space Directory Entry\n"); + break; } data += 3; data_length -= 3; @@ -326,6 +335,9 @@ void handle_ncp (struct sockaddr_ipx *source, case 17: printf("Get Fileserver Information\n"); break; + case 22: + printf("Get Station's logged Info (old)\n"); + break; case 23: printf("Get Crypt Key\n"); break; @@ -359,6 +371,10 @@ void handle_ncp (struct sockaddr_ipx *source, printf("fn: %-3d\n", rq->function); printf("End of Job\n"); break; + case 33: + printf("fn: %-3d\n", rq->function); + printf("Negotiate Buffer size\n"); + break; case 34: printf("fn: %-3d, subfn: %-3d\n", rq->function, data[2]); @@ -425,10 +441,21 @@ void handle_ncp (struct sockaddr_ipx *source, case 8: printf("Delete a File Or Subdirectory\n"); break; + case 12: + printf("Allocate Short Directory Handle\n"); + break; } data += 1; data_length -= 1; 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: printf("fn: %-3d\n", rq->function); } diff --git a/man/Makefile b/man/Makefile index 21abba7..feb9f2d 100644 --- a/man/Makefile +++ b/man/Makefile @@ -1,7 +1,10 @@ MAN1= slist nprint pqlist nsend pserver ncopy npasswd +MAN1 += nwbols nwboprops nwbpvalues MAN5= nwclient MAN8= ncpmount ncpumount ipx_configure ipx_interface ipx_internal_net \ ipx_route nwmsg +MAN8 += nwbocreate nwborm nwbpadd nwbpcreate nwbprm +MAN8 += nwgrant nwrevoke diff --git a/man/nwbocreate.8 b/man/nwbocreate.8 new file mode 100644 index 0000000..7188d98 --- /dev/null +++ b/man/nwbocreate.8 @@ -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. diff --git a/man/nwbols.1 b/man/nwbols.1 new file mode 100644 index 0000000..8ead31a --- /dev/null +++ b/man/nwbols.1 @@ -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. diff --git a/man/nwboprops.1 b/man/nwboprops.1 new file mode 100644 index 0000000..df4cc21 --- /dev/null +++ b/man/nwboprops.1 @@ -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. diff --git a/man/nwborm.8 b/man/nwborm.8 new file mode 100644 index 0000000..f096efc --- /dev/null +++ b/man/nwborm.8 @@ -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. diff --git a/man/nwbpadd.8 b/man/nwbpadd.8 new file mode 100644 index 0000000..f4a21c8 --- /dev/null +++ b/man/nwbpadd.8 @@ -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. diff --git a/man/nwbpcreate.8 b/man/nwbpcreate.8 new file mode 100644 index 0000000..14d0b44 --- /dev/null +++ b/man/nwbpcreate.8 @@ -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. diff --git a/man/nwbprm.8 b/man/nwbprm.8 new file mode 100644 index 0000000..c99b3a3 --- /dev/null +++ b/man/nwbprm.8 @@ -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. diff --git a/man/nwbpvalues.1 b/man/nwbpvalues.1 new file mode 100644 index 0000000..e1daab5 --- /dev/null +++ b/man/nwbpvalues.1 @@ -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. diff --git a/man/nwgrant.8 b/man/nwgrant.8 new file mode 100644 index 0000000..f4dff43 --- /dev/null +++ b/man/nwgrant.8 @@ -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. + diff --git a/man/nwrevoke.8 b/man/nwrevoke.8 new file mode 100644 index 0000000..20d3523 --- /dev/null +++ b/man/nwrevoke.8 @@ -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. + diff --git a/ncpfs-2.0.0.lsm b/ncpfs-2.0.1.lsm similarity index 84% rename from ncpfs-2.0.0.lsm rename to ncpfs-2.0.1.lsm index 2ffb659..34d98ae 100644 --- a/ncpfs-2.0.0.lsm +++ b/ncpfs-2.0.1.lsm @@ -1,7 +1,7 @@ Begin3 Title: ncpfs -Version: 2.0.0 -Entered-date: 22. June 1996 +Version: 2.0.1 +Entered-date: 10. July 1996 Description: With ncpfs you can mount volumes of your netware server under Linux. You can also print to netware print queues and spool netware print queues to the @@ -13,7 +13,7 @@ Author: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke) Maintained-by: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke) Primary-site: ftp.gwdg.de:/pub/linux/misc/ncpfs Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ncpfs - ~120k ncpfs-2.0.0.tgz - ~ 1k ncpfs-2.0.0.lsm + ~124k ncpfs-2.0.1.tgz + ~ 1k ncpfs-2.0.1.lsm Copying-policy: GPL End diff --git a/util/Makefile b/util/Makefile index c21ac1f..782f54c 100644 --- a/util/Makefile +++ b/util/Makefile @@ -3,13 +3,16 @@ # 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 SBINUTILS = nwmsg UTIL_EXECS = $(USERUTILS) $(UIDUTILS) $(SBINUTILS) 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)\" CC = gcc diff --git a/util/ncplib.c b/util/ncplib.c index 8314bf4..d584d0c 100644 --- a/util/ncplib.c +++ b/util/ncplib.c @@ -531,11 +531,13 @@ do_ncp_call(struct ncp_conn *conn, int request_size) int retries = 20; int len; long err; - struct ncp_reply_header *r = - (struct ncp_reply_header *)&(conn->packet); while (retries > 0) { + struct ncp_reply_header reply; + struct sockaddr_ipx sender; + int sizeofaddr = sizeof(sender); + retries -= 1; result = sendto(conn->ncp_sock, conn->packet, @@ -549,30 +551,48 @@ do_ncp_call(struct ncp_conn *conn, int request_size) } re_select: - len = ipx_recv(conn->ncp_sock, - conn->packet, NCP_PACKET_SIZE, 0, 3, &err); + len = ipx_recvfrom(conn->ncp_sock, + (char *)&reply, sizeof(reply), + MSG_PEEK, &sender, &sizeofaddr, 3, &err); - if ( (len == sizeof(*r)) - && (r->type == NCP_POSITIVE_ACK)) + if ((len < 0) && (err == ETIMEDOUT)) { - goto re_select; - } - 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; + continue; } if (len < 0) { 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 @@ -590,8 +610,9 @@ ncp_mount_request(struct ncp_conn *conn, int function) if (conn->has_subfunction != 0) { - *(__u16 *)&(h->data[0]) = conn->current_size - - sizeof(struct ncp_request_header)- 2; + *(__u16 *)&(h->data[0]) + = htons(conn->current_size + - sizeof(struct ncp_request_header) - 2); } request.function = function; @@ -628,8 +649,9 @@ ncp_temp_request(struct ncp_conn *conn, int function) if (conn->has_subfunction != 0) { - *(__u16 *)&(h->data[0]) = conn->current_size - - sizeof(struct ncp_request_header) - 2; + *(__u16 *)&(h->data[0]) + = htons(conn->current_size + - sizeof(struct ncp_request_header) - 2); } h->type = NCP_REQUEST; @@ -2593,7 +2615,42 @@ ncp_delete_directory(struct ncp_conn *conn, ncp_unlock_conn(conn); 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 ncp_rename_directory(struct ncp_conn *conn, int dir_handle, @@ -3239,3 +3296,33 @@ ncp_alloc_short_dir_handle(struct ncp_conn *conn, ncp_unlock_conn(conn); 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; +} diff --git a/util/ncplib.h b/util/ncplib.h index ff83776..d4fe7bb 100644 --- a/util/ncplib.h +++ b/util/ncplib.h @@ -347,6 +347,15 @@ ncp_rename_directory(struct ncp_conn *conn, int dir_handle, 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 ncp_read(struct ncp_conn *conn, const char *file_id, off_t offset, size_t count, char *target); @@ -451,4 +460,22 @@ ncp_alloc_short_dir_handle(struct ncp_conn *conn, __u16 alloc_mode, __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 */ diff --git a/util/nwbocreate.c b/util/nwbocreate.c new file mode 100644 index 0000000..a3f3309 --- /dev/null +++ b/util/nwbocreate.c @@ -0,0 +1,160 @@ +/* + * nwbocreate.c + * + * Create a bindery object on a NetWare server + * + * Copyright (C) 1996 by Volker Lendecke + * + */ + +#include "ncplib.h" +#include +#include + +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; +} diff --git a/util/nwbols.c b/util/nwbols.c new file mode 100644 index 0000000..7f0459d --- /dev/null +++ b/util/nwbols.c @@ -0,0 +1,124 @@ +/* + * nwlsobj.c + * + * List bindery objects + * + * Copyright (C) 1996 by Volker Lendecke + * + */ + +#include +#include +#include +#include +#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; +} diff --git a/util/nwboprops.c b/util/nwboprops.c new file mode 100644 index 0000000..a02db3e --- /dev/null +++ b/util/nwboprops.c @@ -0,0 +1,120 @@ +/* + * nwboprops.c + * + * List properties of a bindery object + * + * Copyright (C) 1996 by Volker Lendecke + * + */ + +#include "ncplib.h" +#include +#include + +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; +} diff --git a/util/nwborm.c b/util/nwborm.c new file mode 100644 index 0000000..7087a96 --- /dev/null +++ b/util/nwborm.c @@ -0,0 +1,105 @@ +/* + * nwborm.c + * + * Destroy a bindery object on a NetWare server + * + * Copyright (C) 1996 by Volker Lendecke + * + */ + +#include "ncplib.h" +#include +#include + +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; +} diff --git a/util/nwbpadd.c b/util/nwbpadd.c new file mode 100644 index 0000000..4aec345 --- /dev/null +++ b/util/nwbpadd.c @@ -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 +#include + +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; +} diff --git a/util/nwbpcreate.c b/util/nwbpcreate.c new file mode 100644 index 0000000..641ef58 --- /dev/null +++ b/util/nwbpcreate.c @@ -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 +#include + +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; +} diff --git a/util/nwbprm.c b/util/nwbprm.c new file mode 100644 index 0000000..3c85356 --- /dev/null +++ b/util/nwbprm.c @@ -0,0 +1,125 @@ +/* + * nwbprm.c + * + * Delete a property of a bindery object on a NetWare server + * + * Copyright (C) 1996 by Volker Lendecke + * + */ + +#include +#include +#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; +} diff --git a/util/nwbpvalues.c b/util/nwbpvalues.c new file mode 100644 index 0000000..2e171b4 --- /dev/null +++ b/util/nwbpvalues.c @@ -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 +#include + +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; +} diff --git a/util/nwgrant.c b/util/nwgrant.c new file mode 100644 index 0000000..9f07752 --- /dev/null +++ b/util/nwgrant.c @@ -0,0 +1,133 @@ +/* + * nwgrant.c + * + * Add trustee rights to file or directory + * + * Copyright (C) 1996 by Volker Lendecke + * + */ + +#include "ncplib.h" +#include +#include + +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; +} diff --git a/util/nwlsobj.c b/util/nwlsobj.c deleted file mode 100644 index 13a7c21..0000000 --- a/util/nwlsobj.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * nwlsobj.c - * - * List bindery objects - * - * Copyright (C) 1996 by Volker Lendecke - * - */ - -#include -#include -#include -#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; -} diff --git a/util/nwrevoke.c b/util/nwrevoke.c new file mode 100644 index 0000000..0147fb9 --- /dev/null +++ b/util/nwrevoke.c @@ -0,0 +1,122 @@ +/* + * nwrevoke.c + * + * Remove trustee rights from file or directory + * + * Copyright (C) 1996 by Volker Lendecke + * + */ + +#include "ncplib.h" +#include +#include + +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; +}