diff --git a/nss_role.c b/nss_role.c index 9de9ab9..aceee05 100644 --- a/nss_role.c +++ b/nss_role.c @@ -17,9 +17,9 @@ enum nss_status _nss_role_initgroups_dyn(char *user, gid_t main_group, enum nss_status ret = NSS_STATUS_SUCCESS; pthread_mutex_lock(&mutex); - struct librole_graph G; + struct librole_graph G = {}; int i, result; - librole_group_collector col, ans; + librole_group_collector col = {}, ans = {}; result = librole_graph_init(&G); if (result != LIBROLE_OK) { diff --git a/parser.c b/parser.c index d543f51..234bea8 100644 --- a/parser.c +++ b/parser.c @@ -204,7 +204,7 @@ static int parse_line(char *line, struct librole_graph *G) comment = select_line_part(line, len, &last, &i, ':'); if (comment && *last == '\0') - return result; + goto libnss_role_parse_line_error; drop_quotes(&last); result = librole_get_gid(last, &role.gid); @@ -255,8 +255,10 @@ int librole_reading(const char *s, struct librole_graph *G) return LIBROLE_OUT_OF_RANGE; f = fopen(s, "r"); - if (!f) - return LIBROLE_IO_ERROR; + if (!f) { + result = LIBROLE_IO_ERROR; + goto libnss_role_reading_out_free; + } while(1) { c = fgetc(f); @@ -287,8 +289,9 @@ int librole_reading(const char *s, struct librole_graph *G) } libnss_role_reading_out: - free(str); fclose(f); +libnss_role_reading_out_free: + free(str); return result; }