Files correlati : Ricompilazione Demo : [ ] Commento : 0000823: installazione client Descrizione se il client di rete ha una chiave che non si riabilita in automatico non viene data la possibilità di aggiornare il numero della chiave in quanto se mi collego mi apre in automatico l'installazione e non mi permette di cambiare la password. Sistema operativo Vista. 0000834: aggiornamenti da internet Descrizione Lo scaricamento delle ptf da internet (test100) segnala un errore window che comincia con 'can't enumerate...' 0000835: scarico ptf da internet Descrizione Dopo lo scarico delle ptf da internet, dopo la partenza della videata di setup l'applicazione si interrompe con il seguente errore: Uscire dal programma CAMPO prima di procedere con l'aggiornamento/installazione. git-svn-id: svn://10.65.10.50/trunk@16850 c028cbd2-c16b-5b4b-a496-9718f37d4682
201 lines
5.4 KiB
C++
Executable File
201 lines
5.4 KiB
C++
Executable File
#include <applicat.h>
|
||
#include <config.h>
|
||
#include <scanner.h>
|
||
#include <utility.h>
|
||
|
||
#include "ba1500.h"
|
||
|
||
HIDDEN void build_key(char* dninst_key)
|
||
{
|
||
for (int i = 0; i < 8; i++)
|
||
dninst_key[i] = 'A'+ rand() % 26;
|
||
}
|
||
|
||
HIDDEN void decode_string(char* dninst_key, char* data)
|
||
{
|
||
build_key(dninst_key);
|
||
char tmp[1024];
|
||
int i;
|
||
for (i = 0; data[i]; i++)
|
||
tmp[i] = data[i] - (i < 8 ? dninst_key[i] : tmp[i - 8]);
|
||
tmp[i] = '\0';
|
||
strcpy(data, tmp);
|
||
}
|
||
|
||
#ifdef DBG
|
||
|
||
HIDDEN void encode_string(char* dninst_key, char* data)
|
||
{
|
||
build_key(dninst_key);
|
||
|
||
char tmp[1024];
|
||
int i;
|
||
for (i = 0; data[i]; i++)
|
||
tmp[i] = data[i] + (i < 8 ? dninst_key[i] : data[i - 8]);
|
||
tmp[i] = '\0';
|
||
strcpy(data, tmp);
|
||
}
|
||
|
||
HIDDEN bool build_dninst()
|
||
{
|
||
ifstream inf("dninst.txt", ios::in);
|
||
if (inf.good())
|
||
{
|
||
char dninst_key[8] = "";
|
||
|
||
ofstream ouf("dninst.zip", ios::out | ios::binary);
|
||
char line[256];
|
||
inf.getline(line, sizeof(line));
|
||
const int year = atoi(line);
|
||
CHECKD(year >= 2006 && year <= 3000, "Anno errato:", year);
|
||
srand(883); // Inizializza generatore numeri casuali per l'anno
|
||
encode_string(dninst_key, line);
|
||
ouf << line << '\n';
|
||
srand(year); // Inizializza generatore numeri casuali per i moduli
|
||
|
||
while (!inf.eof())
|
||
{
|
||
inf.getline(line, sizeof(line));
|
||
encode_string(dninst_key, line);
|
||
ouf << line << '\n';
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
#endif
|
||
|
||
const char* split_ass(const int ass_year)
|
||
{
|
||
int year = ass_year, number = 0;
|
||
if (ass_year > 2008)
|
||
{
|
||
year = (ass_year/1000)*1000 + (ass_year%1000)/10;
|
||
number = ass_year%10;
|
||
}
|
||
|
||
TString& tmp = get_tmp_string();
|
||
tmp << year;
|
||
if (number > 0)
|
||
tmp << '/' << number;
|
||
return tmp;
|
||
}
|
||
|
||
|
||
HIDDEN bool show_error(const char* str)
|
||
{
|
||
int app_year, dum1, dum2, dum3;
|
||
TApplication::get_version_info(app_year, dum1, dum2, dum3);
|
||
|
||
TString msg;
|
||
msg << TR("Impossibile aggiornare automaticamente l'assistenza ")
|
||
<< split_ass(app_year) << ":\n" << str << '.';
|
||
return error_box(msg);
|
||
}
|
||
|
||
// Copia il file dninst.zip dal CD/server alla cartella corrente
|
||
bool update_dninst(bool force)
|
||
{
|
||
#ifdef DBG
|
||
if (force && main_app().argc() > 2 && strcmp(main_app().argv(2), "-dninst") == 0)
|
||
{
|
||
build_dninst();
|
||
return true;
|
||
}
|
||
#endif
|
||
|
||
//legge dal diskpath di install.ini la directory da cui aggiornarsi;se il dninst.zip di tale..
|
||
//..directory e' piu' nuovo di quello in locale -> lo copia in locale
|
||
const TFilename local_name = "setup/dninst.zip";
|
||
TConfig ini("install.ini", "Main");
|
||
TFilename remote_name = ini.get("DiskPath");
|
||
remote_name.add(local_name);
|
||
if (remote_name.exist())
|
||
{
|
||
if (!force)
|
||
{
|
||
force = !local_name.exist();
|
||
if (!force)
|
||
{
|
||
const long local_date = xvt_fsys_file_attr(local_name, XVT_FILE_ATTR_MTIME);
|
||
const long remote_date = xvt_fsys_file_attr(remote_name, XVT_FILE_ATTR_MTIME);
|
||
force = remote_date > local_date;
|
||
}
|
||
}
|
||
if (force)
|
||
{
|
||
make_dir(local_name.path());
|
||
fcopy(remote_name, local_name);
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool update_assistance_year()
|
||
{
|
||
if (dongle().hardware() == _dongle_network)
|
||
{
|
||
show_error(TR("Il server di autorizzazioni deve essere disattivato"));
|
||
return false;
|
||
}
|
||
|
||
update_dninst(true);
|
||
|
||
const TFilename dninst = "setup/dninst.zip";
|
||
if (dninst.exist())
|
||
{
|
||
char dninst_key[8] = "";
|
||
|
||
TScanner keys(dninst);
|
||
TString& anno = keys.line();
|
||
srand(883);
|
||
decode_string(dninst_key, anno.get_buffer());
|
||
const int ass_year = atoi(anno);
|
||
//se l'anno di assistenza della versione (dninst.zip) e' piu' grande di quello attualmente registrato sulla...
|
||
//...chiavetta controlla se il serialnumber della chiavetta e' presente nella lista dei codici...
|
||
//...validi dentro il dninst.zip
|
||
if (ass_year > dongle().year_assist())
|
||
{
|
||
const int serno = get_serial_number();
|
||
srand(ass_year);
|
||
while (!keys.eof())
|
||
{
|
||
TString& line = keys.line();
|
||
if (line.empty())
|
||
break;
|
||
decode_string(dninst_key, line.get_buffer());
|
||
const int sn = atoi(line);
|
||
if (sn == serno || line[0] == '*')
|
||
{
|
||
dongle().set_year_assist(ass_year);
|
||
if (dongle().burn())
|
||
{
|
||
return true; //Complimenti,la chiavetta e' presente nella lista e sara' aggiornato l'anno di assistenza
|
||
}
|
||
else
|
||
{
|
||
show_error(FR("Errore di scrittura sulla chiave di protezione"));
|
||
return false;
|
||
} //if(dongle().burn...
|
||
} //if(sn==serno...
|
||
} //while(!keys.eof()...
|
||
//Non e' riuscito a trovare la chiavetta nell'elenco, non puo' aggiornare automaticamente
|
||
show_error(TR("Il numero di serie di questa postazione non <20> presente sul database"));
|
||
}
|
||
else //if(ass_year>dongle...
|
||
{
|
||
//Se l'anno di assistenza sulla chiave e' maggiore di quello sul dninst segnala l'incongruenza e poi?
|
||
if (ass_year < dongle().year_assist())
|
||
show_error(TR("L'anno di assistenza sul database e' inferiore a quello registrato sulla chiave di protezione"));
|
||
//Se l'anno di assistenza coincide con quello sulla chiave -> la chiave ha gia' l'assistenza...
|
||
//...corretta abilitata e puo' proseguire l'aggiornamento
|
||
else
|
||
return true; //ok, sei abilitato a proseguire!
|
||
}
|
||
}
|
||
else
|
||
show_error(TR("Il database dei numeri di serie non <20> accessibile"));
|
||
return false;
|
||
}
|