浏览代码

- rearranged structure fields and removed DIGEST_DOMAIN again (now used by default)

Jan Janak 22 年之前
父节点
当前提交
db4a74ca99
共有 3 个文件被更改,包括 46 次插入46 次删除
  1. 5 5
      parser/digest/digest.c
  2. 22 27
      parser/digest/digest_parser.c
  3. 19 14
      parser/digest/digest_parser.h

+ 5 - 5
parser/digest/digest.c

@@ -115,7 +115,7 @@ dig_err_t check_dig_cred(dig_cred_t* _c)
 	dig_err_t res = E_DIG_OK;
 
 	     /* Username must be present */
-	if (_c->username.s == 0) res |= E_DIG_USERNAME;
+	if (_c->username.whole.s == 0) res |= E_DIG_USERNAME;
 
 	     /* Realm must be present */
 	if (_c->realm.s == 0) res |= E_DIG_REALM;
@@ -151,10 +151,10 @@ void print_cred(dig_cred_t* _c)
 {
 	printf("===Digest credentials===\n");
 	if (_c) {
-		printf("Username  = \'%.*s\'\n", _c->username.len, _c->username.s);
-#ifdef DIGEST_DOMAIN
-		printf("Domain    = \'%.*s\'\n", _c->domain.len, _c->domain.s);
-#endif
+		printf("Username\n");
+		printf("+--whole  = \'%.*s\'\n", _c->username.whole.len, _c->username.whole.s);
+		printf("+--user   = \'%.*s\'\n", _c->username.user.len, _c->username.user.s);
+		printf("\\--domain = \'%.*s\'\n", _c->username.domain.len, _c->username.domain.s);
 		printf("Realm     = \'%.*s\'\n", _c->realm.len, _c->realm.s);
 		printf("Nonce     = \'%.*s\'\n", _c->nonce.len, _c->nonce.s);
 		printf("URI       = \'%.*s\'\n", _c->uri.len, _c->uri.s);

+ 22 - 27
parser/digest/digest_parser.c

@@ -186,18 +186,18 @@ static inline int parse_digest_param(str* _s, dig_cred_t* _c)
 	      * body content will be stored
 	      */
 	switch(t) {
-	case PAR_USERNAME:  ptr = &(_c->username);    break;
-	case PAR_REALM:     ptr = &(_c->realm);       break;
-	case PAR_NONCE:     ptr = &(_c->nonce);       break;
-	case PAR_URI:       ptr = &(_c->uri);         break;
-	case PAR_RESPONSE:  ptr = &(_c->response);    break;
-	case PAR_CNONCE:    ptr = &(_c->cnonce);      break;
-	case PAR_OPAQUE:    ptr = &(_c->opaque);      break;
-	case PAR_QOP:       ptr = &(_c->qop.qop_str); break;
-	case PAR_NC:        ptr = &(_c->nc);          break;
-	case PAR_ALGORITHM: ptr = &(_c->alg.alg_str); break;
-	case PAR_OTHER:     ptr = &dummy;             break;
-	default:            ptr = &dummy;             break;
+	case PAR_USERNAME:  ptr = &(_c->username.whole);  break;
+	case PAR_REALM:     ptr = &(_c->realm);           break;
+	case PAR_NONCE:     ptr = &(_c->nonce);           break;
+	case PAR_URI:       ptr = &(_c->uri);             break;
+	case PAR_RESPONSE:  ptr = &(_c->response);        break;
+	case PAR_CNONCE:    ptr = &(_c->cnonce);          break;
+	case PAR_OPAQUE:    ptr = &(_c->opaque);          break;
+	case PAR_QOP:       ptr = &(_c->qop.qop_str);     break;
+	case PAR_NC:        ptr = &(_c->nc);              break;
+	case PAR_ALGORITHM: ptr = &(_c->alg.alg_str);     break;
+	case PAR_OTHER:     ptr = &dummy;                 break;
+	default:            ptr = &dummy;                 break;
 	}
 
 	     /* If the first character is qoute, it is
@@ -264,29 +264,26 @@ static inline void parse_algorithm(struct algorithm* _a)
 	}	
 }
 
-#ifdef DIGEST_DOMAIN
+
 /*
- * Parse username for domain
+ * Parse username for user and domain parts
  */
-static inline void parse_domain(struct dig_cred* _c)
+static inline void parse_username(struct username* _u)
 {
 	char* d;
 
-	if (_c->username.len <= 2) return;
+	_u->user = _u->whole;
+	if (_u->whole.len <= 2) return;
 
-	d = q_memchr(_c->username.s, '@', _c->username.len);
+	d = q_memchr(_u->whole.s, '@', _u->whole.len);
 
 	if (d) {
-		_c->domain.s = d;
-		_c->domain.len = _c->username.len - (d - _c->username.s) - 1;
-		_c->username.len = d - _c->username.s;
+		_u->domain.s = d;
+		_u->domain.len = _u->whole.len - (d - _u->whole.s) - 1;
+		_u->user.len = d - _u->user.s;
 	}
 }
 
-#endif
-
-
-
 
 /*
  * Parse Digest credentials parameter, one by one
@@ -325,9 +322,7 @@ static inline int parse_digest_params(str* _s, dig_cred_t* _c)
 		parse_algorithm(&(_c->alg));
 	}
 
-#ifdef DIGEST_DOMAIN
-	parse_domain(_c);
-#endif
+	parse_username(&_c->username);
 
 	return 0;
 }

+ 19 - 14
parser/digest/digest_parser.h

@@ -67,24 +67,29 @@ struct qp {
 };
 
 
+/* Username structure */
+struct username {
+	str whole;        /* The whole username parameter value */
+	str user;         /* username part only */
+	str domain;       /* Domain part only */
+};
+
+
 /*
  * Parsed digest credentials
  */
 typedef struct dig_cred {
-	str username;         /* Username */
-#ifdef DIGEST_DOMAIN
-	str domain;           /* Domain contained in username */
-#endif
-	str realm;            /* Realm */
-	str nonce;            /* Nonce value */
-	str uri;              /* URI */
-	str response;         /* Response string */
-	str algorithm;        /* Algorithm in string representation */
-	struct algorithm alg; /* Type of algorithm used */
-	str cnonce;           /* Cnonce value */
-	str opaque;           /* Opaque data string */
-	struct qp qop;        /* Quality Of Protection */
-	str nc;               /* Nonce count parameter */
+	struct username username;   /* Username */
+	str realm;                  /* Realm */
+	str nonce;                  /* Nonce value */
+	str uri;                    /* URI */
+	str response;               /* Response string */
+	str algorithm;              /* Algorithm in string representation */
+	struct algorithm alg;       /* Type of algorithm used */
+	str cnonce;                 /* Cnonce value */
+	str opaque;                 /* Opaque data string */
+	struct qp qop;              /* Quality Of Protection */
+	str nc;                     /* Nonce count parameter */
 } dig_cred_t;