/* vi: set sw=4 ts=4: * * Copyright (C) 2001 - 2007 Christian Hohnstaedt. * * All rights reserved. */ #include "exception.h" #include "db_base.h" #include #include #include #include #include #include #include #include #include #define RESIZE 1024 #define RDBUF 256 static int database = -1; static int h2n(const char c) { if (c>='0' && c<='9') return c-'0'; if (c>='a' && c<='f') return c-'a'+10; if (c>='A' && c<='F') return c-'A'+10; return 0; } static char *read_data(const char *asc, int *retlen) { char *p; int len=0, binlen=0, alloclen=RESIZE; p = (char*)malloc(alloclen); if (!p) return NULL; *retlen = 0; while(asc[len] != '\0') { p[binlen] = (h2n(asc[len])<<4) + h2n(asc[len+1]); len +=2; binlen++; if (binlen == alloclen) { alloclen +=RESIZE; p = (char *)realloc(p, alloclen); } } *retlen = binlen; return p; } QString readLine(QFile *file) { QString data; qint64 begin; char buffer[RDBUF], *p; int ret, len; while ((ret = file->read(buffer, RDBUF-1)) >0) { p = strchr(buffer, '\n'); if (p) { begin = file->pos() - ret; len = p - buffer; file->seek(begin + len + 1); //printf("Begin: %ld len=%d\n", begin,len); if (p > buffer && p[-1] == '\r') p--; *p = '\0'; data += buffer; return data; } buffer[ret] = '\0'; data += buffer; continue; } return data; } static int set_db(const char *name) { QStringList sl; sl << "keydb" << "reqdb" << "certdb" << "tempdb" << "crldb" << "settings"; for (int i=0; i= 0 && database < 5) db = dbs[database]; else db = NULL; kv ^= 1; p = read_data(CCHAR(line.trimmed()), &retlen); if (db && !md5) { if (kv) { pki = db->newPKI(); if (!pki) { break; } pki->setIntName(p); } else { try { pki->oldFromData((unsigned char*)p, retlen); db->insert(pki); } catch (errorEx &err) { printf("Error catched for '%s'\n", CCHAR(pki->getIntName())); } } } else if (md5) { if (database == 5) { p = read_data(CCHAR(line.trimmed()), &retlen); if (kv) md5sum = (!strcmp(p, "pwhash")) ? true : false; if (!kv && md5sum) { strncpy(md5, p, md5_len); ret = 0; break; } } } free(p); } else { if (kv) { printf("Binary value expected\n"); break; } handle_option(line); } } file.close(); if (ret <0) { throw errorEx(filename, strerror(errno)); return -1; } return 0; }