rendered paste bodystatic int_http_digest_auth(conn_t *conn, const char *hdr, const char *usr, const char *pwd, struct digest *digest, const char *uri){ char **ap, *argv[10], buf[256], pval[64]; int i, argc; char *inp = buf; char skey[HASHHEXLEN]; char response[256]; sscanf(digest->header, "WWW-Authenticate: Digest %256[^\r\n]", buf); /* This is stolen almost directly out of strsep(3) */ for (ap = argv; (*ap = strsep(&inp, ", ")) != NULL;) if (**ap != '\0') if (++ap >= &argv[10]) break; argc = ap - argv; for (i = 0; i < argc; i++) { if (sscanf(argv[i], "realm=\"%256[^\"]\"", pval) > 0) { fprintf(stderr, "%s(): realm=%s\n", __func__, pval); digest->realm = pval; } else if (sscanf(argv[i], "nonce=\"%256[^\"]\"", pval) > 0) { fprintf(stderr, "%s(): nonce=%s\n", __func__, pval); digest->nonce = strdup(pval); } else if (sscanf(argv[i], "nc=\"%256[^\"]\"", pval) > 0) { fprintf(stderr, "%s(): =%s\n", __func__, pval); strncpy(digest->nc, pval, sizeof(digest->nc)); } else if (sscanf(argv[i], "algorithm=%256s", pval) > 0) { fprintf(stderr, "%s(): alg=%s\n", __func__, pval); digest->alg = pval; } else if (sscanf(argv[i], "cnonce=\"%256[^\"]\"", pval) > 0) { fprintf(stderr, "%s(): cnone=%s\n", __func__, pval); digest->cnonce = pval; } else if (sscanf(argv[i], "qop=\"%256[^\"]\"", pval) > 0) { fprintf(stderr, "%s(): qop=%s\n", __func__, pval); digest->qop = pval; } } _http_digest_calc_ha1(skey, usr, pwd, digest->realm, digest->nonce, digest->cnonce, digest->alg); fprintf(stderr, "%s(): skey=%s\n", __func__, skey); fprintf(stderr, "%s(): nonce=%s\n", __func__, digest->nonce); _http_digest_calc_response(response, digest->nonce, digest->nc, digest->cnonce, digest->qop, uri, digest->entity, skey); fprintf(stderr, "%s(): %s\n", __func__, digest->header); fprintf(stderr, "%s(): username: %s, passwd: %s\n", __func__, usr, pwd); fprintf(stderr, "%s(): Digest method is not implemented yet\n", __func__); return (-1); }