pam-eid/add-eid.c

67 lines
1.4 KiB
C

/*
This software is licensed under GPL-3, as shown in the file LICENSE
Author: Linux Gruppe IRB
Copyright: Linux Gruppe IRB, 2024
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <glib.h>
#include <pwd.h>
#include "authorized_eid.h"
#include "client.h"
int main(int argc, char *argv[])
{
struct passwd *passwd;
FILE *authorized_eid;
gchar *hash;
CURL *curl;
char *res;
if ((curl = curl_easy_init()) == NULL)
{
fprintf(stderr, "curl_easy_init() failed");
exit(-1);
}
port = 24727;
res = eidResponse(curl);
if (res == NULL)
{
fprintf(stderr, "Did not receive a valid result from the web\n");
exit(-2);
}
hash = g_compute_checksum_for_string(G_CHECKSUM_SHA512, res, strlen(res));
errno = 0;
if ((passwd = getpwuid(geteuid())) == NULL)
{
fprintf(stderr, "Error while trying to find passwd entry for effective UID %u: ", geteuid());
if (errno != 0)
fprintf(stderr, "%s\n", strerror(errno));
else
fprintf(stderr, "No such user\n");
exit(-3);
}
if ((authorized_eid = auth_fopen(passwd, "a")) == NULL)
{
fprintf(stderr, "Could not open german eID card data file for writing\n");
exit(-4);
}
fchmod(fileno(authorized_eid), S_IRUSR | S_IWUSR);
fprintf(authorized_eid, "%s\n", hash);
fclose(authorized_eid);
}