From 6d2d3f367f0210d1b7373890bc36b25eb3b2faf7 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Mon, 25 May 2026 09:17:56 +0200 Subject: [PATCH] dosutils: use NCP87 DOS info fields in NDIR Add a Client32 NCP87 helper for obtaining DOS namespace file and subdirectory information and use it in NDIR. The new helper reads the classic NCP87 subfunction 6 RIM_ALL DOS info block, including timestamps, inherited rights, directory identifiers and size metadata. Use the NCP87 inherited rights mask for the inherited-rights column while keeping the existing Client32 effective-rights path for the effective rights column. Also use the NCP87 modify, archive, last-access and creation date fields for the /DATES display, falling back to DOS findfirst timestamps when the NCP87 info request is not available. Tighten the /DATES layout so the full Created/Copied timestamp remains within an 80-column DOS screen. --- README.md | 8 ++-- c32ncp.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ c32ncp.h | 37 ++++++++++++++++++ ndir.c | 102 +++++++++++++++++++++++++++++++++++++++++------- net.exe | Bin 102160 -> 103698 bytes 5 files changed, 244 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index e5d54cd..a0441f8 100644 --- a/README.md +++ b/README.md @@ -534,10 +534,10 @@ NDIR PUBLIC /DO The first version intentionally focuses on the common listing path. More advanced Novell NDIR features such as sorting and restrictions are accepted -only as future compatibility points or will be implemented in later revisions. The `/RIGHTS` display currently uses effective rights for both -rights columns until inherited-right masks are exposed. The `/DATES` display -uses the DOS update timestamp and placeholder values for archive/access fields -until full NetWare namespace date fields are available. +only as future compatibility points or will be implemented in later revisions. The `/RIGHTS` display uses NCP87 information for inherited rights and +Client32 effective-rights calls for effective rights. The `/DATES` display +uses NCP87 DOS info fields when available and falls back to DOS findfirst +timestamps otherwise. ### `DEBUG` diff --git a/c32ncp.c b/c32ncp.c index 6cc7c70..6efb100 100644 --- a/c32ncp.c +++ b/c32ncp.c @@ -314,6 +314,121 @@ int c32_ncp87_obtain_rim_attributes(const char *name, } +int c32_ncp87_obtain_ndir_info(const char *path_name, + uint16 dir_handle, + C32_NDIR_INFO *info_out, + uint16 *actual_out, + uint16 *handle_lo_out, + uint16 *handle_hi_out) +{ + uint16 handle_lo, handle_hi; + uint8 hdr[16]; + uint8 path[0x140]; + uint8 rep0[0x180]; + uint8 rep1[0x40]; + uint8 rawout[32]; + uint16 raw_ret_ax, raw_ret_dx; + uint16 actual_lo; + UI path_len; + int rc; + int namelen; + + if (!info_out) + return(1); + + memset(info_out, 0, sizeof(*info_out)); + if (actual_out) *actual_out = 0; + if (handle_lo_out) *handle_lo_out = 0; + if (handle_hi_out) *handle_hi_out = 0; + + rc = c32_get_ncp_handle(&handle_lo, &handle_hi); + if (rc) + return(10 + rc); + + /* + * NCP87 subfunction 6: Obtain File or Subdirectory Information. + * + * This asks for the classic DOS info block (RIM_ALL). ncpfs' old + * nw_info_struct layout is: + * +00 space allocated + * +04 attributes + * +20 creation time/date/id + * +28 modify time/date/id + * +36 last access date + * +38 archive time/date/id + * +46 inherited rights mask + * +48 directory numbers + * +76 name length/name + */ + memset(hdr, 0, sizeof(hdr)); + hdr[0] = 6; /* NCP87 subfunction 6 */ + hdr[1] = 0; /* source namespace DOS */ + hdr[2] = 0; /* target namespace DOS */ + c32_put_word_lh(hdr + 3, 0x0006); /* SA_ALL */ + c32_put_dword_lh(hdr + 5, 0x00000FFFUL); /* RIM_ALL */ + + path_len = c32_build_handle_path_from_dos_path(path, (uint8)dir_handle, + 0, 0, path_name); + + memset(rep0, 0, sizeof(rep0)); + memset(rep1, 0, sizeof(rep1)); + memset(rawout, 0, sizeof(rawout)); + + C32_NCP87_Raw5_Probe(handle_lo, handle_hi, + hdr, 9, + path, path_len, + rep0, sizeof(rep0), + rep1, sizeof(rep1), + rawout); + + raw_ret_ax = c32_get_word_lh(rawout + 14); + raw_ret_dx = c32_get_word_lh(rawout + 16); + actual_lo = c32_get_word_lh(rawout + 18); + + if (actual_out) *actual_out = actual_lo; + if (handle_lo_out) *handle_lo_out = handle_lo; + if (handle_hi_out) *handle_hi_out = handle_hi; + + if (raw_ret_ax != 0 || raw_ret_dx != 0) + return(20); + + info_out->space_allocated = c32_get_dword_lh(rep0 + 0); + info_out->attributes = c32_get_dword_lh(rep0 + 4); + info_out->flags = c32_get_word_lh(rep0 + 8); + info_out->data_size = c32_get_dword_lh(rep0 + 10); + info_out->total_size = c32_get_dword_lh(rep0 + 14); + info_out->number_of_streams = c32_get_word_lh(rep0 + 18); + info_out->creation_time = c32_get_word_lh(rep0 + 20); + info_out->creation_date = c32_get_word_lh(rep0 + 22); + info_out->creator_id = c32_get_dword_hl(rep0 + 24); + info_out->modify_time = c32_get_word_lh(rep0 + 28); + info_out->modify_date = c32_get_word_lh(rep0 + 30); + info_out->modifier_id = c32_get_dword_hl(rep0 + 32); + info_out->last_access_date = c32_get_word_lh(rep0 + 36); + info_out->archive_time = c32_get_word_lh(rep0 + 38); + info_out->archive_date = c32_get_word_lh(rep0 + 40); + info_out->archiver_id = c32_get_dword_hl(rep0 + 42); + info_out->inherited_rights = c32_get_word_lh(rep0 + 46); + info_out->dir_ent_num = c32_get_dword_lh(rep0 + 48); + info_out->dos_dir_num = c32_get_dword_lh(rep0 + 52); + info_out->vol_number = c32_get_dword_lh(rep0 + 56); + info_out->ea_data_size = c32_get_dword_lh(rep0 + 60); + info_out->ea_key_count = c32_get_dword_lh(rep0 + 64); + info_out->ea_key_size = c32_get_dword_lh(rep0 + 68); + info_out->ns_creator = c32_get_dword_lh(rep0 + 72); + + namelen = rep0[76]; + if (namelen > 255) + namelen = 255; + info_out->name_len = (uint8)namelen; + memcpy(info_out->name, rep0 + 77, namelen); + info_out->name[namelen] = '\0'; + + return(0); +} + + + int c32_ncp87_modify_dos_attributes(char *name, uint16 dir_handle, uint32 attrs, diff --git a/c32ncp.h b/c32ncp.h index 7cf823d..1279591 100644 --- a/c32ncp.h +++ b/c32ncp.h @@ -12,6 +12,43 @@ int c32_ncp87_obtain_rim_attributes(const char *name, uint16 *handle_hi_out); +typedef struct c32_ndir_info { + uint32 space_allocated; + uint32 attributes; + uint16 flags; + uint32 data_size; + uint32 total_size; + uint16 number_of_streams; + uint16 creation_time; + uint16 creation_date; + uint32 creator_id; + uint16 modify_time; + uint16 modify_date; + uint32 modifier_id; + uint16 last_access_date; + uint16 archive_time; + uint16 archive_date; + uint32 archiver_id; + uint16 inherited_rights; + uint32 dir_ent_num; + uint32 dos_dir_num; + uint32 vol_number; + uint32 ea_data_size; + uint32 ea_key_count; + uint32 ea_key_size; + uint32 ns_creator; + uint8 name_len; + char name[256]; +} C32_NDIR_INFO; + +int c32_ncp87_obtain_ndir_info(const char *path_name, + uint16 dir_handle, + C32_NDIR_INFO *info_out, + uint16 *actual_out, + uint16 *handle_lo_out, + uint16 *handle_hi_out); + + int c32_ncp87_modify_dos_attributes(char *name, uint16 dir_handle, uint32 attrs, diff --git a/ndir.c b/ndir.c index 1ee07c6..e8007dd 100644 --- a/ndir.c +++ b/ndir.c @@ -48,6 +48,7 @@ #define NDIR_NCP_RIGHT_SUPER 0x0100 static void ndir_dos_date(unsigned date, char *out); +static void ndir_dos_datetime(unsigned date, unsigned time, char *out); #define NDIR_OLD_RIGHT_S 0x01 #define NDIR_OLD_RIGHT_R 0x02 @@ -207,6 +208,27 @@ static void ndir_dos_date(unsigned date, char *out) sprintf(out, "%02d-%02d-%02d", month, day, year % 100); } +static void ndir_dos_datetime_or_blank(unsigned date, unsigned time, char *out) +{ + if (!date) { + strcpy(out, "0-00-00 0:00 A"); + return; + } + + ndir_dos_datetime(date, time, out); +} + +static void ndir_dos_date_or_blank(unsigned date, char *out) +{ + if (!date) { + strcpy(out, "0-00-00"); + return; + } + + ndir_dos_date(date, out); +} + + static void ndir_dos_datetime(unsigned date, unsigned time, char *out) { int year; @@ -296,6 +318,35 @@ static void ndir_old_rights_string(uint8 old_rights, char *out) out[8] = '\0'; } +static int ndir_get_ncp_info(char *path, C32_NDIR_INFO *info) +{ + uint8 connid = 0; + uint8 dhandle = 0; + + if (!info) + return(1); + + memset(info, 0, sizeof(*info)); + + if (tool_current_dhandle(&connid, &dhandle)) + return(1); + + return(c32_ncp87_obtain_ndir_info(tool_is_current_path(path) ? "" : path, + (uint16)dhandle, + info, + NULL, NULL, NULL)); +} + +static void ndir_inherited_rights(char *path, char *out) +{ + C32_NDIR_INFO info; + + strcpy(out, "--------"); + + if (!ndir_get_ncp_info(path, &info)) + ndir_old_rights_string((uint8)info.inherited_rights, out); +} + static void ndir_rights_string(uint16 ncp_rights, char *out) { out[0] = (ncp_rights & NDIR_NCP_RIGHT_SUPER) ? 'S' : '-'; @@ -371,28 +422,45 @@ static void ndir_print_file(char *dir, struct find_t *ff, int options, char fl[20]; /* [RW-A------------] plus NUL */ char path[260]; char eff[10]; + char inh[10]; + char arch[24]; + char acc[12]; + char crea[24]; + C32_NDIR_INFO info; + int have_info = 0; + + tool_join_path(path, dir, ff->name, sizeof(path)); + have_info = !ndir_get_ncp_info(path, &info); + + if (have_info) + ndir_dos_datetime(info.modify_date, info.modify_time, dt); + else + ndir_dos_datetime(ff->wr_date, ff->wr_time, dt); - ndir_dos_datetime(ff->wr_date, ff->wr_time, dt); ndir_dos_date(ff->wr_date, d); ndir_flags(ff->attrib, fl); if (options & NDIR_OPT_RIGHTS) { - tool_join_path(path, dir, ff->name, sizeof(path)); ndir_effective_rights(path, eff); - /* - * We do not have the inherited-rights mask yet. Use the effective - * rights in both columns for this first /RIGHTS implementation. - */ + ndir_inherited_rights(path, inh); fprintf(stdout, "%-16.16s %-18.18s [%8.8s] [%8.8s]\n", - ff->name, fl, eff, eff); + ff->name, fl, inh, eff); } else if (options & NDIR_OPT_DATES) { /* * DOS findfirst gives us the update timestamp only. Keep the Novell * /DATES layout and use placeholders for archive/access data until * full NetWare namespace date fields are available. */ - fprintf(stdout, "%-16.16s %-17.17s 0-00-00 0:00 A %-8.8s %-17.17s\n", - ff->name, dt, d, dt); + if (have_info) { + ndir_dos_datetime_or_blank(info.archive_date, info.archive_time, arch); + ndir_dos_date_or_blank(info.last_access_date, acc); + ndir_dos_datetime_or_blank(info.creation_date, info.creation_time, crea); + fprintf(stdout, "%-16.16s %-17.17s %-17.17s %-8.8s %-17.17s\n", + ff->name, dt, arch, acc, crea); + } else { + fprintf(stdout, "%-16.16s %-17.17s 0-00-00 0:00 A %-8.8s %-17.17s\n", + ff->name, dt, d, dt); + } } else { fprintf(stdout, "%-16.16s %12lu %-17.17s %-18.18s\n", ff->name, (unsigned long)ff->size, dt, fl); @@ -407,14 +475,20 @@ static void ndir_print_dir(char *dir, struct find_t *ff, int options, char dt[24]; char path[260]; char eff[10]; + char inh[10]; + C32_NDIR_INFO info; - ndir_dos_datetime(ff->wr_date, ff->wr_time, dt); + tool_join_path(path, dir, ff->name, sizeof(path)); + if (!ndir_get_ncp_info(path, &info)) + ndir_dos_datetime(info.creation_date, info.creation_time, dt); + else + ndir_dos_datetime(ff->wr_date, ff->wr_time, dt); if (options & (NDIR_OPT_RIGHTS | NDIR_OPT_DIRS_ONLY)) { - tool_join_path(path, dir, ff->name, sizeof(path)); ndir_effective_rights(path, eff); + ndir_inherited_rights(path, inh); fprintf(stdout, "%-16.16s [%8.8s] [%8.8s] %-17.17s\n", - ff->name, eff, eff, dt); + ff->name, inh, eff, dt); } else { fprintf(stdout, "%-16.16s %-17.17s\n", ff->name, dt); } @@ -499,8 +573,8 @@ static int ndir_list_one(char *spec, int options, int *continuous) fprintf(stdout, "Files: Flags Rights Rights Owner\n"); fprintf(stdout, "---------------- ------------------ ----------- ----------- --------\n"); } else if (options & NDIR_OPT_DATES) { - fprintf(stdout, "Files: Last Updated Last Archived * Accessed Created/Copied\n"); - fprintf(stdout, "---------------- ----------------- ------------- -- -------- -----------------\n"); + fprintf(stdout, "Files: Last Updated Last Archived Accessed Created/Copied\n"); + fprintf(stdout, "---------------- ----------------- ----------------- -------- -----------------\n"); } else { fprintf(stdout, "Files: Size Last Updated Flags Owner\n"); fprintf(stdout, "---------------- ---------------- ----------------- ------------------ --------\n"); diff --git a/net.exe b/net.exe index 03f67164c1efc9a4411612576de710b9eee468fb..3a1fce4f85e8eb5767fe9a0804dc0c7dcf758293 100755 GIT binary patch delta 32180 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�)FWm z%`JOkdpC&Tn>{l=;>7wM^hL*x$?mx~l61GN>gQJfr6-bm(_=(*@`=K}^eqScW`@x$ zJxdl1y?kkk&3G>y5XC44M9spR$d{&)^ZBSuVx^Ee^~XeUGu0#J)+%S@^tN`M7#~(A zmBOqcb&lV)B4&;lugk{sW|IDma5^p!)8hA2`QSpt$FT)`4Pu^~)`_lh6k%G<)t?Wi zV{H?-UK&C79G!YE#es=BZ9Ulc`O(>lRq2`|M3YYi~n zBuuLuFj&ARxAEy62GZ~F6KT~QtzuCW30Myek|tUIZ){X*Z#agrsN3E-pWi>MOB;(3 zGKw!8F`^xX?{yFpOsg1(#*#MhKJxlwf&rcfx} zk4qO;3FlO==s$=-Q@x@;5<`zcQ#HiUfyADxK}%>Ajl|3xg}G#yF%%lR4u2uXU#A}! zOV1_--7Rf;T~VV7NiYhF3JaVXT}pj$k!v*XudxIdx#8{ct;98&Wcg^SUwbN zQe#m)6iS0i-w;dtk!ER;+EAo6h|e`9_2@z>8qcJL-B9Yk_VNK(H&D?TpKdAd4+IWrD_cA!=}gNAnzRi!(F87MeTp^HpYIE;4495OMrgCwAL zB|dAv+R=P!sQDuDcSMX`C=>*n2BatF52M{D5}Cxaa%{?#ZsW%XYn_HNr^iC{4Tu&r z3Xv&|sZ15eJWZQsOP9zWE>xB-l3Px`Rf%q_)Bib)_7lHNrlHQm=~wyOYZW^Ey5Y2U z53tmZAb&3*ILBSRd4^}!3-`5;O57=?oW9-^AD<)GDBg-z(+?X#hoP&6!@UfpTu!=_e#Z#92c{sw(c(a6%oA5f&|(@hFJ4cn2xa zg3-kp2#_KMt8I7-Z}qQ^seJ+AHK=RL-=@F5yDpwdDB-56;}v-C}^Vz;TOW| zglyoiy&y>c=6KrM8Qi78XXEQt`VYs`p~FdJ#=jA|&O##2Lo462dPCa;a#tsexp%kXL^99G_*3u~i1c$O z&~y2=M>g?CX`sOM6%*(bFBDKsx@VT!(uwqZi&n0Rs*tGkgD28GgGmnTHHiKaEu|QQ zn*wPfycBOp2jf}4c_Mw6x5hvqJx#F2-btXZYVxD-oui^HQMvwGfls6SowQHY->-~f z;*vEEm@eV++J0nZ>1rc3;D6+5Gt;2j|DjUpZjQJU-b{V6SG!d+3?G!diP z9c9dq%F2+?X_CX@$O~psL}`8Eu?|-F=-+#q%%=F*Z?8}e{e>j6)O@`N{f!`7bl~G8>0T&t(EKaTa)R~xIK|tb8cyglGasf?~w>biVkKv z1v8UG28Z$1{>P#)2$5PbjU8KFtJfBtj4CRLGPvtsB-1`*e*#JYCoIT@8kv3lH{Zh! zsS@vrF;%FE-lrYi^)WN)0ll{oQ&!IH+nitAl>&?5Z=QfpUTx-!BS@)`l<2q3qysS6 zP#b$haCn#KOK0*Hhx06Y1T5o;v*-;X7>Q|cDqoJ&|8EZcD|rgwpU%#upM$43g?4t= z*RG;{o%`ATQF_ZNTIC(6?58CE2L>u*aUB*I*t6fj{sUJBo=9I!$Iz}57OYMU9JXrV z($~^oT@)DDM_-yskM9`RuOI#w{so@!N~7yNp|?V)WcR=k6#k9G-B{ZbO)bIQa^U%J z62{;zmxS?82XXfeuseo?UBq2AP&SM_J;2>#-~(&`p}Wzj1AsiyR4?511wI{1!bZ}` z8u#(GN195;-CW>eA_+{#U54$6rnca&!1g4fzQWxx;EO?ovjTUQ0T=wGJBoUOyE;IW zL7uvblHGd%H*(0+K->)h=CI^xI_}<_gUi7J^7uOLRsuiZFQZY^X54)M=r@t46S(^h z=suM^UBq1#P|GKO7k9q_CyPl~1MVn?WcQcH$y3XJ1y}?7>EFtwyXp&cw8z+F_kExo z0Zstl0jGg-;1W;`{0uw*eh2D+mw?z2e+Udv00BU-WAcf59qs1mR2P}-zGeXC;jQ$- Ujw~KdHJ)g#Z8m