import subprocess import os import shutil class RegisterMachine: def __init__(self): self.pathfile = "/var/log/n4d/macs_id" self.teacherfile = "/var/log/n4d/teachermachine" if not os.path.exists(self.pathfile): open(self.pathfile,'a') prevmask = os.umask(0) os.chmod(self.pathfile,0774) os.lchown(self.pathfile,0,0) os.umask(prevmask) if not os.path.exists(self.teacherfile): open(self.teacherfile,'a') prevmask = os.umask(0) os.chmod(self.teacherfile,0774) os.lchown(self.teacherfile,0,0) os.umask(prevmask) #def __init__ def get_available_id_list(self): registerfile = open(self.pathfile,'r') list=[] maxlimit = 0 for line in registerfile: number = line.split(';')[0] try: int(number) list.append(int(number)) except: pass pprocess = subprocess.Popen(['llxcfg-showvars','DHCP_HOST_MAX'],stdout = subprocess.PIPE,stderr = subprocess.PIPE) try: maxlimit = int(pproces.stdout.readline().split("'")[1]) maxlimit += 1 except: maxlimit = 81 lavailable = range(0,maxlimit) list.sort() list.reverse() for i in list: lavailable.pop(i) lavailable.pop(0) return {'status':True,'result':lavailable} #def get_registred_machines def remove_register(self,mac): registerfile = open(self.pathfile,'r') content = registerfile.readlines() registerfile.close() found = False new_content = [] idtoremove = "" for line in content: try: lid,lmac = line.split(';') lmac = lmac.strip('\n') except: continue if lmac == mac : idtoremove = lid found = True else: new_content.append(line) if not found : return {'status':False,'result':'MAC ' + mac + ' is not registred' } registerfile = open(self.pathfile,'w') for line in new_content: registerfile.write(line) registerfile.close() macfile = open(self.teacherfile,'r') maccontent = macfile.readlines() macfile.close() new_maccontent = [] for lmac in maccontent: lmac = lmac.strip('\n') if lmac != idtoremove : new_maccontent.append(lmac) macfile = open(self.teacherfile,'w') for line in new_maccontent: macfile.write(line+'\n') macfile.close() return {'status':True,'result':'MAC '+mac+' has been removed' } #def register_machine def register_machine(self,id,mac,isteacher): teacherfile = open(self.teacherfile,'a') registerfile = open(self.pathfile,'r') content = registerfile.readlines() new_content = [] found = False for line in content: try: lid,lmac = line.split(';') lmac = lmac.strip('\n') except: continue if id == lid : return {'status':False,'result':'Id '+ lid + ' is locked by MAC '+lmac } if lmac == mac : new_content.append(str(id)+';'+mac + '\n') found = True else: new_content.append(line) if not found : new_content.append(str(id)+';'+mac+'\n') if isteacher: teacherfile.write(str(id)+"\n") registerfile.close() registerfile = open(self.pathfile,'w') for line in new_content: registerfile.write(line) registerfile.close() return {'status':True,'result':'MAC '+ mac + ' has been registred with id ' + id } #def register_machine