rsyslog/tools/logsigner.c
Rainer Gerhards b326c76f45 style: normalize C source formatting via clang-format (PoC)
This commit applies the new canonical formatting style using `clang-format` with custom settings (notably 4-space indentation), as part of our shift toward automated formatting normalization.

⚠️ No functional changes are included — only whitespace and layout modifications as produced by `clang-format`.

This change is part of the formatting modernization strategy discussed in:
https://github.com/rsyslog/rsyslog/issues/5747

Key context:
- Formatting is now treated as a disposable view, normalized via tooling.
- The `.clang-format` file defines the canonical style.
- A fixup script (`devtools/format-code.sh`) handles remaining edge cases.
- Formatting commits are added to `.git-blame-ignore-revs` to reduce noise.
- Developers remain free to format code however they prefer locally.
2025-07-16 13:56:21 +02:00

154 lines
3.7 KiB
C

/* This is a tool for offline signing logfiles via the guardtime API.
*
* NOTE: this currently is only a PoC and WiP! NOT suitable for
* production use!
*
* Current hardcoded timestamper (use this if you do not have an
* idea of which one else to use):
* http://stamper.guardtime.net/gt-signingservice
* Check the GuardTime website for the URLs of nearest public services.
*
* Copyright 2013 Adiscon GmbH
*
* This file is part of rsyslog.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* -or-
* see COPYING.ASL20 in the source distribution
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either exprs or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <gt_base.h>
#include <gt_http.h>
#include "librsgt.h"
#if 0
void
outputhash(GTDataHash *hash)
{
int i;
for(i = 0 ; i < hash->digest_length ; ++i)
printf("%2.2x", hash->digest[i]);
printf("\n");
}
void
timestampIt(GTDataHash *hash)
{
int r = GT_OK;
GTTimestamp *timestamp = NULL;
unsigned char *der = NULL;
char *sigFile = "logsigner.TIMESTAMP";
size_t der_len;
/* Get the timestamp. */
r = GTHTTP_createTimestampHash(hash,
"http://stamper.guardtime.net/gt-signingservice", &timestamp);
if(r != GT_OK) {
fprintf(stderr, "GTHTTP_createTimestampHash() failed: %d (%s)\n",
r, GTHTTP_getErrorString(r));
goto done;
}
/* Encode timestamp. */
r = GTTimestamp_getDEREncoded(timestamp, &der, &der_len);
if(r != GT_OK) {
fprintf(stderr, "GTTimestamp_getDEREncoded() failed: %d (%s)\n",
r, GT_getErrorString(r));
goto done;
}
/* Save DER-encoded timestamp to file. */
r = GT_saveFile(sigFile, der, der_len);
if(r != GT_OK) {
fprintf(stderr, "Cannot save timestamp to file %s: %d (%s)\n",
sigFile, r, GT_getErrorString(r));
if(r == GT_IO_ERROR) {
fprintf(stderr, "\t%d (%s)\n", errno, strerror(errno));
}
goto done;
}
printf("Timestamping succeeded!\n");
done:
GT_free(der);
GTTimestamp_free(timestamp);
}
void
sign(const char *buf, const size_t len)
{
int r;
GTDataHash *hash = NULL;
printf("hash for '%s' is ", buf);
r = GTDataHash_create(GT_HASHALG_SHA256, (const unsigned char*)buf, len, &hash);
if(r != GT_OK) {
fprintf(stderr, "GTTDataHash_create() failed: %d (%s)\n",
r, GT_getErrorString(r));
goto done;
}
outputhash(hash);
timestampIt(hash); /* of course, this needs to be moved to once at end ;) */
done: GTDataHash_free(hash);
}
#endif
void processFile(char *name) {
FILE *fp;
size_t len;
char line[64 * 1024 + 1];
gtctx ctx = NULL;
ctx = rsgtCtxNew((unsigned char *)"SIGFILE", GT_HASHALG_SHA256);
sigblkInit(ctx);
if (!strcmp(name, "-"))
fp = stdin;
else
fp = fopen(name, "r");
while (1) {
if (fgets(line, sizeof(line), fp) == NULL) {
if (!feof(fp)) perror(name);
break;
}
len = strlen(line);
if (line[len - 1] == '\n') {
--len;
line[len] = '\0';
}
// sign(line, len);
sigblkAddRecord(ctx, (unsigned char *)line, len);
}
if (fp != stdin) fclose(fp);
sigblkFinish(ctx);
rsgtCtxDel(ctx);
}
int main(int argc, char *argv[]) {
rsgtInit("rsyslog logsigner " VERSION);
processFile("-");
rsgtExit();
return 0;
}