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