1 diff -ur checkpolicy-1.4.orig/checkpolicy.c checkpolicy-1.4/checkpolicy.c
2 --- checkpolicy-1.4.orig/checkpolicy.c 2003-12-01 14:24:57.000000000 -0500
3 +++ checkpolicy-1.4/checkpolicy.c 2003-12-15 02:50:48.000000000 -0500
5 extern queue_t id_queue;
6 extern unsigned int policydb_errors;
7 extern unsigned long policydb_lineno;
8 +extern unsigned long source_lineno;
9 +extern char source_file[];
10 extern unsigned int pass;
11 extern unsigned int ss_initialized;
17 + source_file[0] = '\0';
21 if (yyparse() || policydb_errors) {
22 diff -ur checkpolicy-1.4.orig/policy_parse.y checkpolicy-1.4/policy_parse.y
23 --- checkpolicy-1.4.orig/policy_parse.y 2003-10-24 10:23:09.000000000 -0400
24 +++ checkpolicy-1.4/policy_parse.y 2003-12-15 02:30:59.000000000 -0500
26 policydb_t *policydbp;
30 +unsigned int curline;
32 extern unsigned long policydb_lineno;
34 diff -ur checkpolicy-1.4.orig/policy_scan.l checkpolicy-1.4/policy_scan.l
35 --- checkpolicy-1.4.orig/policy_scan.l 2003-06-26 13:23:12.000000000 -0400
36 +++ checkpolicy-1.4/policy_scan.l 2003-12-15 02:51:18.000000000 -0500
38 static char linebuf[2][255];
39 static unsigned int lno = 0;
41 +char source_file[255];
42 +unsigned long source_lineno = 1;
44 unsigned long policydb_lineno = 1;
46 unsigned int policydb_errors = 0;
48 linebuf[lno][254] = 0;
54 clone { return(CLONE); }
56 {letter}({letter}|{digit}|_)* { return(IDENTIFIER); }
57 {letter}({letter}|{digit}|_|"."|"-")* { return(USER_IDENTIFIER); }
58 {digit}{digit}* { return(NUMBER); }
59 +#line[ ]1[ ]\"[^\n]*\" { source_lineno = 1; strncpy(source_file, yytext+9, 255); source_file[strlen(source_file)-1] = '\0'; }
60 +#line[ ]{digit}{digit}* { source_lineno = atoi(yytext+6)-1; }
61 #[^\n]* { /* delete comments */ }
62 [ \t\f]+ { /* delete whitespace */ }
63 "==" { return(EQUALS); }
66 int yyerror(char *msg)
69 + fprintf(stderr, "%s:%ld:",
70 + source_file, source_lineno);
72 + fprintf(stderr, "(unknown source)::");
73 fprintf(stderr, "ERROR '%s' at token '%s' on line %ld:\n%s\n%s\n",
81 + fprintf(stderr, "%s:%ld:",
82 + source_file, source_lineno);
84 + fprintf(stderr, "(unknown source)::");
85 fprintf(stderr, "WARNING '%s' at token '%s' on line %ld:\n%s\n%s\n",
89 linebuf[0], linebuf[1]);