[LatinaLUG] Modifiche a CUPS

Gabriele Mambrini g.mambrini@caspur.it
Lun 21 Lug 2008 09:00:22 CEST


Enrico Bassetti ha scritto:
> Common Unix Printing System
> 
> Dunque, sviluppando il mio ultimo Progetto (notare la 'P'), che consiste
> in pratica nel configurare CUPS per far inviare via email (che bello
> avere un sistema di posta casalingo) una stampa che converte in PDF, ho
> dovuto mettere mano al sorgente di cups per una accortezza da nulla ma
> che può creare problemi ad esempio nel mio caso.
> 
> Allora, CUPS memorizza i dati di accesso dentro /etc/cups/passwd.md5 nel
> formato nomeutente:gruppo:md5password
> 
> Il problema dell'md5 è che sembra cambi a seconda non solo della
> password (condizione normale), ma anche dello username e del gruppo.
> 
> Indipercuilaquale mi son buttato nel(la) sorgente per cercare qualcosa
> di utile, ed ho scoperto che l'implementazione md5 di cups è abbastanza
> criptica (qualche giorno di questi mi ci metto con impegno ;-) ). Ho
> deciso quindi di sfruttare la cosa a mio vantaggio, cioè uso le stesse
> funzioni che usa cups per la password.

è facile:

lppasswd crea la linea in quel file con questa istruzione

snprintf(line, sizeof(line), "%s:%s:%s\n", username, groupname,
                httpMD5(username, "CUPS", newpass, md5new));

dove httpMD5 calcola semplicemente MD5 sulla stringa ottenuta 
concatenando con : i primi tre argomenti

snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd);
md5_init(&state);
md5_append(&state, (md5_byte_t *)line, strlen(line));
md5_finish(&state, sum);

e poi lo converte in una stringa esadecimale

Insomma per creare una riga di quel file con la shell basta una roba tipo

USER=pluto
GROUP=lp
PASSWORD=xxxyyyzzz
DIGEST=`echo -n $USER:CUPS:$PASSWORD |md5sum|cut -d' ' -f1`
echo $USER:$GROUP:$DIGEST

> Il mio scopo è infatti quello di "scriptare" il tutto, ovvero devo
> creare una pagina web dove $tizio (oggetto "istanziato" della classe
> "Utonti") metta la sua password che va a finire dritta dritta (in
> automatico, ovviamente) in quel maledetto file.

Per scriptare un comando interattivo ti consiglio di dare un'occhiata a 
expect, mica si può sempre andare a patchare tutto :-)

Ciao
Gabriele


Maggiori informazioni sulla lista latina