Changeset 5650


Ignore:
Timestamp:
Aug 2, 2017, 3:00:33 PM (20 months ago)
Author:
hectorgh
Message:

wip

Location:
n4d-freeradius/trunk/fuentes
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • n4d-freeradius/trunk/fuentes/debian/prerm

    r5635 r5650  
    1212       
    1313
    14         for F in $FILES:
     14        for F in $FILES; do
    1515                ORIGINAL_FILE="$ORIGINAL_FILE_PATH/$F"
    1616                DIVERTED_FILE="$ORIGINAL_FILE.diverted"
     
    1818                        rm -rf "$ORIGINAL_FILE" || true
    1919                        dpkg-divert --remove --package ${PKG} --rename --divert "$DIVERTED_FILE" "$ORIGINAL_FILE"
     20                fi
     21        done
    2022
    2123
  • n4d-freeradius/trunk/fuentes/install/etc/n4d/conf.d/FreeRadiusManager

    r782 r5650  
    55[METHODS]
    66install_conf_files=adm,admins
     7enable_group_filtering=adm,admins
     8disable_group_filtering=adm,admins
     9add_group_to_filter=adm,admins
  • n4d-freeradius/trunk/fuentes/install/usr/share/n4d/python-plugins/FreeRadiusManager.py

    r5636 r5650  
    33import os
    44import shutil
     5import re
     6import tempfile
     7import copy
    58
    69import xmlrpclib as x
     
    1316class FreeRadiusManager:
    1417       
     18       
    1519        def __init__(self):
    1620               
    1721                self.radius_path="/etc/freeradius/"
    1822                self.templates_path="/usr/share/n4d/templates/n4d-freeradius/"
     23                self.groups_file=self.radius_path + "users.lliurex_groups"
     24               
     25                self.groups={}
     26                self.diversions={}
     27               
    1928                self.variable_list=["LDAP_BASE_DN","INTERNAL_NETWORK","INTERNAL_MASK"]
    20                
    21                 self.diversions={}
    2229               
    2330                self.diversions["/etc/freeradius/clients.conf"]="/etc/freeradius/clients.conf.diverted"
     
    3542        #def init
    3643       
     44        def startup(self,options):
     45       
     46                self.variable=copy.deepcopy(objects["VariablesManager"].get_variable("FREERADIUS"))
     47               
     48                if self.variable==None:
     49                       
     50                        self.variable={}
     51                        self.variable["configured"]=False
     52                        self.variable["groups_filter"]={}
     53                        self.variable["groups_filter"]["enabled"]=False
     54                        self.variable["groups_filter"]["groups"]={}
     55                        self.variable["groups_filter"]["default_auth"]=None
     56                       
     57                        try:
     58                                objects["VariablesManager"].add_variable("FREERADIUS",copy.deepcopy(self.variable),"","Freeradius service variable","n4d-freeradius")
     59                        except:
     60                                # If this fails, something is horribly wrong and we have bigger problems than this variable not being saved
     61                                # Hopefully we'll be able to do it later, anyway
     62                                pass
     63
     64                if self.variable["groups_filter"]["enabled"]:
     65                        groups=self.parse_groups_file()
     66                        if groups != self.variable["groups_filter"]["groups"]:
     67                                self.variable["groups_filter"]["groups"]=groups
     68                                self.save_variable()
     69               
     70        #def startup
     71       
     72       
     73        def parse_groups_file(self):
     74               
     75                group_pattern='^DEFAULT\s+Ldap-Group\s*==\s*"(\w+)"\s*(,\s*Auth-Type\s*:=\s*\w+\s*)?$'
     76                groups={}
     77               
     78                if os.path.exists(self.groups_file):
     79                       
     80                        f=open(self.groups_file)
     81                        for line in f.readlines():
     82                                ret=re.match(group_pattern,line)
     83                                if ret!=None:
     84                                        group,auth_type=ret.groups()
     85                                        groups[group]=auth_type
     86                                       
     87                        f.close()
     88               
     89                return groups
     90               
     91        #def parse_groups_file
     92       
     93       
     94        def generate_groups_file(self,groups=None):
     95               
     96                header = "# FILE GENERATED BY n4d-freeradius PLUGIN\n\n"
     97                final_rule="DEFAULT Auth-Type := Reject\n\n"
     98               
     99                group_skel='DEFAULT Ldap-Group == "%s"'
     100                extra_auth=", Auth-Type := EAP"
     101                               
     102                if not groups:
     103                        groups=self.variable["groups_filter"]["groups"]
     104                       
     105                fd,tmpfile=tempfile.mkstemp()
     106                f=open(tmpfile,"w")
     107                f.write(header)
     108                for group in groups:
     109                        f.write(group_skel%group)
     110                        if groups[group]!=None:
     111                                f.write(extra_auth)
     112                        f.write("\n")
     113                       
     114                f.write(final_rule)
     115                f.close()
     116                os.close(fd)
     117               
     118                shutil.copy(tmpfile,self.groups_file)
     119                self.fix_perms(self.radius_path+"users.lliurex_groups")
     120               
     121                return True
     122               
     123        #def generate_groups_file
     124       
     125       
     126        def clean_groups_file(self):
     127               
     128                f=open(self.groups_file,"w")
     129                f.write("# FILE GENERATED BY n4d-freeradius PLUGIN\n\n")
     130                f.close()
     131               
     132        #def clean_groups_file
     133       
     134       
     135        def set_filter_default_auth(self,auth_type=None):
     136               
     137                if not self.variable["groups_filter"]["enabled"]:
     138                        return {"msg":False,"status":"Filter not enabled"}
     139               
     140                self.variable["groups_filter"]["default_auth"]=auth_type
     141               
     142                for group in self.variable["groups_filter"]["groups"]:
     143                        self.variable["groups_filter"]["groups"][group]=auth_type
     144                               
     145                self.generate_groups_file()
     146                self.restart_service()
     147               
     148                self.save_variable()
     149               
     150                return {"msg":True,"status":"auth configured"}
     151               
     152        #def set_filter_default_auth
     153       
     154       
     155        def add_group_to_filter(self,group,extra_auth=None):
     156               
     157                if not self.variable["groups_filter"]["enabled"]:
     158                        return {"msg":False,"status":"Filter not enabled"}
     159                       
     160                if extra_auth==None:
     161                        extra_auth=self.variable["groups_filter"]["default_auth"]
     162               
     163                groups=self.parse_groups_file()
     164               
     165                if group not in groups or groups[group]!=extra_auth:
     166                        self.variable["groups_filter"]["groups"][group]=extra_auth
     167                       
     168                self.generate_groups_file()
     169                self.save_variable()
     170                self.restart_service()
     171               
     172                return {"msg":True,"status":"Group added"}
     173               
     174               
     175        #def add_group_to_filter
     176       
     177       
     178        def remove_group_from_filter(self,group):
     179               
     180                if not self.variable["groups_filter"]["enabled"]:
     181                        return {"msg":False,"status":"Filter not enabled"}
     182               
     183                groups=self.parse_groups_file()
     184               
     185                if group in groups:
     186                        groups.pop(group)
     187                        self.variable["groups_filter"]["groups"]=groups
     188                       
     189                self.generate_groups_file()
     190                self.restart_service()
     191                self.save_variable()
     192               
     193                return {"msg":True, "status": "Group removed"}
     194               
     195        #def remove_group_from_filter
     196       
     197       
     198        def enable_group_filtering(self):
     199               
     200                self.variable["groups_filter"]["enabled"]=True
     201                self.generate_groups_file()
     202               
     203                self.save_variable()
     204                self.restart_service()
     205               
     206                return {"msg":True,"status":""}
     207               
     208        #def enable_filtering
     209       
     210       
     211        def disable_group_filtering(self):
     212               
     213                # get groups currently written in case user did it manually
     214                groups=self.parse_groups_file()
     215                # save groups in local variable
     216                self.variable["groups_filter"]["groups"]=groups
     217               
     218                self.clean_groups_file()
     219                self.variable["groups_filter"]["enabled"]=False
     220               
     221                self.save_variable()
     222                self.restart_service()
     223               
     224                return {"msg":True,"status":""}
     225               
     226        #def empty_groups_file
     227       
     228       
     229        def save_variable(self):
     230               
     231                objects["VariablesManager"].set_variable("FREERADIUS",copy.deepcopy(self.variable))
     232               
     233        #def save_variable
     234       
     235        def restart_service(self):
     236               
     237                os.system("systemctl restart freeradius")
     238               
     239        #def restart_service
     240               
     241       
    37242        def render_templates(self,server,radius_secret,ldap_user,ldap_pwd,router_ip):
    38243               
    39244       
    40                 '''
    41                 # TESTING
    42                
    43                 c=x.ServerProxy("https://172.20.9.136:9779")
    44                 vars=c.get_variable_list("","VariablesManager",self.variable_list)
    45                
    46                 # /TESTING
    47                 '''
    48                
    49245                vars=objects["VariablesManager"].get_variable_list(self.variable_list)
    50246               
     
    91287
    92288       
    93         def fix_perms(self,f):
    94                
    95                 os.system("chown root:freerad %s"%f)
    96                 os.system("chmod 640 %s"%f)             
    97                
    98         #def fix_perms
    99 
    100         def enable_diversions(self):
    101 
    102                 for f in self.diversions:
    103                         original_file=f
    104                         lliurex_file=f+".lliurex"
    105                        
    106                         if not os.path.exists(self.diversions[f]):
    107                                 command="dpkg-divert --add --package n4d-freeradius --rename --divert '%s' '%s'"%(self.diversions[f],original_file)
    108                                 os.system(command)
    109                                
    110                         if not os.path.islink(self.diversions[f]):
    111                                 os.symlink(lliurex_file, original_file)
    112 
    113         #def enable_diversions
    114 
    115 
    116         def disable_diversions(self):
    117 
    118                 pass
    119 
    120         #def disable_diversions
    121 
    122        
    123289        def install_conf_files(self,server,radius_secret,ldap_user,ldap_pwd,router_ip):
    124290               
     
    152318                                os.makedirs(self.radius_path+"sites-available")
    153319                       
    154                         print 1
    155320                        shutil.copy(self.templates_path+"sites-available/default",self.radius_path+"sites-available/default.lliurex")
    156321                       
     
    171336                        # user.lliurex_groups
    172337                        shutil.copy(self.templates_path+"users.lliurex_groups",self.radius_path)
     338                        self.fix_perms(self.radius_path+"users.lliurex_groups")
    173339                       
    174340                        # modules/mschap
    175341                        shutil.copy(self.templates_path+"modules/mschap",self.radius_path+"modules/mschap.lliurex")
    176342
     343                       
    177344                        self.enable_diversions()               
    178345       
    179346                        os.system("systemctl restart freeradius")
    180347                       
     348                        self.variable["groups_filter"]["enabled"]=False
     349                        self.variable["configured"]=True
     350                       
     351                        self.save_variable()
     352                       
    181353                        return {"status":True,"msg":str(True)}
    182354                       
     
    186358                       
    187359               
    188                
    189360        #def install_conf_files
     361       
     362       
     363        def fix_perms(self,f):
     364               
     365                os.system("chown root:freerad %s"%f)
     366                os.system("chmod 640 %s"%f)             
     367               
     368        #def fix_perms
     369       
     370
     371        def enable_diversions(self):
     372
     373                for original_file in self.diversions:
     374
     375                        lliurex_file=original_file+".lliurex"
     376                       
     377                        if not os.path.exists(self.diversions[original_file]):
     378                                command="dpkg-divert --add --package n4d-freeradius --rename --divert '%s' '%s'"%(self.diversions[original_file],original_file)
     379                                os.system(command)
     380                               
     381                        if not os.path.islink(original_file):
     382                                os.symlink(lliurex_file, original_file)
     383
     384        #def enable_diversions
     385
     386
     387        def disable_diversions(self):
     388
     389                pass
     390
     391        #def disable_diversions
    190392       
    191393       
  • n4d-freeradius/trunk/fuentes/install/usr/share/n4d/templates/n4d-freeradius/modules/ldap

    r5606 r5650  
    131131
    132132        groupname_attribute = cn
    133         groupmembership_filter = "(memberUid=%{Usern-Name})"
     133        groupmembership_filter = "(memberUid=%{User-Name})"
    134134        groupmembership_attribute = memberUid
    135135
  • n4d-freeradius/trunk/fuentes/install/usr/share/n4d/templates/n4d-freeradius/users.lliurex_groups

    r5636 r5650  
     1# THIS FILE IS GENERATED BY n4d-freeradius PLUGIN
     2
Note: See TracChangeset for help on using the changeset viewer.