|
Lines 302-314
do_convert_private_ssh2_from_blob(u_char
Link Here
|
| 302 |
return key; |
302 |
return key; |
| 303 |
} |
303 |
} |
| 304 |
|
304 |
|
|
|
305 |
static int |
| 306 |
get_line(FILE *fp, char *line, size_t len) |
| 307 |
{ |
| 308 |
int c; |
| 309 |
size_t pos = 0; |
| 310 |
|
| 311 |
line[0] = '\0'; |
| 312 |
while ((c = fgetc(fp)) != EOF) { |
| 313 |
if (pos >= len - 1) { |
| 314 |
fprintf(stderr, "input line too long.\n"); |
| 315 |
exit(1); |
| 316 |
} |
| 317 |
switch(c) { |
| 318 |
case '\r': |
| 319 |
c = fgetc(fp); |
| 320 |
if (c != EOF && c != '\n' && ungetc(c, fp) == EOF) { |
| 321 |
fprintf(stderr, "unget: %s\n", strerror(errno)); |
| 322 |
exit(1); |
| 323 |
} |
| 324 |
return pos; |
| 325 |
case '\n': |
| 326 |
return pos; |
| 327 |
} |
| 328 |
line[pos++] = c; |
| 329 |
line[pos] = '\0'; |
| 330 |
} |
| 331 |
return pos; |
| 332 |
} |
| 333 |
|
| 305 |
static void |
334 |
static void |
| 306 |
do_convert_from_ssh2(struct passwd *pw) |
335 |
do_convert_from_ssh2(struct passwd *pw) |
| 307 |
{ |
336 |
{ |
| 308 |
Key *k; |
337 |
Key *k; |
| 309 |
int blen; |
338 |
int blen; |
| 310 |
u_int len; |
339 |
u_int len; |
| 311 |
char line[1024], *p; |
340 |
char line[1024]; |
| 312 |
u_char blob[8096]; |
341 |
u_char blob[8096]; |
| 313 |
char encoded[8096]; |
342 |
char encoded[8096]; |
| 314 |
struct stat st; |
343 |
struct stat st; |
|
Lines 327-338
do_convert_from_ssh2(struct passwd *pw)
Link Here
|
| 327 |
exit(1); |
356 |
exit(1); |
| 328 |
} |
357 |
} |
| 329 |
encoded[0] = '\0'; |
358 |
encoded[0] = '\0'; |
| 330 |
while (fgets(line, sizeof(line), fp)) { |
359 |
while ((blen = get_line(fp, line, sizeof(line))) != -1) { |
| 331 |
if (!(p = strchr(line, '\n'))) { |
360 |
if (line[blen - 1] == '\\') |
| 332 |
fprintf(stderr, "input line too long.\n"); |
|
|
| 333 |
exit(1); |
| 334 |
} |
| 335 |
if (p > line && p[-1] == '\\') |
| 336 |
escaped++; |
361 |
escaped++; |
| 337 |
if (strncmp(line, "----", 4) == 0 || |
362 |
if (strncmp(line, "----", 4) == 0 || |
| 338 |
strstr(line, ": ") != NULL) { |
363 |
strstr(line, ": ") != NULL) { |
|
Lines 349-355
do_convert_from_ssh2(struct passwd *pw)
Link Here
|
| 349 |
/* fprintf(stderr, "escaped: %s", line); */ |
374 |
/* fprintf(stderr, "escaped: %s", line); */ |
| 350 |
continue; |
375 |
continue; |
| 351 |
} |
376 |
} |
| 352 |
*p = '\0'; |
|
|
| 353 |
strlcat(encoded, line, sizeof(encoded)); |
377 |
strlcat(encoded, line, sizeof(encoded)); |
| 354 |
} |
378 |
} |
| 355 |
len = strlen(encoded); |
379 |
len = strlen(encoded); |