Ultimi commenti
- spamp su Rimborso windows: risposta di Samsung
- RedSend su Wake-On-LAN
- imagin su Notebook acer con linux preinstallato
- RedSend su Notebook acer con linux preinstallato
- RedSend su Progetto USB Power Switch (ora si fà sul serio)
- baron su CHAP Plugin
- Mimmo su Progetto USB Power Switch (ora si fà sul serio)
- RedSend su Social Bookmarking & C.
Random Posts
Tags Cloud
Post più letti
- Il Bradipo - 2,684 views
- Configurare atheros ar5007eg - 2,348 views
- Recuperare password hotmail - 1,696 views
- Cancellare linux e il bootloader (soprattutto!) - 1,510 views
- Wicd non solo su Ubuntu - 1,473 views
Archivi
- Maggio 2008 (3)
- Aprile 2008 (9)
- Marzo 2008 (11)
- Febbraio 2008 (5)
- Gennaio 2008 (12)
- Dicembre 2007 (19)
- Novembre 2007 (36)
- Ottobre 2007 (18)
- Settembre 2007 (16)
- Agosto 2007 (13)
- Luglio 2007 (21)
- Giugno 2007 (13)
- Maggio 2007 (7)
- Aprile 2007 (4)
- Marzo 2007 (10)
- Febbraio 2007 (4)
- Gennaio 2007 (3)
- Dicembre 2006 (5)
- Novembre 2006 (4)
- Ottobre 2006 (10)
- Settembre 2006 (7)
- Agosto 2006 (3)
- Luglio 2006 (3)
- Giugno 2006 (6)
- Maggio 2006 (2)
- Aprile 2006 (7)
- Marzo 2006 (2)
- Febbraio 2006 (3)
- Gennaio 2006 (20)
- Dicembre 2005 (10)
- Novembre 2005 (14)
- Ottobre 2005 (6)
- Settembre 2005 (9)
- Luglio 2005 (1)
20th
NOV
Creare un ciclo for in smarty
Posted by raphe | Filed under Appunti, Programming
Se utilizzate smarty allora avrete notato che tra le tante funzioni che possiede, purtroppo manca il ciclo for!
Di solito non si dovrebbe aver bisogno di un ciclo for all’interno di un template smarty (il foreach dovrebbe bastare), ma se proprio vi trovate in situazioni in cui non ne potete fare a meno, allora potete riprodurlo nel modo che vi illustrerò.
Ad esempio un ciclo “classico” del tipo:
for(i=0;i<N;i++)
//codice da eseguire N volte
in smarty sarebbe tradotto in questo modo:
{assign var=’inizio’ value=`0`}
{assign var=’cicli’ value=`N`}{section name=nome_qualsiasi loop=$cicli}
//codice da eseguire N volte
{assign var=’inizio’ value=`$inizio+1`}
{/section}
Spero possa esservi utile ![]()
4th
NOV
Debug php? Possibile con firePHP
Posted by raphe | Filed under Firefox Add-ons, Programming
Non si tratta di debug inteso nel senso puro ma qualche aiutino nello sviluppo!
Sto parlando di firePHP, un’estensione per firefox che permette di avere sotto controllo, dal browser, variabili superglobali come $_SESSION, $_GET, ecc., e su richiesta, variabili personalizzate.
FirePHP si compone di due parti:
- lato client: un add-on che va installata in firefox. Per il funzionamento è richiesta la precedente installazione di firebug, altro add-on del quale ho parlato in un precedente articolo.
- lato server: l’inclusione nel codice di una classe PEAR di firePHP e di un paio di chiamate di inizializzazione.
Possiamo vedere l’estrema semplicità di utilizzo, dall’esempio presente sul sito ufficiale:
/* Initialize the FirePHP API */
require_once('FirePHP_Build/Init.inc.php');/* Set the FirePHP-AccessKey which will be compared to the cookie */
FirePHP::SetAccessKey('4cc5e3ed40e1cc30dc8b9903ae581aad');/* Initialize the default FirePHP Wrapper */
FirePHP::Init();/* YOUR CODE GOES HERE - For Example */
print 'Hello World';
Il tutto si riduce a queste quattro righe di codice. Nel caso in cui invece si volesse tenere sotto controllo una variabile personalizzat, si usa la seguente sintassi:
FirePHP::SetVariable(true,array('SESSION','$_SESSION')),$_SESSION);
Potete trovare informazioni sull’utilizzo, le reference delle api, esempi, ecc., a questo indirizzo. Se invece vi interessa provarlo, qui potete vedere una demo.
8th
AGO
Driver fuori da Gentoo!!!
Posted by deepred | Filed under Linux, Programming
Sottolineo già da queste prime righe che questo articolo si rivolge esclusivamente ad utenti Gentoo!!!
Problema: il mio nuovo computer ha una scheda ethernet della Realtek RTL8168. Durante l’installazione scopro che questa scheda non è supportata dal kernel Linux (2.6.21). Poco male, penso, i driver saranno nel Portage: e invece no. I driver per questa scheda di rete sono fuori da Gentoo. Girando per Internet trovo comunque i driver linux sul sito della Realtek, li scarico, li installo e tutto è ok! O quasi! Nel senso che trattandosi di un driver questo deve essere installato ogni volta che si ricompila il kernel. Gentoo, per ovviare al problema di dover ricordarsi tutti i moduli esterni e reinstallarli, offre un tool module-rebuild che provvede a fare ciò. Ma module-rebuild funziona solo per driver che sono presenti nel Portage e il driver della mia scheda di rete non c’è!!! Come devo fare?
Soluzione: Creare una ebuild (uno script che permette di installare un pacchetto con emerge, ndr) e aggiungerla al database di module-rebuild.
Per la prima parte della soluzione ho provveduto ad aprire il mio PORTAGE_OVERLAY e dentro ho inserito la porzione di portage tree presente qui. Siccome ho utilizzato una nuova categoria (net-eth) non ancora nel Portage, ho dovuto aggiungere questa al file /usr/portage/categories.
Per aggiungerla a module-rebuild nulla è stato più semplice: è bastato digitare il comando $ module-rebuild add net-eth/r8168-0.1_alpha1.
E per altri driver fuori da Gentoo?
Sebbene la soluzione proposta sia di validità generale, affinchè sia possibile inserire nel Portage il proprio driver è necessario costruire correttamente l’ebuild. Cercherò in breve di spiegare i passi da compiere per ottenere questo risultato, illustrando a titolo di esempio quanto fatto da me per il driver suddetto.
- All’interno del proprio PORTAGE_OVERLAY creare una cartella che indichi la categoria (net-eth nel mio caso), quindi al suo interno una cartella che indica il pacchetto (r8168 nel mio caso).
- Nella cartella creata genereare il file {nome_pacchetto}-{versione}_{stato}{num}, dove {nome_pacchetto} è il nome anche della directory contenitrice, {versione} è la versione del pacchetto a disposizione, {stato} è usato per indicare informazioni aggiuntive com “alpha” o “beta” version o release canidate (”rc”) (seguite eventualmente da un numero). Quindi nel mio caso un nome accettabile era r8168-0.1_alpha1, anche se sarebbe stato più corretto (attenendosi alla versione del driver presente sul sito) il nome r8168-8.002.00_alpha1.
- Per scrivere da 0 l’ebuild bisogna cominciare dall’header: questo può essere recuperato dal file /usr/portage/header.txt.
- In secondo luogo bisogna settare le variabili necessarie: SLOT=”0″, LICENSE (indicare la licenza con cui sono forniti i driver), KEYWORDS (solitamente i fornitori del driver indicano che tipo di architeetture sono supportate), DESCRIPTION, SRC_URI (dove scaricare i driver), HOMEPAGE, IUSE (potrebbe rimanere vuoto). Se sono richieste particolari dipendenze potrebbero essere espresse attraverso le variabili DEPEND e RDEPEND. Infine, bisogna indicare la variabile S, cioè il nome della cartella all’interno del quale bisognerà lavorare: la cosa più semplice potrebbe essere scomppattare il driver, analizzare il nome della directory creata ed impostare S=${WORKDIR}/nome_directory. Nel mio caso quindi ho impostato S=${WORKDIR}/r8168-8.002.00
- Come installare tale driver? per prima cosa leggete il readme contenuto all’interno del file scompattato. Questo conterrà le istruzioni necessarie all’installazione. Possiamo dividere queste istruzioni in 3 macrogruppi: istruzione di compilazione (prima del make install), istruzioni di installazione (make install e simili), istruzioni post-installazione (dopo il make install). Nel mio caso al primo gruppo apparteneva il comando make clean modules, al secondo make install, al terzo depmod -a.
- La suddivisione al punto precedente è necessaria per capire dove inserire i comandi all’interno dell’ebuild. le instruzioni di compilazione all’interno di src_compile(), le istruzioni di installazione all’interno di src_install() e le eventuali istruzioni post-installazione in pkg_postinst().
- Una attenzione particolare è riservata a make install: quando viene inserito nell’ebuild dovrà essere aggiunto il parametro DESTDIR=${D}. In questo modo il pacchetto sarà installato nella sandbox e solo dopo nella fase di merging nel sistema. Questo, come nel mio caso, potrebbe non bastare: infatti i Makefile del driver potrebbero contenere path assoluti. Per evitare ciò bisogna creare una patch e aggiungerla all’albero di portage all’interno della cartella files.
- Se è necessario applicare patch sarà necessario modificare ulteriormente la nostra ebuild, aggiungendo la linea inerith eutils e la funzione src_unpack(). Questa consetrà delle seguenti 3 istruzioni:
unpack ${A}cd "${S}" epatch "${FILESDIR}"/nome_patch - Una volta fatto completato l’ebuild bisognerà eseguire il comando: ebuild /path/to/ebuild/nome_ebuild.ebuild digest.
- Ora rimane da lanciare emerge e vedere che succede: se tutto funziona avete creato la vostra ebuild.
Creare una patch? E come si fà?
È abbastanza semplice: si copia il file da patchare. Tale nuovo file sarà modificato opportunamente aggiungendo, modificando o eliminando elementi nel file: ad esempio nel caso siano presenti path assolute queste potrebbero essere fatte precedere da ${DESTDIR}. Una volta modificato opportunamente, saremo pronti a creare il nostro patchfile: diff -u origfile newfile > patchfile. Attenzione al path inserito per newfile: deve essere tale che sia possibile riferircisi dalla posizione corrente durante la fase di installazione.
Spero che queste righe possano essere utili a qualche gentooista per risolvere i propri problemi.
Tags: diff > driver > ebuild > emerge > gentoo > kernel > Linux > module-rebuild > open-source > patch > Portage > Programming > scheda-di-rete > tips26th
GIU
SSL assente? No problem… usa CHAP login system
Posted by RedSend | Filed under Programming
No non temete, non volgio vendervi nulla, in questo post vi voglio introdurre ad un problema molto comune, ovvero quello di inviare atraverso le form html informazioni sensibili, come nome utente e password, su un canale insicuro non protetto. E’ fobia comune tra i più paranoici e anche quelli un pò meno, assicurarsi che ogni qual volta si inseriscono informazioni sensibili in un form html, controllare che la connessione avvenga tramite protocollo https e quindi utilizzando ssl per rendere il canale sicuro e criptato. A volte però capita che il server su cui si vanno ad inviare i dati non supporta il protocollo https, come ad esempio il server su cui risiede questo blog, quindi ogni qual volta inserisco nome utente e password per accedervi, le informazioni viaggiano in chiaro sotto gli occhi di tutti. Una possibile soluzione a questo inconveniente è l’utilizzo di un protocollo per l’autenticazione che garantisce la segretezza delle informazioni da inviare nonostante viaggino su un canale insicuro. Tra i vari protocolli che esistono, CHAP è uno di questi. Il suo funzionamento è molto semplice e per implementarlo è richiesta solo una funzione hash valida e la possibilità di concatenare delle stringhe :).

Il livello di sicurezza di questo protocollo è pari a quello della funzione hash che si utilizza, giusto per essere chiari, una funzione hash è, scusate la ripetizione, una funzione univoca operante in un solo senso (ossia, che non può essere invertita), atta alla trasformazione di un testo di lunghezza arbitraria in una stringa di lunghezza fissa, relativamente limitata (info). L’idea che sta dietro al protocollo CHAP è questo:
- Il server al momento della richiesta del form per effettuare il login, generera un numero casuale che non si ripeterà in futuro e lo inserirà all’interno della sessione associata con il client che ha effettuato la richiesta e all’interno del form in un campo hidden
- Il client (il browser), riceverà il form con il numero generato dal server, farà inserire nome utente e password all’utente e al momento della sottomissione del form, provvederà a concatenarà le stringhe corrispondenti al nome utente, alla password e al numero inviato dal server le passerà alla funzione hash che restituirà una stringa di lunghezza fissa, la quale sarà l’unico dato insieme al nome utente ad essere inviato al server attraverso il canale di comunicazione non protetto.
- Il server per verificare se nome utente e password inviati dal client sono corretti, provvederà ad effettuare le stesse operazioni di prima, quindi concatenerà nome utente e password, recuperandole da un database o ovunque si voglia, aggiungerà anche il numero casuale generato recuperandolo dalla sessione associata al client e sulla stringa ottenuta vi calcolerà l’hash. Se il risultato ottenuto dalla funzione hash corrisponde alla stinga che ha ricevuto dal client, allora vuol dire che sono state usate le stesse informazione per calcolare l’hash e quindi che il nome utente e password erano corrette.
In questo modo l’unica informazione che viaggerà nel canale non protetto è la stringa corrispondente all’hash dei dati inseriti nel client, quindi essendo una funzione non invertibile, cioè che dall’hash di una stringa non è possibile ricavarne la stringa originale, anche se qualcuno è in ascolto sul canale non saprà cosa farsene dei dati catturati.
A questo indirizzo vi è una guida più dettagliata del protocollo e su una sua possibile implementazione utilizzando php e javascript.
Altri link: libreria MD5
