Parse extensions.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15892 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -49,6 +49,7 @@ struct entry {
|
||||
char *pw_end;
|
||||
char *flags;
|
||||
char *generation;
|
||||
char *extensions;
|
||||
};
|
||||
|
||||
static char *
|
||||
@@ -309,6 +310,49 @@ parse_generation(char *str, GENERATION **gen)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
parse_extensions(char *str, HDB_extensions **e)
|
||||
{
|
||||
char *p;
|
||||
int ret;
|
||||
|
||||
if(strcmp(str, "-") == 0 || *str == '\0') {
|
||||
*e = NULL;
|
||||
return 0;
|
||||
}
|
||||
*e = calloc(1, sizeof(**e));
|
||||
|
||||
p = strsep(&str, ":");
|
||||
|
||||
while (p) {
|
||||
HDB_extension ext;
|
||||
ssize_t len;
|
||||
void *d;
|
||||
|
||||
len = strlen(p);
|
||||
d = malloc(len);
|
||||
|
||||
len = hex_decode(p, d, len);
|
||||
if (len < 0)
|
||||
return -1;
|
||||
|
||||
ret = decode_HDB_extension(d, len, &ext, NULL);
|
||||
free(d);
|
||||
if (ret)
|
||||
return -1;
|
||||
d = realloc((*e)->val, ((*e)->len + 1) * sizeof((*e)->val[0]));
|
||||
if (d == NULL)
|
||||
abort();
|
||||
(*e)->val = d;
|
||||
(*e)->val[(*e)->len] = ext;
|
||||
(*e)->len++;
|
||||
|
||||
p = strsep(&str, ":");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Parse the dump file in `filename' and create the database (merging
|
||||
@@ -353,7 +397,12 @@ doit(const char *filename, int mergep)
|
||||
while(fgets(s, sizeof(s), f) != NULL) {
|
||||
ret = 0;
|
||||
line++;
|
||||
e.principal = s;
|
||||
|
||||
p = s;
|
||||
while (isspace((unsigned char)*p))
|
||||
p++;
|
||||
|
||||
e.principal = p;
|
||||
for(p = s; *p; p++){
|
||||
if(*p == '\\')
|
||||
p++;
|
||||
@@ -394,6 +443,9 @@ doit(const char *filename, int mergep)
|
||||
e.generation = p;
|
||||
p = skip_next(p);
|
||||
|
||||
e.extensions = p;
|
||||
p = skip_next(p);
|
||||
|
||||
memset(&ent, 0, sizeof(ent));
|
||||
ret = krb5_parse_name(context, e.principal, &ent.principal);
|
||||
if(ret) {
|
||||
@@ -471,6 +523,13 @@ doit(const char *filename, int mergep)
|
||||
continue;
|
||||
}
|
||||
|
||||
if(parse_extensions(e.extensions, &ent.extensions) == -1) {
|
||||
fprintf (stderr, "%s:%d:error parsing extension (%s)\n",
|
||||
filename, line, e.extensions);
|
||||
hdb_free_entry (context, &ent);
|
||||
continue;
|
||||
}
|
||||
|
||||
ret = db->hdb_store(context, db, HDB_F_REPLACE, &ent);
|
||||
hdb_free_entry (context, &ent);
|
||||
if (ret) {
|
||||
|
Reference in New Issue
Block a user