Main Page   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

policy-dump.c

Go to the documentation of this file.
00001 /****************************************************************************/
00002 /****************************************************************************/
00007 /****************************************************************************/
00008 
00009 #include "policy-dump.h"
00010 #include "memory.h"
00011 #include <stdio.h>
00012 
00013 void dumpOutput(FILE *fd, POLICY_OUTPUT *o, unsigned int tabs, char freeme){
00014   unsigned int i;
00015   if(!o) return;
00016   if(fd){
00017     for(i=0;i<tabs;i++){
00018       fprintf(fd, ".");
00019     }
00020     fprintf(fd, "OUTPUT(%s, %s", o->name, o->args);
00021     if(o->eof) fprintf(fd, ", EOF)\n");
00022     else fprintf(fd, ")\n");
00023     dumpTest(fd, o->tNext, tabs, freeme);
00024     dumpOutput(fd, o->oNext, tabs, freeme);
00025     if(freeme){
00026       free_safe(o->name);
00027       free_safe(o->args);
00028       free_safe(o);
00029     }
00030   }
00031   else if(freeme){
00032     dumpTest(fd, o->tNext, 0, freeme);
00033     dumpOutput(fd, o->oNext, tabs, freeme);
00034     free_safe(o->name);
00035     free_safe(o->args);
00036     free_safe(o);
00037   }
00038 }
00039 
00040 void dumpProto(FILE *fd, POLICY_PROTO *p, unsigned int tabs, char freeme){
00041   unsigned int i;
00042   if(!p) return;
00043   if(fd){
00044     for(i=0;i<tabs;i++){
00045       fprintf(fd, ".");
00046     }
00047     fprintf(fd, "PROTO(%lx, %s)\n", p->proto_num, p->proto_name);
00048     dumpTest(fd, p->test, tabs+2, freeme);
00049     for(i=0;i<tabs;i++){
00050       fprintf(fd, ".");
00051     }
00052     fprintf(fd, "END_PROTO\n");
00053     dumpProto(fd, p->next, tabs, freeme);
00054     if(freeme){
00055       free_safe(p->proto_name);
00056       free_safe(p);
00057     }
00058   }
00059   else if(freeme){
00060     dumpTest(fd, p->test, 0, freeme);
00061     dumpProto(fd, p->next, 0, freeme);
00062     free_safe(p->proto_name);
00063     free_safe(p);
00064   }
00065 }
00066 
00067 void dumpTest(FILE *fd, POLICY_TEST *t, unsigned int tabs, char freeme){
00068   unsigned int i;
00069   unsigned long ul;
00070 
00071   if(!t) return;
00072   if(fd){
00073     for(i=0;i<tabs;i++){
00074       fprintf(fd, ".");
00075     }
00076     if(t->test_type==POLICY_TEST_TYPE_MASKED){
00077       fprintf(fd, "TEST(p_name=%s,p_num=%lx,v=",t->p_name, t->p_num);
00078       for(ul=0;ul<t->m_len;ul++){
00079         fprintf(fd, "%2.2hhx",(t->m_val)[ul]);
00080       }
00081       fprintf(fd, ",m=");
00082       for(ul=0;ul<t->m_len;ul++){
00083         fprintf(fd, "%2.2hhx",(t->m_mask)[ul]);
00084       }
00085       fprintf(fd, ",o=%lx,l=%lx,t=%c",t->m_offset,t->m_len,t->m_type);
00086     }
00087     else if(t->test_type==POLICY_TEST_TYPE_VAR){
00088       fprintf(fd, "TEST(p_name=%s,p_num=%lx,v=%lx,vt=%c,tt=%c%c",t->p_name,t->p_num,t->v_val,t->v_vType,t->v_tType[0],t->v_tType[1]);
00089     }
00090     else if(t->test_type==POLICY_TEST_TYPE_ANALYSIS){
00091       fprintf(fd, "ANALYSIS(%s, %s", t->a_name, t->a_args);
00092     }
00093     else {
00094       fprintf(fd, "TEST - UNKNOWN TYPE ");
00095     }
00096     fprintf(fd, ",p_num=%lx,p_name=%s)\n",t->p_num,t->p_name);
00097     dumpResult(fd, t->result, tabs+2, freeme);
00098     for(i=0;i<tabs;i++){
00099       fprintf(fd, ".");
00100     }
00101     if(t->test_type==POLICY_TEST_TYPE_ANALYSIS){
00102       fprintf(fd, "END_ANALYSIS\n");
00103     }
00104     else {
00105       fprintf(fd, "END_TEST\n");
00106     }
00107     if(freeme){
00108       if(t->test_type==POLICY_TEST_TYPE_MASKED){
00109         free_safe(t->m_val);
00110         free_safe(t->m_mask);
00111       }
00112       free_safe(t->p_name);
00113       free_safe(t);
00114     }
00115   }
00116   else if(freeme){
00117     dumpResult(fd, t->result, 0, freeme);
00118     if(t->test_type==POLICY_TEST_TYPE_MASKED){
00119       free_safe(t->m_val);
00120       free_safe(t->m_mask);
00121     }
00122     free_safe(t->p_name);
00123     free_safe(t);
00124   }
00125 }
00126 
00127 void dumpResult(FILE *fd, POLICY_RESULT *r, unsigned int tabs, char freeme){
00128   unsigned int i;
00129   if(!r) return;
00130   if(fd){
00131     for(i=0;i<tabs;i++){
00132       fprintf(fd, ".");
00133     }
00134     fprintf(fd, "RESULT(%s,%hu)\n",r->sResult,r->iResult);
00135     dumpOutput(fd, r->match, tabs+2, freeme);
00136     for(i=0;i<tabs;i++){
00137       fprintf(fd, ".");
00138     }
00139     fprintf(fd, "END_RESULT\n");
00140     dumpResult(fd, r->next, tabs, freeme);
00141     if(freeme){
00142       free_safe(r->sResult);
00143       free_safe(r);
00144     }
00145   }
00146   else if(freeme){
00147     dumpOutput(fd, r->match, 0, freeme);
00148     dumpResult(fd, r->next, tabs, freeme);
00149     free_safe(r->sResult);
00150     free_safe(r);
00151   }
00152 }
00153 
00154 void dumpInit(FILE *fd, POLICY_INITS *i, unsigned int tabs, char freeme){
00155   unsigned int u;
00156   if(!i) return;
00157   if(fd){
00158     for(u=0;u<tabs;u++){
00159       fprintf(fd, ".");
00160     }
00161     fprintf(fd, "INIT(%s",i->plugname);
00162     for(u=0;u<i->string_count;u++){
00163       fprintf(fd, ",%s",(i->init_string)[u]);
00164     }
00165     fprintf(fd, ")\n");
00166     dumpInit(fd, i->next, tabs, freeme);  
00167     if(freeme){
00168       for(u=0;u<i->string_count;u++){
00169         free_safe((i->init_string)[u]);
00170       }
00171       free_safe(i);
00172     }
00173   }
00174   else if(freeme){
00175     dumpInit(fd, i->next, 0, freeme);
00176     for(u=0;u<i->string_count;u++){
00177       free_safe((i->init_string)[u]);
00178     }
00179     free_safe(i);
00180   }
00181 }
00182 
00183 void dumpInput(FILE *fd, POLICY_INPUT *i, unsigned int tabs, char freeme){
00184   unsigned int u;
00185   if(!i) return;
00186   if(fd){
00187     for(u=0;u<tabs;u++){
00188       fprintf(fd, ".");
00189     }
00190     fprintf(fd, "INPUT(%s,%hu,%s,%u)\n", i->plugname, i->weight, i->sSrc, i->iSrc);
00191     dumpInput(fd, i->next, tabs, freeme);
00192     if(freeme){
00193       free_safe(i->plugname);
00194       free_safe(i->sSrc);
00195       free_safe(i);
00196     }
00197   }
00198   else if(freeme){
00199     dumpInput(fd, i->next, 0, freeme);
00200     free_safe(i->plugname);
00201     free_safe(i->sSrc);
00202     free_safe(i);
00203   }
00204 }
00205 
00206 void dumpPolicy(FILE *fd, POLICY_HEAD *h, char freeme){
00207   if(!h) return;
00208   if(fd){
00209     fprintf(fd, "POLICY");
00210     fprintf(fd, "..INITS\n");
00211     dumpInit(fd, h->inits, 4, freeme);
00212     fprintf(fd, "..END_INITS\n..INPUTS\n");
00213     dumpInput(fd, h->input, 4, freeme);
00214     fprintf(fd, "..END_INPUTS\n..DEFAULTS\n");
00215     dumpOutput(fd, h->def, 4, freeme);
00216     fprintf(fd, "..END_DEFAULTS\n..PROTOS\n");
00217     dumpProto(fd, h->top, 4, freeme);
00218     fprintf(fd, "..END_PROTOS\nEND_POLICY\n");
00219     if(freeme) free_safe(h);
00220   }
00221   else if(freeme){
00222     dumpInit(fd, h->inits, 0, freeme);
00223     dumpInput(fd, h->input, 0, freeme);
00224     dumpOutput(fd, h->def, 0, freeme);
00225     dumpProto(fd, h->top, 0, freeme);
00226     free_safe(h);
00227   }
00228 }

Generated at Mon Jul 8 15:16:50 2002 for RUBICON by doxygen1.2.1 written by Dimitri van Heesch, © 1997-2000