R: R: [Tech] Samba 2.2.8a come PDC-BDC e controllo di login

Alessio Chemeri chemeri.a@lapulce.it
Mar 20 Gen 2004 16:08:41 CET


lisac wrote:

>>io non ho problemi a metterla a disposizione :-)
>>spero di essermi spiegato precedentemente, e' roba abbastanza semplice


il software per vedere i registri e' il mvPCinfo.


[...]

> 
> ok, intanto giusto per vedere come l'hai pensata... se poi vuoi sapere
> qualcosa su ldap...:-)

sicuramente dopo ti bombardo per sapere qualcosa riguardo ai due ldap
che avete su.. :-)


gli script si appoggiano su mysql per memorizzare i dati degli utenti
ma e' anche in questo caso una roba semplice... il db stesso e' composto
da due elenchi della lavandaia se serve metto pure quello.


il netlogon e' cosi' fatto:

i vari explorer.exe XXXX lanciano minipaginine che fanno vedere cosa
sta succedendo... e' molto carino da vedere nei pc client.. ho suggerito
all'helpdesk di cambiarlo in un altro modo, appena hanno tempo faranno
una pagina unica e cambieranno via via le gif che si vedranno (meno
caotico...)

comunque ogni login genera un ticket nella share

\\cerbero.pulce\pclogin

e un report dei registri in

\\cerbero.pulce\reg-scan

gli script in python vanno a leggere quelli e aggiornano.. i dati :-)


le pagine php te le mando dopo via email.. :-)

ciao

Alessio

---------------------------------- netlogon.bat
@ echo off
echo ***********************************************
echo * Logon script in corso, attendere prego...   *
echo *         BENTROVATO IN PTSItalia!            *
echo *                                             *
echo * Avvio pagina benvenuto in corso...          *
explorer.exe http://intranet.pulce/cerbero_login_start.htm
echo * Allineamento orario con server02 in corso.. *
explorer.exe http://intranet.pulce/cerbero_login_start_orario.htm
net time \\server02.pulce /set /yes
echo * Collegamenti a risorse di rete varie        *
echo * su k: per patch eventuali in corso...       *
explorer.exe http://intranet.pulce/cerbero_login_start_connk.htm
net use k: /delete
net use k: \\cerbero.pulce\pclogin
echo * Collegamento a z: per presnet in corso...   *
explorer.exe http://intranet.pulce/cerbero_login_start_connz.htm
net use z: /delete
net use z: \\appsrv01.pulce\presnet /persistent:yes
echo *                                             *
echo * Avviso il server di logon che sono attivo   *
explorer.exe http://intranet.pulce/cerbero_login_start_avviso.htm
echo %OS%  > H:\login-%COMPUTERNAME%
echo %COMPUTERNAME% >> H:\login-%COMPUTERNAME%
echo %USERNAME% >> H:\login-%COMPUTERNAME%
date /T >> H:\login-%COMPUTERNAME%
time /T >> H:\login-%COMPUTERNAME%
echo SERVER01 >> H:\login-%COMPUTERNAME%


:: PARTE AGGIUNTA IL 15/01/04 per il controllo dei registri delle macchine
:: degli utenti che si loggano.
:: utilizza un programma (mvPCinfo) che si trova su una cartella condivisa
:: su cerbero,
:: 1 mappa la cartella
:: 2 lancia il programma (il programma da in output un file htm)
:: 3 sgancia la cartella
:: sara' compito dello script di cerbero posizionare il file htm nel posto
:: giusto ed eventualmente verificare incongruenze con il suo precedente.


net use J: /delete
net use J: \\cerbero.pulce\reg-scan
J:\mvPCinfo.exe -scsv -onsoftware 
-offcompu,pro,bio,mem,har,rem,cd-r,vid,sound,net,ip,ma,e-m,op,mo,pr,ke,in


net use J: /delete




copy H:\login-%COMPUTERNAME% k:\
del H:\login-%COMPUTERNAME%
echo * Disconnetto la condivisione per patch...    *
explorer.exe http://intranet.pulce/cerbero_login_start_disck.htm
net use k: /delete




echo ***********************************************


----------------------- FINE netlogon.bat








ecco i due script che girano su cerbero:


---------------------------------- CHECKUTENTISNELLO.PY

#! /usr/bin/env python

#V1.0 per inserire i pc collegati by Alberto Dallai e Alessio Chemeri
# 20 Novembre 2003

import smtplib
import sys;
import string;
import time;
import _mysql;
import os;

#Settaggi
serverpath="server01";
mysqluser="-------------";
passwordmysql="-----------";
dbname="managementservice";
dirpath="/usr/pclogin";
dominio=".pulce";

Ora = time.localtime(time.time())
dataing=str(Ora[0])+"-"+str(Ora[1])+"-"+str(Ora[2])+" 
"+str(Ora[3])+":"+str(Ora[4])+":"+str(Ora[5])
logtesto="\n"+dataing+" Avvio procedura controllo\n"
#print logtesto
#log = open("log-ricezionesms.txt","a")
#log.seek(0, 2)
#log.write (logtesto)

lenfile=1

while lenfile>0:
     nfile=os.listdir(dirpath)
     lenfile=len(nfile)

     if lenfile!=0:
      nomefile=nfile[0]
      #print "esamino file:",nomefile
      if (nomefile[0]=="l" and nomefile[1]=="o" and nomefile[2]=="g"):
         f = open(dirpath+"/"+nomefile,"r")
         contenuto=f.read ()
         print "CONTENUTO=",contenuto
         campi= contenuto.split(chr(10))
         #print campi[0];
         #print campi[1];
         #print campi[2];
         #print campi[3];
         #print campi[4];
         #print campi[5];

         campi[0]=campi[0].replace("\r","")
         campi[1]=campi[1].replace("\r","")
         campi[1]=campi[1].replace(" ","")

         campi[2]=campi[2].replace("\r","")
	campi[2]=campi[2].replace(" ","")
         campi[3]=campi[3].replace("\r","")
         campi[4]=campi[4].replace("\r","")
         campi[4]=campi[4].replace(".",":")
         campi[4]=campi[4]+":00"

         campi[5]=campi[5].replace("\r","")

         #Metto a posto la data. gg/mm/aaaa -> aaaa-mm-gg
         data=campi[3]
         anno=data[6]+data[7]+data[8]+data[9]
         mese=data[3]+data[4]
         giorno=data[0]+data[1]
         datagiusta=anno+"/"+mese+"/"+giorno

	# controllo che non ci sia gia lo stesso utente collegato altrove
	db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
	select="select count(0) from pccollegati where username='"+campi[2]+"' 
and stato=10";
	#print " select=",select;
	db.query(""+select+"");
	r=db.use_result();
	risultato=r.fetch_row();
	#print risultato;
	camporisultante=risultato[0];
         #print camporisultante;	
	n=camporisultante[0];
	#print n;
	db.close;
	if n<>0:
		db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
		select ="select id from pccollegati where username='"+campi[2]+"' and 
stato=10";
		db.query(""+select+"");
		r=db.use_result();
		n=int(n);
		#print "utente gia collegato ad altre ",n,"  macchine... controllo"
		for i in range(0,n):
			risultato=r.fetch_row();
			# controllo ogni macchina che risulta usata dall'utente campi[2];
			riga=risultato[0];
			#print "controllo " + riga[0] + " con " + campi[1];
			if cmp(riga[0],campi[1])==1:
				#print " risultato uguale quindi utente doppione in:  " + riga[0]
				# controllo che non sia un falso allarme, cioe' che la macchina non 
sia la stessa di adesso.
				# infatti l'utente potrebbe aver resettato la macchina nei recenti 
minuti.
				# contatto prima il nuovo arrivato e lo avviso che esiste gia una 
persona collegata con quell'account
				scrivimessaggio = "echo Attenzione utente gia collegato nel pc " + 
riga[0] + " > messaggio.txt";
				os.system(scrivimessaggio);
	                        messaggeria = "smbclient -M " + campi[1] + " < 
messaggio.txt";
        		                os.system(messaggeria)
				# poi contatto il vecchio utente e lo avviso del suo CLONE arrivato.
				scrivimessaggio = "echo Avviso dal controllore di dominio: nel pc " 
+ campi[1] + " risulta connessa una persona con in tuo nome utente.il 
gruppo helpdesk sta provvedendo a controllare la situazione. grazie > 
messaggio.txt";
				os.system(scrivimessaggio);
				os.system("rm -f messaggio.txt");
				messaggeria = "smbclient -M " + riga[0] + " < messaggio.txt";
				os.system(messaggeria)
				os.system("rm -f messaggio.txt");
				
							
						
	db.close;

         db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
         select="select id from pccollegati where id='"+campi[1]+"'";
         #print "select=",select
         db.query (""+select+"");
         r=db.use_result()
         risultato=r.fetch_row();
         n=len(risultato)
         db.close()
         comando_da_dare=0;
	if n==0:
	    # se non esiste un altro record con quel nome devo fare la insert 
(comando_da_dare=1)
	    comando_da_dare=1;
         else:
	    # se esiste gia un altro record con quel nome devo fare un update 
(comando_da_dare=2)
             comando_da_dare=2;
	# mi riconnetto al db, a causa del bug che le update non funzionano se 
rifatte su una aperta
	db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
	if comando_da_dare==1:
		query_comando="insert pccollegati (id,os,username,data,ora,stato,DC) 
VALUES 
('"+campi[1]+"','"+campi[0]+"','"+campi[2]+"','"+datagiusta+"','"+campi[4]+"','10','"+campi[5]+"')";
	if comando_da_dare==2:
		query_comando="update pccollegati set 
os='"+campi[0]+"',username='"+campi[2]+"',data='"+datagiusta+"',ora='"+campi[4]+"',stato=10,DC='"+campi[5]+"' 
where id='"+campi[1]+"'"				
	#print "comando =",query_comando;
	db.query (""+query_comando+"");
	#cancello il file esaminato
	os.unlink(dirpath+"/"+nomefile)
         db.close;

         #
         #da qui....
         Ora = time.localtime(time.time())
         #Formato yyyy-mm-dd
         dataserver=str(Ora[0])+"-"+str(Ora[1])+"-"+str(Ora[2])

         elencoprogrammi=""
         #nomefile="alessio"

         email="sistemi@lapulce.it"
         fromaddr = "cerbero@lapulce.it"
         toaddrs  = email.split()

         db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
         update="update torquemada_hw set check=0 where 
nomepc='"+nomefile+"'";
         db.query (""+update+"");

         dircsv="../usr/registri/";
         nomefile=campi[1].lower();

         nomefile2=campi[1].lower()+".csv";
         f = open(dircsv+nomefile2,"r")
         contenuto=f.read ()
         #print "CONTENUTO=",contenuto

         programmi= contenuto.split(chr(44))
         k=7;
         i=0;
         lungh=len(programmi);
         arriva=lungh-6-k;
         print "LUNGH=",lungh;
         while (i<arriva):
             nomeprogramma=programmi[k+i]
             i=i+1;
             percorsoprogramma=programmi[k+i]
             i=i+2;

             #Controlla se il programma e gia presente...
             db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
             nomeprogramma2=nomeprogramma.replace("'","\\'")
             select="select id from torquemada_hw where 
nomepc='"+nomefile+"' and nomeprog='"+nomeprogramma2+"'and 
pathprog='"+percorsoprogramma+"'"
             print "select=",select;
             db.query (""+select+"");
             r=db.use_result()
             risultato=r.fetch_row();
             n=len(risultato)

             if n==0:
              elencoprogrammi+="\n"+nomeprogramma
              insert="insert torquemada_hw (nomepc,nomeprog,pathprog) 
values ('"+nomefile+"','"+nomeprogramma2+"','"+percorsoprogramma+"')"
              db.query (""+insert+"");
             else:
              tuplaelementi=risultato[0];
              id=tuplaelementi[0]
              db.close;
              db = 
_mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
              update="update torquemada_hw set check='1' where id="+id;
              print "update=",update;
              db.query (""+update+"");


             db.close;


             print 
"\nnomeprogramma=",nomeprogramma,"-perocorso=",percorsoprogramma

         if (elencoprogrammi!=""):
             Ora = time.localtime(time.time())
             dateserver=str(Ora[2])+"/"+str(Ora[1])+"/"+str(Ora[0])+" 
"+str(Ora[3])+":"+str(Ora[4])+":"+str(Ora[5])


             testo=campi[1]+" Ha installato questo programma: 
"+elencoprogrammi;

             msg = ("Subject: Programma installato\r\nFrom: %s\r\nTo: 
%s\r\nDate: %s\r\n\r\n"
             % (fromaddr, string.join(toaddrs, ", "),dateserver))
             msg = msg+testo
             server = smtplib.SMTP('126.0.1.100')
             server.set_debuglevel(1)
             server.sendmail(fromaddr, toaddrs, msg)
             server.quit()

         #Controlla se ci sono programmi cancellati
         select="select nomeprog from torquemada_hw where check='0' and 
nomepc='"+nomefile+"'"
         db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
         print "select=",select;
         db.query (""+select+"");
         r=db.use_result()
         n=1;
         disinstallato="";
         while n!=0:
             risultato=r.fetch_row();
             n=len(risultato)
             if n!=0:
                 tuplaelementi=risultato[0];
                 nomeprog=tuplaelementi[0]
                 disinstallato+="\n"+nomeprog

         db.close;

         #Invia email dei programmi che sono stati disinstallati
         print "disinstallato=",disinstallato

         if disinstallato!="":
             testo=campi[1]+" Ha disinstallato questo programma: 
"+disinstallato;

             Ora = time.localtime(time.time())
             dateserver=str(Ora[2])+"/"+str(Ora[1])+"/"+str(Ora[0])+" 
"+str(Ora[3])+":"+str(Ora[4])+":"+str(Ora[5])

             msg = ("Subject: Programma disinstallato\r\nFrom: %s\r\nTo: 
%s\r\nDate: %s\r\n\r\n"
             % (fromaddr, string.join(toaddrs, ", "),dateserver))
             msg = msg+testo
             server = smtplib.SMTP('126.0.1.100')
             server.set_debuglevel(1)
             server.sendmail(fromaddr, toaddrs, msg)
             server.quit()

             delete="delete from torquemada_hw where check='0' and 
nomepc='"+nomefile+"'"
             db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
             db.query (""+delete+"");
             db.close;
         os.unlink(dircsv+nomefile2)

sys.exit();









------------------------------------ PINGAUTENTI.PY

#! /usr/bin/env python

#V1.2 per pingare le macchine e aggiornare il db by Alberto Dallai 20 
Novembre 2003
#In caso di errore fa un report sulle ultime query fatte

import pingMod
import smtplib
import sys;
import string;
import time;
import _mysql;
import os;

#Settaggi
serverpath="server01";
dbserveraddress="126.0.0.104"
mysqluser="-------------";
passwordmysql="-----------";
dbname="managementservice";
dirpath="pclogin";
dominio=".pulce"

select="select * from pccollegati"
update="";
stato=0;
risultato="";
n=0;
t="0";
#print "select=",select

try:
  db = _mysql.connect(dbserveraddress,mysqluser,passwordmysql,dbname);
  t="1";
  db.query (""+select+"");
  t="2";
  r=db.store_result()
  #r=db.use_result()
  #print r;
  t="3";
  risultato=r.fetch_row();
  #print risultato;
  t="4";

  n=len(risultato)
  t="5";
  #print "N=",n;
  while n!=0:
     t="6";
     campo=risultato[0]
     t="7";
     #print campo;
     nomeutente=campo[0]
     t="8";
     url= nomeutente+dominio;
     t="9";
     #Prova
     #url= "AG31"+dominio;
     db = _mysql.connect(serverpath,mysqluser,passwordmysql,dbname);
     t="10";
     pingStatus, pingReport= (pingMod.ping(url))
     t="11";
     #print pingStatus,pingReport
     stato=int(campo[5])
     t="12";
     if pingStatus!=0:
         #print url+" non collegato";
         #print "stato=",stato
         t="13";
         if stato>0:
             t="14";
             update="update pccollegati set stato=stato-1 where 
id='"+nomeutente+"'"
             #print update;
             t="15";
             db.query (""+update+"");
             t="16";

     else:
         #print url+" collegato";
         #print "stato=",stato
         t="17";
         if stato<10:
             t="18";
             update="update pccollegati set stato=10 where 
id='"+nomeutente+"'"
             t="19";
             #print update;
             db.query (""+update+"");
             t="20";

     risultato=r.fetch_row();
     t="21";
     #print risultato;

     n=len(risultato)
     t="22";

except:
  Ora = time.localtime(time.time())
  dateserver=str(Ora[1])+"/"+str(Ora[2])+"/"+str(Ora[0])+" 
"+str(Ora[3])+":"+str(Ora[4])+":"+str(Ora[5])
  testo= "pingautenti.py - Database SERVER01 down! 
select="+select+"update="+update+"stato="+stato+"risultato="+risultato+"n="+n+"t="+t
  email="web@lapulce.it"
  fromaddr = "server01"
  toaddrs  = email.split()
  msg = ("Subject: DB SERVER01 DOWN\r\nFrom: %s\r\nTo: %s\r\nDate: 
%s\r\n\r\n"
  % (fromaddr, string.join(toaddrs, ", "),dateserver))
  msg = msg+testo
  server = smtplib.SMTP('126.0.1.100')
  #server.set_debuglevel(1)
  server.sendmail(fromaddr, toaddrs, msg)
  server.quit()


sys.exit();


-----------------------------------------------------------------------------------






Maggiori informazioni sulla lista flug-tech