diff --git a/.patches/ncpfs-2.2.6-r6/ncpfs-hg-commit-446.patch b/.patches/ncpfs-2.2.6-r6/ncpfs-hg-commit-446.patch new file mode 100644 index 0000000..83d2e81 --- /dev/null +++ b/.patches/ncpfs-2.2.6-r6/ncpfs-hg-commit-446.patch @@ -0,0 +1,413 @@ +changeset: 446:07b8031b5209 +user: Petr Vandrovec +date: Sat Jul 23 22:22:26 2005 +0100 +files: man/nwgrant.8 man/nwrevoke.8 util/nwgrant.c util/nwrevoke.c +description: +Add ability to specify object by its ID to nwgrant and nwrevoke. + +To make long story short, upgrade from Netware5 to Netware6 +kindly converted all rights granted to [Public] to rights +granted to non-existant object with ID 0xFFFFFFFF. And +patched nwrevoke was only tool willing to remove them. + + +diff -r 66c5f4287bbb -r 07b8031b5209 man/nwgrant.8 +--- a/man/nwgrant.8 Sat Jul 23 21:58:13 2005 +0100 ++++ b/man/nwgrant.8 Sat Jul 23 22:22:26 2005 +0100 +@@ -2,42 +2,17 @@ + .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 file/directory ++\fBnwgrant\fP [ \fB-h\fP ] [ \fB-S\fP \fIserver\fP ] ++[ \fB-U\fP \fIuser name\fP ] [ \fB-P\fP \fIpassword\fP | \fB-n\fP ] ++[ \fB-C\fP ] [ \fB-o\fP \fIobject name\fP | \fB-O\fP \fIobject id\fP ] ++[ \fB-t\fP \fItype\fP ] [ \fB-r\fP \fIrights\fP ] \fBfile/directory\fP + + .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 ++\fBnwgrant\fP looks up the file \fI$HOME/.nwclient\fP + 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. +@@ -68,10 +43,7 @@ is the user name to use for login. + .I password + .RS 3 + .B password +-is the password to use for login. If neither +-.B -n +-nor +-.B -P ++is the password to use for login. If neither \fB-n\fP nor \fB-P\fP + are given, and the user has no open connection to the server, nwgrant + prompts for a password. + .RE +@@ -96,11 +68,16 @@ The name of the object to be added as tr + The name of the object to be added as trustee. + .RE + ++.B -O ++.I object id ++.RS 3 ++The id of the object to be added as trustee. ++.RE ++ + .B -t + .I object type + .RS 3 +-The type of the object. +-.I Object type ++The type of the object. \fIObject type\fP + 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. If you +@@ -111,18 +88,13 @@ NDS name. + .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, ++You must tell \fBnwgrant\fP which rights it should grant to the bindery ++object. The new rights for the object is specified by \fIrights\fP, + which can be either a hexadecimal number representing the sum of all + the individual rights to be granted or a string containing characters +-representing each right. If rights are represented in string format +-then the string must be bounded with square brackets. Characters +-within the brackets may be in any order and in either case. Spaces are +-allowed between the brackets - in which case the entire string should be +-quoted. ++representing each right. Characters within the brackets may be in ++any order and in either case. Spaces are allowed between the ++brackets - in which case the entire string should be quoted. + Hexadecimal and character values for the rights are shown in this table: + + 00 = no access +diff -r 66c5f4287bbb -r 07b8031b5209 man/nwrevoke.8 +--- a/man/nwrevoke.8 Sat Jul 23 21:58:13 2005 +0100 ++++ b/man/nwrevoke.8 Sat Jul 23 22:22:26 2005 +0100 +@@ -2,33 +2,10 @@ + .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 file/directory ++\fBnwrevoke\fP [ \fB-h\fP ] [ \fB-S\fP \fIserver\fP ] ++[ \fB-U\fP \fIuser name\fP ] [ \fB-P\fP \fIpassword\fP | \fB-n\fP ] ++[ \fB-C\fP ] [ \fB-o\fP \fIobject name\fP | \fB-O\fP \fIobject ID\fP ] ++[ \fB-t\fP \fItype\fP ] \fBfile/directory\fP + + .SH DESCRIPTION + .B nwrevoke +@@ -80,7 +57,12 @@ this conversion by \fB-C\fP. + + \fB-o\fP \fIobject name\fP + .RS 3 +-The name of the object to be added as trustee. ++The name of the object to be revoked as trustee. ++.RE ++ ++\fB-O\fP \fIobject ID\fP ++.RS 3 ++The ID of the object to be revoked as trustee. + .RE + + \fB-t\fP \fIobject type\fP +diff -r 66c5f4287bbb -r 07b8031b5209 util/nwgrant.c +--- a/util/nwgrant.c Sat Jul 23 21:58:13 2005 +0100 ++++ b/util/nwgrant.c Sat Jul 23 22:22:26 2005 +0100 +@@ -46,6 +46,7 @@ + #include + #include + #include ++#include + + #include "private/libintl.h" + #define _(X) gettext(X) +@@ -73,6 +74,7 @@ help(void) + "\n" + "-o object_name Name of object added as trustee\n" + "-t type Object type (decimal value)\n" ++ "-O object_id Object identifier\n" + "-r rights Rights mask (see manual page)\n" + "\n" + "directory\n" +@@ -85,7 +87,6 @@ main(int argc, char *argv[]) + struct ncp_conn *conn; + char *object_name = NULL; + int object_type = -1; +- struct ncp_bindery_object o; + u_int16_t rights = ~0; + int perr = 0; + const char *path = NULL; +@@ -98,6 +99,8 @@ main(int argc, char *argv[]) + int enclen; + TRUSTEE_INFO tstinfo; + NWCCODE nwerr; ++ NWObjectID object_id; ++ int object_id_valid = 0; + + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); +@@ -109,10 +112,14 @@ main(int argc, char *argv[]) + { + useConn = 1; + } +- while ((opt = getopt(argc, argv, "h?o:t:r:")) != EOF) ++ while ((opt = getopt(argc, argv, "h?O:o:t:r:")) != EOF) + { + switch (opt) + { ++ case 'O': ++ object_id = strtoul(optarg, NULL, 0); ++ object_id_valid = 1; ++ break; + case 'o': + object_name = optarg; + str_upper(object_name); +@@ -121,10 +128,14 @@ main(int argc, char *argv[]) + object_type = atoi(optarg); + break; + case 'r': +- if (*optarg == '[') { +- perr = ncp_str_to_perms(optarg, &rights); +- } else { +- rights = strtol(optarg, NULL, 16); ++ perr = ncp_str_to_perms(optarg, &rights); ++ if (perr) { ++ char* end; ++ ++ rights = strtol(optarg, &end, 16); ++ if (!*end || isspace(*end)) { ++ perr = 0; ++ } + } + break; + case 'h': +@@ -137,12 +148,6 @@ main(int argc, char *argv[]) + } + } + +- if (object_name == NULL) +- { +- fprintf(stderr, _("%s: You must specify an object name\n"), +- argv[0]); +- goto finished; +- } + if (perr < 0) + { + fprintf(stderr, _("%s: You must give a valid rights string\n"), +@@ -181,7 +186,13 @@ main(int argc, char *argv[]) + path = volume; + } + +- if (object_type < 0) { ++ if (object_id_valid) { ++ /* nothing */ ++ } else if (object_name == NULL) { ++ fprintf(stderr, _("%s: You must specify an object name\n"), ++ argv[0]); ++ goto finished; ++ } else if (object_type < 0) { + #ifdef NDS_SUPPORT + u_int32_t flags; + NWDSContextHandle ctx; +@@ -201,7 +212,7 @@ failDS:; + flags |= DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES; + NWDSSetContext(ctx, DCK_FLAGS, &flags); + } +- nwerr = NWDSMapNameToID(ctx, conn, object_name, &o.object_id); ++ nwerr = NWDSMapNameToID(ctx, conn, object_name, &object_id); + if (nwerr) { + goto failDS; + } +@@ -212,12 +223,15 @@ failDS:; + goto finished; + #endif + } else { ++ struct ncp_bindery_object o; ++ + if ((nwerr = ncp_get_bindery_object_id(conn, object_type, object_name, &o)) != 0) + { + fprintf(stderr, _("%s: Could not find object %s: %s\n"), + progname, object_name, strnwerror(nwerr)); + goto finished; + } ++ object_id = o.object_id; + } + enclen = ncp_path_to_NW_format(path, encpath, sizeof(encpath)); + if (enclen < 0) { +@@ -225,7 +239,7 @@ failDS:; + progname, strerror(-enclen)); + goto finished; + } +- tstinfo.objectID = o.object_id; ++ tstinfo.objectID = object_id; + tstinfo.objectRights = rights; + nwerr = ncp_ns_trustee_add(conn, NW_NS_DOS, SA_ALL, + NCP_DIRSTYLE_NOHANDLE, 0, 0, encpath, enclen, &tstinfo, 1, ~0); +diff -r 66c5f4287bbb -r 07b8031b5209 util/nwrevoke.c +--- a/util/nwrevoke.c Sat Jul 23 21:58:13 2005 +0100 ++++ b/util/nwrevoke.c Sat Jul 23 22:22:26 2005 +0100 +@@ -65,6 +65,7 @@ help(void) + "\n" + "-o object_name Name of object removed as trustee\n" + "-t type Object type (decimal value)\n" ++ "-O object_id Object identifier\n" + "\n" + "file/directory\n" + "\n")); +@@ -76,7 +77,6 @@ main(int argc, char *argv[]) + struct ncp_conn *conn; + char *object_name = NULL; + int object_type = -1; +- struct ncp_bindery_object o; + const char *path = NULL; + long err; + int result = 1; +@@ -87,6 +87,8 @@ main(int argc, char *argv[]) + TRUSTEE_INFO tstinfo; + int useConn = 0; + NWDSCCODE nwerr; ++ NWObjectID object_id; ++ int object_id_valid = 0; + + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); +@@ -98,10 +100,14 @@ main(int argc, char *argv[]) + { + useConn = 1; + } +- while ((opt = getopt(argc, argv, "h?o:t:")) != EOF) ++ while ((opt = getopt(argc, argv, "h?o:t:O:")) != EOF) + { + switch (opt) + { ++ case 'O': ++ object_id = strtoul(optarg, NULL, 0); ++ object_id_valid = 1; ++ break; + case 'o': + object_name = optarg; + str_upper(object_name); +@@ -119,12 +125,6 @@ main(int argc, char *argv[]) + } + } + +- if (object_name == NULL) +- { +- fprintf(stderr, _("%s: You must specify an object name\n"), +- argv[0]); +- goto finished; +- } + if (!useConn) { + if (optind != argc - 1) + { +@@ -150,7 +150,13 @@ main(int argc, char *argv[]) + strcat(volume, directory); + path = volume; + } +- if (object_type < 0) { ++ if (object_id_valid) { ++ /* nothing */ ++ } else if (object_name == NULL) { ++ fprintf(stderr, _("%s: You must specify an object name\n"), ++ argv[0]); ++ goto finished; ++ } else if (object_type < 0) { + #ifdef NDS_SUPPORT + u_int32_t flags; + NWDSContextHandle ctx; +@@ -170,7 +176,7 @@ failDS:; + if (!NWDSGetContext(ctx, DCK_FLAGS, &flags)) { + flags |= DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES; + } +- nwerr = NWDSMapNameToID(ctx, conn, object_name, &o.object_id); ++ nwerr = NWDSMapNameToID(ctx, conn, object_name, &object_id); + if (nwerr) { + NWDSFreeContext(ctx); + goto failDS; +@@ -182,19 +188,22 @@ failDS:; + goto finished; + #endif + } else { ++ struct ncp_bindery_object o; ++ + nwerr = ncp_get_bindery_object_id(conn, object_type, object_name, &o); + if (nwerr != 0) { + fprintf(stderr, _("%s: Could not find object %s: %s\n"), + progname, object_name, strnwerror(nwerr)); + goto finished; + } ++ object_id = o.object_id; + } + enclen = ncp_path_to_NW_format(path, encpath, sizeof(encpath)); + if (enclen < 0) { + fprintf(stderr, _("%s: Invalid path: %s\n"), progname, strerror(-enclen)); + goto finished; + } +- tstinfo.objectID = o.object_id; ++ tstinfo.objectID = object_id; + tstinfo.objectRights = 0; + nwerr = ncp_ns_trustee_del(conn, NW_NS_DOS, 0xFF, 0, 0, + encpath, enclen, &tstinfo, 1); + diff --git a/man/nwgrant.8 b/man/nwgrant.8 index a454eba..c45aff5 100644 --- a/man/nwgrant.8 +++ b/man/nwgrant.8 @@ -2,42 +2,17 @@ .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 file/directory +\fBnwgrant\fP [ \fB-h\fP ] [ \fB-S\fP \fIserver\fP ] +[ \fB-U\fP \fIuser name\fP ] [ \fB-P\fP \fIpassword\fP | \fB-n\fP ] +[ \fB-C\fP ] [ \fB-o\fP \fIobject name\fP | \fB-O\fP \fIobject id\fP ] +[ \fB-t\fP \fItype\fP ] [ \fB-r\fP \fIrights\fP ] \fBfile/directory\fP .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 +\fBnwgrant\fP looks up the file \fI$HOME/.nwclient\fP 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. @@ -68,10 +43,7 @@ is the user name to use for login. .I password .RS 3 .B password -is the password to use for login. If neither -.B -n -nor -.B -P +is the password to use for login. If neither \fB-n\fP nor \fB-P\fP are given, and the user has no open connection to the server, nwgrant prompts for a password. .RE @@ -96,11 +68,16 @@ this conversion by The name of the object to be added as trustee. .RE +.B -O +.I object id +.RS 3 +The id of the object to be added as trustee. +.RE + .B -t .I object type .RS 3 -The type of the object. -.I Object type +The type of the object. \fIObject type\fP 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. If you @@ -111,18 +88,13 @@ NDS name. .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, +You must tell \fBnwgrant\fP which rights it should grant to the bindery +object. The new rights for the object is specified by \fIrights\fP, which can be either a hexadecimal number representing the sum of all the individual rights to be granted or a string containing characters -representing each right. If rights are represented in string format -then the string must be bounded with square brackets. Characters -within the brackets may be in any order and in either case. Spaces are -allowed between the brackets - in which case the entire string should be -quoted. +representing each right. Characters within the brackets may be in +any order and in either case. Spaces are allowed between the +brackets - in which case the entire string should be quoted. Hexadecimal and character values for the rights are shown in this table: 00 = no access diff --git a/man/nwrevoke.8 b/man/nwrevoke.8 index 183c33b..da640ef 100644 --- a/man/nwrevoke.8 +++ b/man/nwrevoke.8 @@ -2,33 +2,10 @@ .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 file/directory +\fBnwrevoke\fP [ \fB-h\fP ] [ \fB-S\fP \fIserver\fP ] +[ \fB-U\fP \fIuser name\fP ] [ \fB-P\fP \fIpassword\fP | \fB-n\fP ] +[ \fB-C\fP ] [ \fB-o\fP \fIobject name\fP | \fB-O\fP \fIobject ID\fP ] +[ \fB-t\fP \fItype\fP ] \fBfile/directory\fP .SH DESCRIPTION .B nwrevoke @@ -80,7 +57,12 @@ this conversion by \fB-C\fP. \fB-o\fP \fIobject name\fP .RS 3 -The name of the object to be added as trustee. +The name of the object to be revoked as trustee. +.RE + +\fB-O\fP \fIobject ID\fP +.RS 3 +The ID of the object to be revoked as trustee. .RE \fB-t\fP \fIobject type\fP diff --git a/util/nwgrant.c b/util/nwgrant.c index 6c4d8d9..fe59977 100644 --- a/util/nwgrant.c +++ b/util/nwgrant.c @@ -46,6 +46,7 @@ #include #include #include +#include #include "private/libintl.h" #define _(X) gettext(X) @@ -73,6 +74,7 @@ help(void) "\n" "-o object_name Name of object added as trustee\n" "-t type Object type (decimal value)\n" + "-O object_id Object identifier\n" "-r rights Rights mask (see manual page)\n" "\n" "directory\n" @@ -85,7 +87,6 @@ main(int argc, char *argv[]) struct ncp_conn *conn; char *object_name = NULL; int object_type = -1; - struct ncp_bindery_object o; u_int16_t rights = ~0; int perr = 0; const char *path = NULL; @@ -98,6 +99,8 @@ main(int argc, char *argv[]) int enclen; TRUSTEE_INFO tstinfo; NWCCODE nwerr; + NWObjectID object_id; + int object_id_valid = 0; setlocale(LC_ALL, ""); bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); @@ -109,10 +112,14 @@ main(int argc, char *argv[]) { useConn = 1; } - while ((opt = getopt(argc, argv, "h?o:t:r:")) != EOF) + while ((opt = getopt(argc, argv, "h?O:o:t:r:")) != EOF) { switch (opt) { + case 'O': + object_id = strtoul(optarg, NULL, 0); + object_id_valid = 1; + break; case 'o': object_name = optarg; str_upper(object_name); @@ -121,10 +128,14 @@ main(int argc, char *argv[]) object_type = atoi(optarg); break; case 'r': - if (*optarg == '[') { - perr = ncp_str_to_perms(optarg, &rights); - } else { - rights = strtol(optarg, NULL, 16); + perr = ncp_str_to_perms(optarg, &rights); + if (perr) { + char* end; + + rights = strtol(optarg, &end, 16); + if (!*end || isspace(*end)) { + perr = 0; + } } break; case 'h': @@ -137,12 +148,6 @@ main(int argc, char *argv[]) } } - if (object_name == NULL) - { - fprintf(stderr, _("%s: You must specify an object name\n"), - argv[0]); - goto finished; - } if (perr < 0) { fprintf(stderr, _("%s: You must give a valid rights string\n"), @@ -181,7 +186,13 @@ main(int argc, char *argv[]) path = volume; } - if (object_type < 0) { + if (object_id_valid) { + /* nothing */ + } else if (object_name == NULL) { + fprintf(stderr, _("%s: You must specify an object name\n"), + argv[0]); + goto finished; + } else if (object_type < 0) { #ifdef NDS_SUPPORT u_int32_t flags; NWDSContextHandle ctx; @@ -201,7 +212,7 @@ failDS:; flags |= DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES; NWDSSetContext(ctx, DCK_FLAGS, &flags); } - nwerr = NWDSMapNameToID(ctx, conn, object_name, &o.object_id); + nwerr = NWDSMapNameToID(ctx, conn, object_name, &object_id); if (nwerr) { goto failDS; } @@ -212,12 +223,15 @@ failDS:; goto finished; #endif } else { + struct ncp_bindery_object o; + if ((nwerr = ncp_get_bindery_object_id(conn, object_type, object_name, &o)) != 0) { fprintf(stderr, _("%s: Could not find object %s: %s\n"), progname, object_name, strnwerror(nwerr)); goto finished; } + object_id = o.object_id; } enclen = ncp_path_to_NW_format(path, encpath, sizeof(encpath)); if (enclen < 0) { @@ -225,7 +239,7 @@ failDS:; progname, strerror(-enclen)); goto finished; } - tstinfo.objectID = o.object_id; + tstinfo.objectID = object_id; tstinfo.objectRights = rights; nwerr = ncp_ns_trustee_add(conn, NW_NS_DOS, SA_ALL, NCP_DIRSTYLE_NOHANDLE, 0, 0, encpath, enclen, &tstinfo, 1, ~0); diff --git a/util/nwrevoke.c b/util/nwrevoke.c index 8df69cd..1daba45 100644 --- a/util/nwrevoke.c +++ b/util/nwrevoke.c @@ -65,6 +65,7 @@ help(void) "\n" "-o object_name Name of object removed as trustee\n" "-t type Object type (decimal value)\n" + "-O object_id Object identifier\n" "\n" "file/directory\n" "\n")); @@ -76,7 +77,6 @@ main(int argc, char *argv[]) struct ncp_conn *conn; char *object_name = NULL; int object_type = -1; - struct ncp_bindery_object o; const char *path = NULL; long err; int result = 1; @@ -87,6 +87,8 @@ main(int argc, char *argv[]) TRUSTEE_INFO tstinfo; int useConn = 0; NWDSCCODE nwerr; + NWObjectID object_id; + int object_id_valid = 0; setlocale(LC_ALL, ""); bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); @@ -98,10 +100,14 @@ main(int argc, char *argv[]) { useConn = 1; } - while ((opt = getopt(argc, argv, "h?o:t:")) != EOF) + while ((opt = getopt(argc, argv, "h?o:t:O:")) != EOF) { switch (opt) { + case 'O': + object_id = strtoul(optarg, NULL, 0); + object_id_valid = 1; + break; case 'o': object_name = optarg; str_upper(object_name); @@ -119,12 +125,6 @@ main(int argc, char *argv[]) } } - if (object_name == NULL) - { - fprintf(stderr, _("%s: You must specify an object name\n"), - argv[0]); - goto finished; - } if (!useConn) { if (optind != argc - 1) { @@ -150,7 +150,13 @@ main(int argc, char *argv[]) strcat(volume, directory); path = volume; } - if (object_type < 0) { + if (object_id_valid) { + /* nothing */ + } else if (object_name == NULL) { + fprintf(stderr, _("%s: You must specify an object name\n"), + argv[0]); + goto finished; + } else if (object_type < 0) { #ifdef NDS_SUPPORT u_int32_t flags; NWDSContextHandle ctx; @@ -170,7 +176,7 @@ failDS:; if (!NWDSGetContext(ctx, DCK_FLAGS, &flags)) { flags |= DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES; } - nwerr = NWDSMapNameToID(ctx, conn, object_name, &o.object_id); + nwerr = NWDSMapNameToID(ctx, conn, object_name, &object_id); if (nwerr) { NWDSFreeContext(ctx); goto failDS; @@ -182,19 +188,22 @@ failDS:; goto finished; #endif } else { + struct ncp_bindery_object o; + nwerr = ncp_get_bindery_object_id(conn, object_type, object_name, &o); if (nwerr != 0) { fprintf(stderr, _("%s: Could not find object %s: %s\n"), progname, object_name, strnwerror(nwerr)); goto finished; } + object_id = o.object_id; } enclen = ncp_path_to_NW_format(path, encpath, sizeof(encpath)); if (enclen < 0) { fprintf(stderr, _("%s: Invalid path: %s\n"), progname, strerror(-enclen)); goto finished; } - tstinfo.objectID = o.object_id; + tstinfo.objectID = object_id; tstinfo.objectRights = 0; nwerr = ncp_ns_trustee_del(conn, NW_NS_DOS, 0xFF, 0, 0, encpath, enclen, &tstinfo, 1);