aheinecke@404: /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik aheinecke@404: * Software engineering by Intevation GmbH aheinecke@404: * aheinecke@404: * This file is Free Software under the GNU GPL (v>=2) aheinecke@404: * and comes with ABSOLUTELY NO WARRANTY! aheinecke@404: * See LICENSE.txt for details. aheinecke@404: */ aheinecke@4: #include "certificatelist.h" aheinecke@4: aheinecke@7: #include aheinecke@7: aheinecke@9: #define PARSER_VERSION "1" aheinecke@9: aheinecke@70: CertificateList::CertificateList() : mStatus(NoList) aheinecke@70: { aheinecke@70: } aheinecke@70: aheinecke@70: list_status_t CertificateList::readList(const char *fileName) aheinecke@4: { aheinecke@7: char *data = NULL; aheinecke@7: size_t size = 0; aheinecke@4: aheinecke@249: mCertificates.clear(); andre@203: mDate = QDateTime(); andre@203: mData = QString(); aheinecke@249: mFileName = QString::fromUtf8(fileName); andre@203: aheinecke@31: mStatus = read_and_verify_list(fileName, &data, &size); aheinecke@4: aheinecke@9: if (!isValid()) { aheinecke@70: return mStatus; aheinecke@9: } aheinecke@9: aheinecke@9: // Take the data into the Qt Universe where memory is plentiful aheinecke@9: // and CPU's are fast :) aheinecke@84: mData = QString::fromLatin1(data, size); aheinecke@9: free(data); aheinecke@9: data = NULL; aheinecke@84: QStringList lines = mData.split("\n"); aheinecke@9: aheinecke@9: for (int i = 0; i < lines.size(); ++i) { aheinecke@9: QString curLine = lines[i].trimmed(); aheinecke@9: if (curLine.startsWith("F:")) { aheinecke@9: if (curLine.right(1) != PARSER_VERSION) { aheinecke@9: qDebug() << "Invalid Format Version"; aheinecke@9: mStatus = IncompatibleVersion; aheinecke@70: return mStatus; aheinecke@9: } aheinecke@9: } else if (curLine.startsWith("D:")) { aheinecke@9: curLine.remove(0, 2); aheinecke@472: mDate = QDateTime::fromString(curLine, Qt::ISODate); aheinecke@472: if (!mDate.isValid()) { aheinecke@472: qDebug() << "Invalid Date: " << curLine; aheinecke@9: mStatus = InvalidFormat; aheinecke@70: return mStatus; aheinecke@9: } aheinecke@9: } else if (curLine.startsWith("I:")) { aheinecke@249: mCertificates << Certificate(curLine); aheinecke@9: } else if (curLine.startsWith("R:")) { aheinecke@249: mCertificates << Certificate(curLine); aheinecke@9: } else if (curLine.startsWith("S:")) { aheinecke@31: // Signature is verified in read_and_verify_list aheinecke@9: continue; aheinecke@9: } else if (!curLine.isEmpty()){ aheinecke@9: qDebug () << "Don't know how to handle: " << curLine; aheinecke@9: } aheinecke@7: } aheinecke@70: return mStatus; aheinecke@4: } aheinecke@70: aheinecke@70: CertificateList::CertificateList(const char *fileName) : mStatus(NoList) aheinecke@70: { aheinecke@70: readList(fileName); aheinecke@70: } aheinecke@79: aheinecke@249: const QList& CertificateList::getCertificates() const aheinecke@249: { aheinecke@249: return mCertificates; aheinecke@79: }