9front - general discussion about 9front
 help / color / mirror / Atom feed
From: unobe@cpan.org
To: 9front@9front.org
Subject: Re: [9front] [PATCH 2/6] cifsd: clarify SMBv1 is supported, not SMB 2/3.
Date: Thu, 28 Sep 2023 00:14:19 -0700	[thread overview]
Message-ID: <8FA83A0AE7B16EFD59606402877A4FCD@smtp.pobox.com> (raw)
In-Reply-To: <338BDD1F7133D9F883631FC57D34393C@smtp.pobox.com>

Desktop Mac (OS X) can connect to cifsd just fine, but iPhones (iOS)
cannot.  My hope is that the documentation will clarify what is
supported for someone down the road, and the logging will help
diagnose situations where a client is connecting with an unsupported
version.

Quoth Romano <unobe@cpan.org>:
> 
> SMB 2/3 is not supported by cifsd, so clarify that in the man page and update teh code to mention in the log file if SMB2/3 is attempted. Also, while in the code, fix a typo, add a few more commands to the explicitly unsupported list, and align the return value for unsupported calls to the SMBv1 spec.
> ---
> diff 755ac2c11ce134f76d83a2a42edb07a6304d1de8 f48ee862768b677d0b0fca82a7efecd0b4fb3b06
> --- a/sys/man/8/cifsd
> +++ b/sys/man/8/cifsd
> @@ -1,6 +1,6 @@
>  .TH CIFSD 8
>  .SH NAME
> -cifsd \- CIFS/SMB network daemon
> +cifsd \- CIFS/SMBv1 network daemon
>  .SH SYNOPSIS
>  .PP
>  .B ip/cifsd
> @@ -25,6 +25,7 @@
>  exports filesystems to
>  .SM CIFS or
>  .SM SMB
> +version 1
>  clients like Microsoft \(tm Windows.
>  .PP
>  It is normally started by the network listen process via the
> --- a/sys/src/cmd/ip/cifsd/dat.h
> +++ b/sys/src/cmd/ip/cifsd/dat.h
> @@ -139,9 +139,11 @@
>  	STATUS_SMB_BAD_TID				= 0x00050002,
>  	STATUS_SMB_BAD_FID				= 0x00060001,
>  	STATUS_OS2_INVALID_ACCESS		= 0x000C0001,
> +	STATUS_SMB_BAD_COMMAND			= 0x00160002,
>  	STATUS_SMB_BAD_UID				= 0x005B0002,
>  	STATUS_OS2_INVALID_LEVEL  		= 0x007C0001,
>  	STATUS_NO_MORE_FILES			= 0x80000006,
> +	STATUS_NOT_IMPLEMENTED			= 0xC0000002,
>  	STATUS_INVALID_HANDLE			= 0xC0000008,
>  	STATUS_NO_SUCH_FILE				= 0xC000000F,
>  	STATUS_ACCESS_DENIED			= 0xC0000022,
> --- a/sys/src/cmd/ip/cifsd/main.c
> +++ b/sys/src/cmd/ip/cifsd/main.c
> @@ -7,6 +7,7 @@
>  	LENHDR = 4,
>  
>  	MAGIC = 0xFF | ('S'<<8) | ('M'<<16) | ('B'<<24),
> +	MAGIC_SMB2 = 0xFE | ('S'<<8) | ('M'<<16) | ('B'<<24),
>  
>  	SMB_FLAGS_CASE_INSENSITIVE = 0x08,
>  	SMB_FLAGS_CANONICALIZED_PATHS = 0x10,
> @@ -88,8 +89,8 @@
>  		exits("botch");
>  		return;
>  	}
> -	if(magic != MAGIC){
> -		logit("bad smb magic");
> +	if(magic != MAGIC) {
> +		logit("bad smb magic [%x] %s", magic, (magic == MAGIC_SMB2 ? "(SMB2/3 not supported)" : ""));
>  		exits("botch");
>  		return;
>  	}
> --- a/sys/src/cmd/ip/cifsd/smb.c
> +++ b/sys/src/cmd/ip/cifsd/smb.c
> @@ -135,7 +135,7 @@
>  			free(mcr);
>  		}
>  		remoteuser = getuser();
> -		logit("auth successfull");
> +		logit("auth successful");
>  		break;
>  	}
>  	sessionuid = (namehash(getuser()) & 0x7FFF) | 1;
> @@ -794,6 +794,12 @@
>  }
>  
>  void
> +smbstatusnotimplemented(Req *r, uchar *, uchar *, uchar *)
> +{
> +	r->respond(r, STATUS_NOT_IMPLEMENTED);
> +}
> +
> +void
>  smbecho(Req *r, uchar *h, uchar *p, uchar *e)
>  {
>  	uchar *t, *d, *de;
> @@ -1711,7 +1717,7 @@
>  void
>  smbnoandxcommand(Req *r, uchar *, uchar *, uchar *)
>  {
> -	r->respond(r, (r->cmd == 0xFF) ? STATUS_INVALID_SMB : 0);
> +	r->respond(r, (r->cmd == 0xFF) ? STATUS_SMB_BAD_COMMAND : 0);
>  }
>  
>  struct {
> @@ -1731,6 +1737,10 @@
>  	[0x23] { "SMB_COM_QUERY_INFORMATION2", smbqueryinformation2 },
>  	[0x24] { "SMB_COM_LOCKING_ANDX", smblockingandx },
>  	[0x25] { "SMB_COM_TRANSACTION", smbtransaction },
> +	[0x27] { "SMB_COM_IOCTL", smbstatusnotimplemented },
> +	[0x28] { "SMB_COM_IOCTL_SECONDARY", smbstatusnotimplemented },
> +	[0x29] { "SMB_COM_COPY", smbstatusnotimplemented },
> +	[0x2a] { "SMB_COM_MOVE", smbstatusnotimplemented },
>  	[0x2b] { "SMB_COM_ECHO", smbecho },
>  	[0x2d] { "SMB_COM_OPEN_ANDX", smbopenandx },
>  	[0x2e] { "SMB_COM_READ_ANDX", smbreadandx },
> @@ -1737,6 +1747,7 @@
>  	[0x2f] { "SMB_COM_WRITE_ANDX", smbwriteandx },
>  	[0x32] { "SMB_COM_TRANSACTION2", smbtransaction },
>  	[0x34] { "SMB_COM_FIND_CLOSE2", smbcloseflush },
> +	[0x40] { "SMB_IOS", smbnoandxcommand },
>  	[0x71] { "SMB_COM_DISCONNECT_TREE", smbdisconnecttree },
>  	[0x72] { "SMB_COM_NEGOTIATE", smbnegotiate },
>  	[0x73] { "SMB_COM_SESSION_SETUP_ANX", smbsessionsetupandx },
> @@ -1750,6 +1761,7 @@
>  void
>  smbcmd(Req *r, int cmd, uchar *h, uchar *p, uchar *e)
>  {
> +	logit("processing [%.2x] command", cmd);
>  	if((cmd >= nelem(optab)) || (optab[cmd].fun == nil)){
>  		logit("[%.2x] command not implemented", cmd);
>  		r->respond(r, STATUS_NOT_SUPPORTED);
> 
> 


  reply	other threads:[~2023-09-28  7:18 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-28  6:34 Romano
2023-09-28  7:14 ` unobe [this message]
2023-12-11 18:57   ` unobe
2023-12-11 19:31   ` unobe
2023-12-15  0:01     ` Roberto E. Vargas Caballero
2023-12-18 12:41 ` cinap_lenrek
2023-12-18 18:05 ` cinap_lenrek
2023-12-18 18:55   ` unobe
2023-12-19 17:36     ` cinap_lenrek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8FA83A0AE7B16EFD59606402877A4FCD@smtp.pobox.com \
    --to=unobe@cpan.org \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).