Hey,

Can look more closely later, but a few quick things that might help:

1) stick to memcached/memcached on github - that's an old couchbase fork
you linked to. If you're using couchbase you need to talk to them instead.

2) in the t/ dir there're some unit tests for SASL which might help you
understand the workflow better.

On Mon, 18 Mar 2019, Jiuming Shao wrote:

> Hey all,
> I am writing my own implementation of a memcachedClient within which I want 
> to add authentication. I just started with PLAIN auth but
> failed.
>
> My main reference is this one 
> https://github.com/couchbase/memcached/blob/master/docs/sasl.md 
> My guess is that the binary message I am sending through the wire was wrong, 
> thus it could never match with the secret I store in the db
> file.
> After searching around, I found out the SASL_AUTH(0X21) is also a key-value 
> like operation, where the key is the auth mechanism, and the
> value being auth data. The tricky part is how I put them in the outgoing 
> request.
>
> Please correct me if i am wrong, below is an example of PLAIN auth request
>  1. The auth mechanism comes right after the header. in this case 'PLAIN'
>  2. A NULL byte comes after the "key" -> "PLAIN". In this case byte # 29.
>  3. Then comes the user@hostName
>  4. A NULL bytes comes after user@hostname. In this case byte # 34
>  5. The last part is the password
>
> Byte/     0       |       1       |       2       |       3       |
>      /              |               |               |               |
>     |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
>     +---------------+---------------+---------------+---------------+
>    0| 0x80          | 0x21          | 0x00          | 0x05          |
>     +---------------+---------------+---------------+---------------+
>    4| 0x00          | 0x00          | 0x00          | 0x00          |
>     +---------------+---------------+---------------+---------------+
>    8| 0x00          | 0x00          | 0x00          | 0x11          |
>     +---------------+---------------+---------------+---------------+
>   12| 0x00          | 0x00          | 0x00          | 0x00          |
>     +---------------+---------------+---------------+---------------+
>   16| 0x00          | 0x00          | 0x00          | 0x00          |
>     +---------------+---------------+---------------+---------------+
>   20| 0x00          | 0x00          | 0x00          | 0x00          |
>     +---------------+---------------+---------------+---------------+
>   24| 0x50 ('P')    | 0x4c ('L')    | 0x41 ('A')    | 0x49 ('I')    |
>     +---------------+---------------+---------------+---------------+
>   28| 0x4e ('N')    | 0x00          | 0x75 ('u')    | 0x73 ('s')    |
>     +---------------+---------------+---------------+---------------+
>   32| 0x65 ('e')    | 0x72 ('r')    | 0x00          | 0x70 ('p')    |
>     +---------------+---------------+---------------+---------------+
>   36| 0x65 ('e')    | 0x6e ('n')    | 0x63 ('c')    | 0x69 ('i')    |
>     +---------------+---------------+---------------+---------------+
>   40| 0x6c ('l')    |
>     +---------------+
>     Total 41 bytes (24 bytes header, 5 bytes key and 12 value)
>
> Field        (offset) (value)
> Magic        (0)    : 0x80
> Opcode       (1)    : 0x21
> Key length   (2,3)  : 0x0005
> Extra length (4)    : 0x00
> Data type    (5)    : 0x00
> Vbucket      (6,7)  : 0x0000
> Total body   (8-11) : 0x00000011
> Opaque       (12-15): 0x00000000
> CAS          (16-23): 0x00000000
>
> What could be wrong?
>  *  In my memcached-sasl-db, should I store userName:password or 
> username@hostName:password?
>  *  Does the TotalLength of the message include the NULL bytes being added 
> between authKey/authData and username/password?
>  *  In my authData should I use \0x00userName\0x00password or 
> \0x00userName@hostNname\0x00password?
>  *  Any other suggestions?
>
> Best regards,
> Jiuming
>
> Below are Logs and configurations for your references
>
> memcached logs: Below you will find that I did a LIST_MECH(0x20) and then did 
> a SASL_AUTH(0X21)
>
> LRU crawler thread sleeping
> <28 new binary client connection.
> 28: going from conn_new_cmd to conn_waiting
> 28: going from conn_waiting to conn_read
> 28: going from conn_read to conn_closing
> <28 connection closed.
> 28: going from conn_closing to conn_closed
> <28 new binary client connection.
> 28: going from conn_new_cmd to conn_waiting
> 28: going from conn_waiting to conn_read
> 28: going from conn_read to conn_parse_cmd
> <28 Read binary protocol data:
> <28    0x80 0x20 0x00 0x00
> <28    0x00 0x00 0x00 0x00
> <28    0x00 0x00 0x00 0x00
> <28    0x00 0x00 0x00 0x01
> <28    0x00 0x00 0x00 0x00
> <28    0x00 0x00 0x00 0x00
> authenticated() in cmd 0x20 is true
> >28 Writing bin response:
> >28   0x81 0x20 0x00 0x00
> >28   0x00 0x00 0x00 0x00
> >28   0x00 0x00 0x00 0x15
> >28   0x00 0x00 0x00 0x01
> >28   0x00 0x00 0x00 0x00
> >28   0x00 0x00 0x00 0x00
> 28: going from conn_parse_cmd to conn_mwrite
> 28: going from conn_mwrite to conn_new_cmd
> 28: going from conn_new_cmd to conn_waiting
> 28: going from conn_waiting to conn_read
> 28: going from conn_read to conn_parse_cmd
> <28 Read binary protocol data:
> <28    0x80 0x21 0x00 0x05
> <28    0x00 0x00 0x00 0x00
> <28    0x00 0x00 0x00 0x14
> <28    0x00 0x00 0x00 0x02
> <28    0x00 0x00 0x00 0x00
> <28    0x00 0x00 0x00 0x00
> authenticated() in cmd 0x21 is true
> 28: going from conn_parse_cmd to conn_nread
> mech:  ``PLAIN'' with 15 bytes of data
> SASL (severity 2): Password verification failed
> sasl result code:  -20
> Unknown sasl response:  -20
> >28 Writing an error: Auth failure.
> >28 Writing bin response:
> >28   0x81 0x21 0x00 0x00
> >28   0x00 0x00 0x00 0x20
> >28   0x00 0x00 0x00 0x0d
> >28   0x00 0x00 0x00 0x02
> >28   0x00 0x00 0x00 0x00
> >28   0x00 0x00 0x00 0x00
>
>
> My memcached.conf 
>
> % cat memcached.conf
> mech_list: plain
> log_level: 5
> sasldb_path: /tmp/memcached-sasl-db
>
> My /tmp/memcached-sasl-db
>
> % cat memcached-sasl-db
> myname@myHostName:mypass
>
> My exports:
>
> export MEMCACHED_SASL_PWDB=/tmp/memcached-sasl-db
> export SASL_CONF_PATH=`pwd`/memcached.conf
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups 
> "memcached" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"memcached" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to