| 907 | } |
| 908 | |
| 909 | void |
| 910 | hstcpsvr_worker::do_authorization(char *start, char *finish, |
| 911 | hstcpsvr_conn& conn) |
| 912 | { |
| 913 | /* auth type */ |
| 914 | char *const authtype_begin = start; |
| 915 | read_token(start, finish); |
| 916 | char *const authtype_end = start; |
| 917 | const size_t authtype_len = authtype_end - authtype_begin; |
| 918 | skip_one(start, finish); |
| 919 | /* key */ |
| 920 | char *const key_begin = start; |
| 921 | read_token(start, finish); |
| 922 | char *const key_end = start; |
| 923 | const size_t key_len = key_end - key_begin; |
| 924 | authtype_end[0] = 0; |
| 925 | key_end[0] = 0; |
| 926 | char *wp = key_begin; |
| 927 | unescape_string(wp, key_begin, key_end); |
| 928 | if (authtype_len != 1 || authtype_begin[0] != '1') { |
| 929 | return conn.dbcb_resp_short(3, "authtype"); |
| 930 | } |
| 931 | if (cshared.plain_secret.size() == key_len && |
| 932 | memcmp(cshared.plain_secret.data(), key_begin, key_len) == 0) { |
| 933 | conn.authorized = true; |
| 934 | } else { |
| 935 | conn.authorized = false; |
| 936 | } |
| 937 | if (!conn.authorized) { |
| 938 | return conn.dbcb_resp_short(3, "unauth"); |
| 939 | } else { |
| 940 | return conn.dbcb_resp_short(0, ""); |
| 941 | } |
| 942 | } |
| 943 | |
| 944 | hstcpsvr_worker_ptr |
| 945 | hstcpsvr_worker_i::create(const hstcpsvr_worker_arg& arg) |
nothing calls this directly
no test coverage detected