Changeset 678 in openpam for trunk/lib/liboath/oath_key.c
- Timestamp:
- Mar 18, 2013, 9:34:29 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/liboath/oath_key.c
r646 r678 57 57 */ 58 58 struct oath_key * 59 oath_key_alloc( size_t extra)59 oath_key_alloc(void) 60 60 { 61 61 struct oath_key *key; 62 62 63 if ((key = calloc(1, sizeof *key + extra)) == NULL) {63 if ((key = calloc(1, sizeof *key)) == NULL) { 64 64 openpam_log(PAM_LOG_ERROR, "malloc(): %s", strerror(errno)); 65 65 return (NULL); 66 66 } 67 key->datalen = extra;68 67 /* XXX should try to wire */ 69 68 return (key); … … 78 77 79 78 if (key != NULL) { 80 memset(key, 0, sizeof *key + key->datalen);79 memset(key, 0, sizeof *key); 81 80 free(key); 82 81 } … … 95 94 char *e; 96 95 97 /* 98 * The URI string contains the label, the base32-encoded key and 99 * some fluff, so the combined length of the label and key can 100 * never exceed the length of the URI string. 101 */ 102 if ((key = oath_key_alloc(strlen(uri))) == NULL) 96 if ((key = oath_key_alloc()) == NULL) 103 97 return (NULL); 104 98 … … 124 118 if ((q = strchr(p, '?')) == NULL) 125 119 goto invalid; 126 key->label = (char *)key->data;127 key->labellen = (q - p) + 1;120 if ((key->labellen = q - p + 1) > sizeof key->label) 121 goto invalid; 128 122 memcpy(key->label, p, q - p); 129 123 key->label[q - p] = '\0'; … … 146 140 /* dupe */ 147 141 goto invalid; 148 /* base32-encoded key - multiple of 40 bits */ 149 if ((r - q) % 8 != 0 || 150 base32_declen(r - q) > OATH_MAX_KEYLEN) 151 goto invalid; 152 key->key = key->data + key->labellen; 153 key->keylen = key->datalen - key->labellen; 142 key->keylen = sizeof key->key; 154 143 if (base32_dec(q, r - q, key->key, &key->keylen) != 0) 155 144 goto invalid; … … 315 304 struct oath_key *key; 316 305 317 if ((key = oath_key_alloc( DUMMY_LABELLEN + DUMMY_KEYLEN)) == NULL)306 if ((key = oath_key_alloc()) == NULL) 318 307 return (NULL); 319 308 key->mode = mode; … … 322 311 key->timestep = 30; 323 312 key->hash = hash; 324 key->label = (char *)key->data;325 313 memcpy(key->label, DUMMY_LABEL, DUMMY_LABELLEN); 326 key-> key = key->data +DUMMY_LABELLEN;314 key->labellen = DUMMY_LABELLEN; 327 315 key->keylen = DUMMY_KEYLEN; 328 316 return (key);
Note: See TracChangeset
for help on using the changeset viewer.