diff options
author | Dan McDonald <danmcd@mnx.io> | 2022-10-17 10:49:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-17 10:49:40 -0400 |
commit | a41cec58980057a54ffdf464a2b2d381d819b975 (patch) | |
tree | 047d5f9ad01a331052581120a3091e14d40164cb /usr/src | |
parent | 3dacc40217e9880a9cc6e0a3d2726bdd66545bbc (diff) | |
parent | f77180d803041f05d074ba8f26604f9d77c88b45 (diff) | |
download | illumos-joyent-a41cec58980057a54ffdf464a2b2d381d819b975.tar.gz |
Merge branch 'master' into OS-8418
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/cmd/hal/hald/solaris/sysevent.c | 13 | ||||
-rw-r--r-- | usr/src/lib/libc/port/print/doprnt.c | 77 | ||||
-rw-r--r-- | usr/src/lib/libc/port/stdio/_endopen.c | 3 | ||||
-rw-r--r-- | usr/src/lib/libc/port/stdio/doscan.c | 16 | ||||
-rw-r--r-- | usr/src/lib/libc/port/stdio/open_memstream.c | 1 | ||||
-rw-r--r-- | usr/src/lib/libc/port/stdio/open_wmemstream.c | 3 | ||||
-rw-r--r-- | usr/src/lib/libc/port/threads/assfail.c | 2 | ||||
-rw-r--r-- | usr/src/uts/common/fs/smbsrv/smb_dfs.c | 162 |
8 files changed, 204 insertions, 73 deletions
diff --git a/usr/src/cmd/hal/hald/solaris/sysevent.c b/usr/src/cmd/hal/hald/solaris/sysevent.c index 771fd1acf0..9e1300853f 100644 --- a/usr/src/cmd/hal/hald/solaris/sysevent.c +++ b/usr/src/cmd/hal/hald/solaris/sysevent.c @@ -2,6 +2,7 @@ * * sysevent.c : Solaris sysevents * + * Copyright 2022 Carsten Grzemba <grzemba@contac-dt.de> * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * @@ -184,7 +185,7 @@ sysevent_dev_handler(sysevent_t *ev) snprintf(s, sizeof (s), "%s %s %s\n", class, subclass, phys_path); - nwritten = write(sysevent_pipe_fds[1], s, strlen(s) + 1); + nwritten = write(sysevent_pipe_fds[1], s, strlen(s)); HAL_INFO (("sysevent_dev_handler: wrote %d bytes", nwritten)); goto out; @@ -233,7 +234,7 @@ sysevent_dev_handler(sysevent_t *ev) snprintf(s, sizeof (s), "%s %s %s %s %s %s %d\n", class, subclass, phys_path, dev_name, dev_hid, dev_uid, dev_index); - nwritten = write(sysevent_pipe_fds[1], s, strlen(s) + 1); + nwritten = write(sysevent_pipe_fds[1], s, strlen(s)); HAL_INFO (("sysevent_dev_handler: wrote %d bytes", nwritten)); @@ -295,7 +296,7 @@ sysevent_iochannel_data (GIOChannel *source, sysevent_dev_branch(phys_path); } else if (strcmp(class, EC_PWRCTL) == 0) { sysevent_pwrctl(class, subclass, phys_path, - dev_name, dev_hid, dev_uid, dev_index); + dev_name, dev_hid, dev_uid, dev_index); } else if (strcmp(class, EC_DEVFS) == 0) { if (strcmp(subclass, ESC_DEVFS_DEVI_ADD) == 0) { sysevent_devfs_add(phys_path); @@ -477,7 +478,7 @@ sysevent_devfs_add(gchar *devfs_path) di_fini (node); } -static void +static void sysevent_pwrctl(gchar *class, gchar *subclass, gchar *phys_path, gchar *dev_name, gchar *dev_hid, gchar *dev_uid, uint_t dev_index) { @@ -606,8 +607,8 @@ sysevent_dr_insert_cpu(di_node_t node, void *arg) static void sysevent_process_dr(gchar *ap_id, gchar *hint_val) { - cfga_err_t cfgerr; - cfga_list_data_t *cfg_stat; + cfga_err_t cfgerr; + cfga_list_data_t *cfg_stat; int nlist; char *errstr; di_node_t root_node; diff --git a/usr/src/lib/libc/port/print/doprnt.c b/usr/src/lib/libc/port/print/doprnt.c index 04f1e4ad0a..111591b5d9 100644 --- a/usr/src/lib/libc/port/print/doprnt.c +++ b/usr/src/lib/libc/port/print/doprnt.c @@ -167,8 +167,8 @@ static const wchar_t widenullstr[] = L"(null)"; #define PAD(s, n) { ssize_t nn; \ for (nn = n; nn > PAD_LEN; nn -= PAD_LEN) \ - if (!_dowrite(s, PAD_LEN, iop, &bufptr)) \ - return (EOF); \ + if (!_dowrite(s, PAD_LEN, iop, &bufptr)) \ + return (EOF); \ PUT(s, nn); \ } @@ -298,8 +298,8 @@ _dowrite(const char *p, ssize_t n, FILE *iop, unsigned char **ptrptr) #ifdef _WIDE static int put_wide(FILE *iop, unsigned char **bufptr, - unsigned char *bufferend, wchar_t *p, size_t n, - int sflag) + unsigned char *bufferend, wchar_t *p, size_t n, + int sflag) { unsigned char *newbufptr; wchar_t *q; @@ -357,8 +357,8 @@ put_wide(FILE *iop, unsigned char **bufptr, static int pad_wide(FILE *iop, unsigned char **bufptr, - unsigned char *bufferend, const char *s, size_t n, - int sflag) + unsigned char *bufferend, const char *s, size_t n, + int sflag) { unsigned char *newbufptr; ssize_t nn; @@ -454,19 +454,21 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) /* Starting and ending points for value to be printed */ char *bp; char *p; + + /* Field width and precision */ + ssize_t preco; + char tmpbuf[10]; + int retcode; #endif /* _WIDE */ /* Field width and precision */ int prec = 0; ssize_t width; ssize_t num; wchar_t *wp; - ssize_t preco; ssize_t wcount = 0; - char tmpbuf[10]; char wflag; char lflag; int quote; /* ' */ - int retcode; #ifdef _WIDE /* Format code */ @@ -561,7 +563,7 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) int fpos = 1; /* 1 if first positional parameter */ stva_list args, /* used to step through the argument list */ - sargs; /* used to save the start of the arg list */ + sargs; /* used to save the start of the arg list */ stva_list bargs; /* used to restore args if positional width */ /* or precision */ stva_list arglst[MAXARGS]; /* array giving appropriate values */ @@ -592,12 +594,14 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) /* if first I/O to the stream get a buffer */ /* Note that iop->_base should not equal 0 for sprintf and vsprintf */ if (iop->_base == 0) { - if (_findbuf(iop) == 0) - return (EOF); - /* _findbuf leaves _cnt set to 0 which is the wrong thing to do */ - /* for fully buffered files */ - if (!(iop->_flag & (_IOLBF|_IONBF))) - iop->_cnt = _bufend(iop) - iop->_base; + if (_findbuf(iop) == 0) + return (EOF); + /* + * _findbuf leaves _cnt set to 0 which is the wrong thing + * to do for fully buffered files + */ + if (!(iop->_flag & (_IOLBF|_IONBF))) + iop->_cnt = _bufend(iop) - iop->_base; } #ifdef _WIDE } @@ -608,7 +612,7 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) if (sflag) { maxcount = (size_t)iop->_cnt; bufferend = (unsigned char *)(((wchar_t *)iop->_ptr) + - maxcount); + maxcount); } else { bufferend = _bufend(iop); } @@ -833,7 +837,7 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) case '7': case '8': case '9': - { num = fcode - '0'; + num = fcode - '0'; while (_M_ISDIGIT(fcode = *format)) { num = num * 10 + fcode - '0'; format++; @@ -843,7 +847,6 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) else width = num; goto charswitch; - } /* Scan the length modifier */ case 'l': @@ -1061,7 +1064,7 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) lll /= 10; #ifdef _WIDE *--bp = (wchar_t) - (tll - lll * 10 + '0'); + (tll - lll * 10 + '0'); #else /* _WIDE */ *--bp = (char) \ (tll - lll * 10 + '0'); @@ -1378,7 +1381,7 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) nn = exp; if (nn < 0) - nn = -nn; + nn = -nn; for (; nn > 9; nn /= 10) *--suffix = todigit(nn % 10); *--suffix = todigit(nn); @@ -1473,7 +1476,7 @@ _ndoprnt(const char *format, va_list in_args, FILE *iop, int prflag) if (buf[0] != '0') { int nn = decpt - 1; if (nn < 0) - nn = -nn; + nn = -nn; for (; nn > 9; nn /= 10) *--suffix = todigit(nn % 10); *--suffix = todigit(nn); @@ -1676,8 +1679,8 @@ wide_C: wflag = 1; #else /* _WIDE */ if (temp) { - if ((retcode = wctomb(buf, temp)) - == -1) { + retcode = wctomb(buf, temp); + if (retcode == -1) { errno = EILSEQ; return (EOF); } else { @@ -1701,8 +1704,8 @@ wide_C: temp = va_arg(args.ap, wchar_t); if (temp) { - if ((retcode = wctomb(buf, temp)) - == -1) { + retcode = wctomb(buf, temp); + if (retcode == -1) { p = (bp = buf) + 1; } else { p = (bp = buf) + retcode; @@ -1842,9 +1845,6 @@ wide_S: bp = wstr; p = wstr + nwc; } else { - size_t nnwc; - int len; - char *s; wchar_t *wstr; bpsize = sizeof (wchar_t) * prec; @@ -1925,11 +1925,10 @@ wide_S: } wptr = wp; } - if ((sec_display = wcswidth(wptr, nwc)) - == -1) { + sec_display = wcswidth(wptr, nwc); + if (sec_display == -1) { sec_display = - _rec_scrswidth - (wptr, nwc); + _rec_scrswidth(wptr, nwc); } mbs_err: if (wp) @@ -1986,14 +1985,13 @@ wide_S: continue; } if ((nbytes = mbtowc(&wc, qp, - MB_LEN_MAX)) == -1) { + MB_LEN_MAX)) == -1) { /* print illegal char */ nbytes = 1; ncol = 1; } else { - if ((ncol = - _scrwidth(wc)) - == 0) { + ncol = _scrwidth(wc); + if (ncol == 0) { ncol = 1; } } @@ -2179,7 +2177,7 @@ wide_S: char *bufp; long printn; printn = (wchar_t *)(uintptr_t)p - - (wchar_t *)(uintptr_t)bp; + (wchar_t *)(uintptr_t)bp; bufp = buf; while (printn > 0) { if ((cnt = wctomb(buf, *wp)) < 0) @@ -2331,8 +2329,7 @@ _mkarglst(char *fmt, stva_list args, stva_list arglst[], int prflag) case '*': /* int argument used for value */ /* check if there is a positional parameter */ #ifdef _WIDE - if ((*fmt >= 0) && (*fmt < 256) && - isdigit(*fmt)) + if ((*fmt >= 0) && (*fmt < 256) && isdigit(*fmt)) #else /* _WIDE */ if (isdigit(*fmt)) #endif /* _WIDE */ diff --git a/usr/src/lib/libc/port/stdio/_endopen.c b/usr/src/lib/libc/port/stdio/_endopen.c index fa548f6385..ebcaa07439 100644 --- a/usr/src/lib/libc/port/stdio/_endopen.c +++ b/usr/src/lib/libc/port/stdio/_endopen.c @@ -55,8 +55,7 @@ FILE * _endopen(const char *name, const char *type, FILE *iop, int largefile) { - int oflag, fd, fflag, eflag, plusflag, xflag; - const char *echr; + int oflag, fd, fflag; if (iop == NULL) return (NULL); diff --git a/usr/src/lib/libc/port/stdio/doscan.c b/usr/src/lib/libc/port/stdio/doscan.c index fda4d5c2ea..7d49797578 100644 --- a/usr/src/lib/libc/port/stdio/doscan.c +++ b/usr/src/lib/libc/port/stdio/doscan.c @@ -596,7 +596,7 @@ charswitch: /* target of a goto 8-( */ /* ****************************************************************** */ static int number(int *chcount, int *flag_eof, int stow, int type, int len, int size, - FILE *iop, va_list *listp) + FILE *iop, va_list *listp) { char numbuf[64]; char *np = numbuf; @@ -841,7 +841,7 @@ readchar(FILE *iop, int *chcount) static int string(int *chcount, int *flag_eof, int stow, int type, int len, char *tab, - FILE *iop, va_list *listp) + FILE *iop, va_list *listp) { int ch; char *ptr; @@ -927,7 +927,6 @@ _mkarglst(const char *fmt, stva_list args, stva_list arglst[]) fmt += STRSPN(fmt, SPNSTR2); if (*fmt == '[') { - int i; fmt++; /* has to be at least on item in scan list */ if (*fmt == ']') { fmt++; @@ -943,6 +942,8 @@ _mkarglst(const char *fmt, stva_list args, stva_list arglst[]) } else if (isascii(*fmt)) { fmt++; } else { + int i; + i = mblen((const char *) fmt, MB_CUR_MAX); if (i <= 0) { @@ -972,12 +973,11 @@ _mkarglst(const char *fmt, stva_list args, stva_list arglst[]) #ifdef _WIDE static int wstring(int *chcount, int *flag_eof, int stow, int type, - int len, FILE *iop, va_list *listp) + int len, FILE *iop, va_list *listp) { wint_t wch; wchar_t *ptr; wchar_t *wstart; - int dummy; wstart = ptr = stow ? va_arg(*listp, wchar_t *) : NULL; @@ -1008,7 +1008,7 @@ wstring(int *chcount, int *flag_eof, int stow, int type, #else /* _WIDE */ static int wstring(int *chcount, int *flag_eof, int stow, int type, int len, FILE *iop, - va_list *listp) + va_list *listp) { int wch; wchar_t *ptr; @@ -1118,7 +1118,7 @@ _watoi(wchar_t *fmt) /* ARGSUSED3 */ static int wbrstring(int *chcount, int *flag_eof, int stow, int type, - int len, FILE *iop, unsigned char *brstr, va_list *listp) + int len, FILE *iop, unsigned char *brstr, va_list *listp) { wint_t wch; int i; @@ -1182,7 +1182,7 @@ wbrstring(int *chcount, int *flag_eof, int stow, int type, #ifdef _WIDE static int brstring(int *chcount, int *flag_eof, int stow, int type, - int len, FILE *iop, unsigned char *brstr, va_list *listp) + int len, FILE *iop, unsigned char *brstr, va_list *listp) { wint_t wch; int i; diff --git a/usr/src/lib/libc/port/stdio/open_memstream.c b/usr/src/lib/libc/port/stdio/open_memstream.c index a841f44fb5..01d5af80ce 100644 --- a/usr/src/lib/libc/port/stdio/open_memstream.c +++ b/usr/src/lib/libc/port/stdio/open_memstream.c @@ -203,7 +203,6 @@ open_memstream_close(FILE *iop) FILE * open_memstream(char **bufp, size_t *sizep) { - int err; FILE *iop; memstream_t *memp; diff --git a/usr/src/lib/libc/port/stdio/open_wmemstream.c b/usr/src/lib/libc/port/stdio/open_wmemstream.c index d46c5e34ce..a3968328f2 100644 --- a/usr/src/lib/libc/port/stdio/open_wmemstream.c +++ b/usr/src/lib/libc/port/stdio/open_wmemstream.c @@ -54,7 +54,7 @@ static ssize_t open_wmemstream_write(FILE *iop, const char *buf, size_t nbytes) { wmemstream_t *wmemp = _xdata(iop); - size_t newsize, mbscount; + size_t newsize; ssize_t nwritten = 0; int ret; @@ -165,7 +165,6 @@ open_wmemstream_close(FILE *iop) FILE * open_wmemstream(wchar_t **bufp, size_t *sizep) { - int err; FILE *iop; wmemstream_t *wmemp; diff --git a/usr/src/lib/libc/port/threads/assfail.c b/usr/src/lib/libc/port/threads/assfail.c index 4af2fc5664..40fe162b4a 100644 --- a/usr/src/lib/libc/port/threads/assfail.c +++ b/usr/src/lib/libc/port/threads/assfail.c @@ -65,8 +65,6 @@ static void Abort(const char *msg, size_t buflen) { ulwp_t *self; - struct sigaction act; - sigset_t sigmask; /* to help with core file debugging */ panicstr = msg; diff --git a/usr/src/uts/common/fs/smbsrv/smb_dfs.c b/usr/src/uts/common/fs/smbsrv/smb_dfs.c index a8a9817c24..80d4479e68 100644 --- a/usr/src/uts/common/fs/smbsrv/smb_dfs.c +++ b/usr/src/uts/common/fs/smbsrv/smb_dfs.c @@ -23,6 +23,7 @@ * Use is subject to license terms. * * Copyright 2018 Nexenta Systems, Inc. All rights reserved. + * Copyright 2021 RackTop Systems, Inc. */ #include <smbsrv/smb_kproto.h> @@ -82,6 +83,7 @@ static uint32_t smb_dfs_referrals_get(smb_request_t *, char *, dfs_reftype_t, dfs_referral_response_t *); static void smb_dfs_referrals_free(dfs_referral_response_t *); static uint16_t smb_dfs_referrals_unclen(dfs_info_t *, uint16_t); +static uint32_t smb_dfs_get_referrals_ex(smb_request_t *, smb_fsctl_t *); /* * Handle device type FILE_DEVICE_DFS @@ -95,19 +97,147 @@ smb_dfs_fsctl(smb_request_t *sr, smb_fsctl_t *fsctl) if (!STYPE_ISIPC(sr->tid_tree->t_res_type)) return (NT_STATUS_INVALID_DEVICE_REQUEST); + /* + * If the connection is not DFS capable, we should return + * NT_STATUS_FS_DRIVER_REQUIRED for both of these DFS ioctls. + * See [MS-SMB2] 3.3.5.15.2. + */ + if ((sr->session->srv_cap & SMB2_CAP_DFS) == 0) + return (NT_STATUS_FS_DRIVER_REQUIRED); + switch (fsctl->CtlCode) { case FSCTL_DFS_GET_REFERRALS: status = smb_dfs_get_referrals(sr, fsctl); break; - case FSCTL_DFS_GET_REFERRALS_EX: /* XXX - todo */ + case FSCTL_DFS_GET_REFERRALS_EX: + status = smb_dfs_get_referrals_ex(sr, fsctl); + break; default: - status = NT_STATUS_NOT_SUPPORTED; + /* + * MS-SMB2 suggests INVALID_DEVICE_REQUEST + * for unknown control codes, but using that + * here makes Windows unhappy. + */ + status = NT_STATUS_FS_DRIVER_REQUIRED; } return (status); } /* + * XXX Instead of decoding the referral request and encoding + * the response here (in-kernel) we could pass the given + * request buffer in our door call, and let that return the + * response buffer ready to stuff into out_mbc. That would + * allow all this decoding/encoding to happen at user-level. + * (and most of this file would go away. :-) + */ + +/* + * See [MS-DFSC] for details about this command + * Handles FSCTL_DFS_GET_REFERRALS_EX (only) + */ +uint32_t +smb_dfs_get_referrals_ex(smb_request_t *sr, smb_fsctl_t *fsctl) +{ + dfs_info_t *referrals; + dfs_referral_response_t refrsp; + dfs_reftype_t reftype; + char *path; + uint16_t maxver; + uint16_t flags; + uint16_t fnlen; + uint32_t datalen; + uint32_t status; + int rc; + + /* + * The caller checks this, because the error reporting method + * varies across SMB versions. + */ + ASSERT(STYPE_ISIPC(sr->tid_tree->t_res_type)); + + /* + * Decode fixed part. + * Input data is (w) MaxReferralLevel, (w) Flags, + * (l) RequestDataLength, ... variable data ... + */ + rc = smb_mbc_decodef(fsctl->in_mbc, "wwl", + &maxver, &flags, &datalen); + if (rc != 0) + return (NT_STATUS_INVALID_PARAMETER); + + /* + * Decode variable part: + * (w) file name length, (u) filename, + * ( if flags & 1 ) + * (w) site name len, (u) site name + * We don't decode or use the site name + */ + if (MBC_ROOM_FOR(fsctl->in_mbc, datalen) == 0) + return (NT_STATUS_INVALID_PARAMETER); + rc = smb_mbc_decodef(fsctl->in_mbc, "%wu", + sr, &fnlen, &path); + if (rc != 0) + return (NT_STATUS_INVALID_PARAMETER); + + reftype = smb_dfs_get_reftype((const char *)path); + switch (reftype) { + case DFS_REFERRAL_INVALID: + /* Need to check the error for this case */ + return (NT_STATUS_INVALID_PARAMETER); + + case DFS_REFERRAL_DOMAIN: + case DFS_REFERRAL_DC: + /* MS-DFSC: this error is returned by non-DC root */ + return (NT_STATUS_INVALID_PARAMETER); + + case DFS_REFERRAL_SYSVOL: + /* MS-DFSC: this error is returned by non-DC root */ + return (NT_STATUS_NO_SUCH_DEVICE); + + default: + break; + } + + status = smb_dfs_referrals_get(sr, path, reftype, &refrsp); + if (status != NT_STATUS_SUCCESS) + return (status); + + referrals = &refrsp.rp_referrals; + smb_dfs_encode_hdr(fsctl->out_mbc, referrals); + + /* + * Server may respond with any referral version at or below + * the maximum specified in the request. + */ + switch (maxver) { + case DFS_REFERRAL_V1: + status = smb_dfs_encode_refv1(sr, fsctl->out_mbc, referrals); + break; + + case DFS_REFERRAL_V2: + status = smb_dfs_encode_refv2(sr, fsctl->out_mbc, referrals); + break; + + case DFS_REFERRAL_V3: + status = smb_dfs_encode_refv3x(sr, fsctl->out_mbc, referrals, + DFS_REFERRAL_V3); + break; + + case DFS_REFERRAL_V4: + default: + status = smb_dfs_encode_refv3x(sr, fsctl->out_mbc, referrals, + DFS_REFERRAL_V4); + break; + } + + smb_dfs_referrals_free(&refrsp); + + return (status); +} + +/* * Note: SMB1 callers in smb_trans2_dfs.c * smb_com_trans2_report_dfs_inconsistency * smb_com_trans2_get_dfs_referral @@ -135,15 +265,6 @@ smb_dfs_get_referrals(smb_request_t *sr, smb_fsctl_t *fsctl) ASSERT(STYPE_ISIPC(sr->tid_tree->t_res_type)); /* - * XXX Instead of decoding the referral request and encoding - * the response here (in-kernel) we could pass the given - * request buffer in our door call, and let that return the - * response buffer ready to stuff into out_mbc. That would - * allow all this decoding/encoding to happen at user-level. - * (and most of this file would go away. :-) - */ - - /* * Input data is (w) MaxReferralLevel, (U) path */ rc = smb_mbc_decodef(fsctl->in_mbc, "%wu", @@ -520,8 +641,25 @@ smb_dfs_referrals_get(smb_request_t *sr, char *dfs_path, dfs_reftype_t reftype, rc = smb_kdoor_upcall(sr->sr_server, SMB_DR_DFS_GET_REFERRALS, &req, dfs_referral_query_xdr, refrsp, dfs_referral_response_xdr); - if (rc != 0 || refrsp->rp_status != ERROR_SUCCESS) { + if (rc != 0) return (NT_STATUS_FS_DRIVER_REQUIRED); + + /* + * Map the Win error to one of the NT status codes + * documented in MS-DFSC. The most common, when we + * have no DFS root configured, is NOT_FOUND. + */ + switch (refrsp->rp_status) { + case ERROR_SUCCESS: + break; + case ERROR_INVALID_PARAMETER: + return (NT_STATUS_INVALID_PARAMETER); + case ERROR_NOT_ENOUGH_MEMORY: + return (NT_STATUS_INSUFFICIENT_RESOURCES); + case ERROR_NOT_FOUND: + return (NT_STATUS_NOT_FOUND); + default: + return (NT_STATUS_UNEXPECTED_NETWORK_ERROR); } (void) strsubst(refrsp->rp_referrals.i_uncpath, '/', '\\'); |