pax_getname.c

Go to the documentation of this file.
00001 /********************************** */
00002 /* Rule Set Based Access Control    */
00003 /* Author and (c) 1999-2004:        */
00004 /*   Amon Ott <ao@rsbac.org>        */
00005 /* Getname functions for PAX module */
00006 /* Last modified: 06/Jan/2004       */
00007 /********************************** */
00008 
00009 #include <rsbac/types.h>
00010 #include <rsbac/pax_getname.h>
00011 #include <rsbac/helpers.h>
00012 #include <rsbac/error.h>
00013 
00014 #ifdef __KERNEL__
00015 #include <linux/string.h>
00016 #else
00017 #include <stdio.h>
00018 #include <string.h>
00019 #endif
00020 
00021 char * pax_print_flags(char * string, rsbac_pax_flags_t flags)
00022   {
00023     sprintf(string, "%c%c%c%c%c%c",
00024            flags & PF_PAX_PAGEEXEC ? 'P' : 'p',
00025            flags & PF_PAX_EMUTRAMP ? 'E' : 'e',
00026            flags & PF_PAX_MPROTECT ? 'M' : 'm',
00027            flags & PF_PAX_RANDMMAP ? 'R' : 'r',
00028            flags & PF_PAX_RANDEXEC ? 'X' : 'x',
00029            flags & PF_PAX_SEGMEXEC ? 'S' : 's');
00030     return string;
00031   }
00032 
00033 #ifndef __KERNEL__
00034 rsbac_pax_flags_t pax_strtoflags(char * string, rsbac_pax_flags_t init_flags)
00035   {
00036     char * p = string;
00037     rsbac_pax_flags_t add_flags = 0;
00038     rsbac_pax_flags_t remove_flags = 0;
00039 
00040     if(!p)
00041       return init_flags;
00042     while(*p)
00043       {
00044         switch(*p)
00045           {
00046               case 'P':
00047                 add_flags |= PF_PAX_PAGEEXEC;
00048                 break;
00049               case 'p':
00050                 remove_flags |= PF_PAX_PAGEEXEC;
00051                 break;
00052               case 'E':
00053                 add_flags |= PF_PAX_EMUTRAMP;
00054                 break;
00055               case 'e':
00056                 remove_flags |= PF_PAX_EMUTRAMP;
00057                 break;
00058               case 'M':
00059                 add_flags |= PF_PAX_MPROTECT;
00060                 break;
00061               case 'm':
00062                 remove_flags |= PF_PAX_MPROTECT;
00063                 break;
00064               case 'R':
00065                 add_flags |= PF_PAX_RANDMMAP;
00066                 break;
00067               case 'r':
00068                 remove_flags |= PF_PAX_RANDMMAP;
00069                 break;
00070               case 'X':
00071                 add_flags |= PF_PAX_RANDEXEC;
00072                 break;
00073               case 'x':
00074                 remove_flags |= PF_PAX_RANDEXEC;
00075                 break;
00076               case 'S':
00077                 add_flags |= PF_PAX_SEGMEXEC;
00078                 break;
00079               case 's':
00080                 remove_flags |= PF_PAX_SEGMEXEC;
00081                 break;
00082               case 'z':
00083                 remove_flags = RSBAC_PAX_ALL_FLAGS;
00084                 break;
00085               case 'a':
00086                 add_flags = RSBAC_PAX_ALL_FLAGS;
00087                 break;
00088             default:
00089               break;
00090           }
00091         p++;
00092       }
00093     return (init_flags | add_flags) & ~remove_flags;
00094   }
00095 #endif

Generated on Sun May 21 14:30:56 2006 for RSBAC by  doxygen 1.4.2